This change log includes updates to detectors made in September 2026.
@CrossOrigin annotation sets its origins, value, or originPatterns attributes to the wildcard *, exposing endpoints to cross-origin data theft and unauthorized actionsgo-hardcoded-secrets-basic-ide
.pem, .key, .crt, or .pub, algorithm-identifier prefixes like ssh- and ecdsa-, distinguished-name strings such as CN=, and template placeholdersname, url, file, path, type, host, and port as secretspassword, secret, token, and pass, along with common weak and default credential valuesgo-hardcoded-secrets-library-ide
X-Forwarded-Host and Content-Type, so only security-sensitive headers like Authorization, X-Api-Key, and Cookie are flaggedgo-csrf-missing-protection-ide
gorilla/csrf with the disabled secure cookie flag via csrf.Secure(false)gorilla/mux POST routes using HandleFunc().Methods() that lack CSRF protectionnet/http handlers checking r.Method == http.MethodPost without proper CSRF protectiongo-os-command-injection-hb
exec.Command() callsbufio.NewReader(os.Stdin), database row scans, and command output capture from exec.Command().Output() and CombinedOutput()exec.Command() detectiongo-path-traversal-hb
path.Clean() with filepath.Join() and strings.Trim() to confine file access to a fixed base directory, and no longer flags itfilepath.FromSlash(filepath.Clean()) variant paired with filepath.Join() as a recognized safe constructiongo-path-traversal
path.Clean() and confines it to a fixed base directory via filepath.Join() with strings.Trim()filepath.FromSlash(filepath.Clean()) variant and to cases where the base path is a const, so these constructions are no longer flaggedgo-file-read-taint
path.Clean() and confines it to a fixed base directory via filepath.Join() with strings.Trim()filepath.FromSlash(filepath.Clean()) variant and to cases where the base path is a const, so these constructions are no longer flaggedjavascript-code-injection-hb
document.write(), document.writeln(), innerHTML, outerHTML, insertAdjacentHTML()), which belong to cross-site scripting rather than code injectioneval(), setTimeout(), setInterval(), and Functionjavascript-os-command-injection-hb
javascript-llm-prompt-injection
responses.create), Cohere v2 (chat), and Vercel AI SDK (generateText)DOMPurify.sanitize, substring, slice, and replace from the sanitizers list because they do not neutralize prompt injection attacks (e.g., truncation or newline stripping alone is insufficient)kotlin-crypto-insecure-iv
IvParameterSpec() and GCMParameterSpec(), including IVs derived from string transformations via .toByteArray()ByteArray() initializer blocks and from concatenated byte arrays, while still allowing securely generated IVs from SecureRandom.nextBytes()kotlin-csrf-protection
csrf { it.disable() }, alongside the existing named-parameter form csrf -> csrf.disable() and the nested-call formkotlin-hardcoded-credentials
getPassword() and fetchToken()client_secret, grant_type, and authorization_code, which caused false positiveskotlin-hardcoded-secrets-library-ide
jedis.auth(), JedisPool, JedisCluster, and redis:// connection URIs), PasswordAuthentication, and HTTP Authorization headers set via addHeader() and headers.append()kotlin-insecure-tls-version
tlsVersions() calls using deprecated versions such as TlsVersion.TLS_1_0, TlsVersion.TLS_1_1, and TlsVersion.SSL_3_0SSLContextBuilder().useProtocol() and SSLContextBuilder().setProtocol()kotlin-jwt-none-algorithm
signWith(SignatureAlgorithm.NONE) and its string-based variant SignatureAlgorithm.valueOf("NONE")signWith(), and empty signing keys set via setSigningKey("")kotlin-null-pointer-dereference
!! not-null-assertion operator and dereferences on nullable val/var values, covering field access, method calls, and invocationsrequireNotNull(), checkNotNull(), and if (x == null) return, so safely guarded dereferences are left aloneadd(), put(), size(), toString(), toUpperCase(), exists()) in favor of broader nullable-dereference coveragekotlin-weak-password-encoder
NoOpPasswordEncoder, StandardPasswordEncoder, MessageDigestPasswordEncoder, ShaPasswordEncoder, Md5PasswordEncoder, and LdapShaPasswordEncoder, including the NoOpPasswordEncoder.getInstance() static factoryMd5PasswordEncoder to the recognized weak encoder classes.encode() and .encodePassword() back to construction, which missed weak encoders used as fields, @Bean return values, or fluent configkotlin-path-traversal-hb
PlatformFile APIsPlatformFile operationskotlin-path-traversal-ide
loadTemplate() calls that were incorrectly flagged as path traversal vulnerabilities when used for legitimate template loading operationsexpect class declarations that were being matched as potential file access patterns despite performing no actual file operationsVerifyCsrfToken is imported with an alias and subclassed with non-empty except arrayspython-cdk-internet-access-enabled-for-sagemaker-notebook
CfnNotebookInstancedirect_internet_access to Disabledpython-cdk-msk-broker-logging
aws_msk module imports followed by aws_msk.CfnCluster() callslogging_info was configured through helper functions instead of direct LoggingInfoProperty callspython-cdk-msk-broker-to-broker-tls
CfnCluster() constructor callspython-cdk-ec2-instance-termination-protection
CfnInstance class in addition to Instance, covering both high-level and CloudFormation-level CDK constructsadd_property_override("DisableApiTermination", True)python-cdk-elb-tls-https-listeners-only
aws_cdk.aws_elasticloadbalancingv2)CfnListener constructs created via aliased module importspython-cdk-neptune-cluster-encryption-at-rest
aws_cdk.aws_neptune)CfnDBCluster constructs with storage_encrypted=False using aliased module importspython-cdk-redshift-cluster-maintenance-settings
aws_cdk.aws_redshift) for Redshift cluster detectionallow_version_upgrade=None False is now flagged, since None defaults to AWS-managed upgrade behaviorpython-cdk-redshift-require-tls-ssl
CfnCluster constructs using aliased aws_redshift module referencespython-cdk-sagemaker-notebook-missing-encryption
aws_cdk.aws_sagemaker)CfnNotebookInstance constructs missing kms_key_id when using aliased module importspython-cdk-sns-topic-ssl-publish-only
Topic() constructorsEffect and Bool value to avoid wrongly suppressing insecure configurationsPolicyDocument and CfnPolicy resource-bound guardspython-cdk-sqs-queue-ssl-requests-only
Queue() constructorsSecureTransport condition regardless of effectpython-cdk-open-search-slow-logs-to-cloud-watch
slow_search_log_enabled and slow_index_log_enabled for proper logging validationLoggingOptionspython-code-injection-hb
request.form.get(), request.form.getlist(), and request.form.keys() methodsrequest.headers.get(), request.headers.getlist(), and request.cookies.get() methodsrequest.query_string and request.get_query_parameter()python-csrf-disabled-ide
WTF_CSRF_ENABLED and WTF_CSRF_CHECK_DEFAULT configuration settingscsrf.exempt() calls that bypass CSRF protectionTESTING = Truepython-os-command-injection-hb
subprocess.run(shell=True) not being detected due to an overly broad exclusion pattern that incorrectly suppressed the dangerous shell=True variantunsafe-cloudpickle-load
pattern: blocks (import cloudpickle $VAR = cloudpickle.load($FILE)) that produced combinatorial overlapping matches - including matches anchored on the import line - which made the rule untestable. It now uses pattern-inside: import cloudpickle as a scope guard with a direct cloudpickle.load(...) match, emitting exactly one finding per load call$VAR = cloudpickle.load(...) and skipped direct calls like return cloudpickle.load(fh). The new cloudpickle.load(...) pattern catches both assigned and direct callspython-dangerous-template-string
PromptTemplate.from_template(), the PromptTemplate() constructor, ChatPromptTemplate.from_template(), and ChatPromptTemplate.from_messages() methodsaction_controller.forgery_protection_origin_check, default_protect_from_forgery, and allow_forgery_protection settingsskip_forgery_protection method calls in Rails 5.2+ applicationsscala-cross-site-scripting
Html(...) in Play Framework applicationsmap { ... } and form data bound with bindFromRequest().fold(...)scala-hardcoded-secrets-basic-ide
glpat-, AIza, AKIA, gh*_, xox*-, sk_live_, SG., pypi-, ya29., and JWTsscheme://user:pass@host) and secrets passed to credential methods such as setPassword(), setApiKey(), addHeader() (Authorization/x-api-key), UsernamePasswordCredentials, and BasicAWSCredentialsftpPassword, redisPassword, and clientSecretscala-path-traversal
Files.readAllLines(...)getRequestURI, Play Framework request.cookies.get(...), request.body.asFormUrlEncoded, and multipart file.filenamescala-os-command-injection
Seq(...).! and Process(...) where the input source was not previously recognizedscala-zip-unzip-file-path-traversal
ZipInputStream, ZipArchiveInputStream, and ZipFilenew File(...) and Paths.get(...) using entry.getNamescala-csrf-disabled-ide
http.csrf(csrf => csrf.disable()) and method-reference patternshttp.csrf(_.disable())AbstractHttpConfigurer.disable() method-reference pattern used in newer Spring Security configurationsbody, queryStringParameters, and pathParametersRequest patterns to include serverless and other TypeScript application structuresNo detectors were disabled in September 2026.