Skip to main content

New detectors (2026 leverage batch)

Vulkro shipped 45+ new rules in mid-2026 across security categories the incumbent SAST tools did not cover. This page is a flat index; each rule has a finding-level message + remediation that surfaces inline in scan output. Use vulkro explain <RULE-ID> for the detailed explainer.

RAG indexing safety (novel surface)

No incumbent SAST tool ships this surface. Covers Pinecone, Chroma, Weaviate, Qdrant, FAISS, LanceDB, Milvus, LangChain VectorStore family, LlamaIndex. Python / JS / TS.

IDSeverityWhat
RAG-001CriticalSecret-shaped value (api_key, *_token, private_key, ...) ingested into a vector store. Embedded secrets are searchable forever; rotation does not retroactively purge embeddings.
RAG-002HighPII-shaped value (ssn, dob, credit_card, ...) ingested without a redactor (Presidio / scrubadub / scrub_pii / MaskedText) in scope. Embedding index is in scope for GDPR Article 17 erasure.
RAG-003MediumUntrusted-input value (req.body, request.json, ctx.params, ...) ingested without an allowlist / classifier. Index poisoning corrupts future retrievals.

SSRF

src/security/ssrf.rs. Python / JS / TS / Go / Java HTTP clients (requests, httpx, axios, fetch, http.Get, HttpClient, OkHttp, RestTemplate).

IDSeverityWhat
SSRF-001CriticalTainted request value reaches HTTP client without URL allowlist or hostname validation.
SSRF-002HighHardcoded cloud-metadata endpoint literal (AWS IMDS v1/v2, GCP, Azure, Alibaba, Oracle, DigitalOcean).
SSRF-003MediumURL-shape local without scheme + host validator in scope.

CI/CD pipeline injection (novel surface)

src/security/cicd_injection.rs. Walks .github/workflows/*.yml, .gitlab-ci.yml, .circleci/config.yml only.

IDSeverityWhat
CICD-001CriticalGitHub Actions ${{ github.event.<attacker-controlled> }} rendered into run: block. Covers pull_request.body / title / head.ref, issue.body / title, comment.body, review.body, commits.message and 12 other attacker-controlled fragments.
CICD-002HighGitLab CI $CI_COMMIT_MESSAGE / $CI_COMMIT_TITLE / $CI_MERGE_REQUEST_TITLE unquoted in script: / before_script: / after_script:.
CICD-003MediumCircleCI << parameters.* >> unquoted in run:.

Archive zip-slip

src/security/archive_slip.rs. Sister to the existing go_zip_slip Go detector.

IDSeverityWhat
ARCH-SLIP-PY-001HighPython zipfile / tarfile .extractall / .extract without safe_extract guard.
ARCH-SLIP-JAVA-001HighJava ZipEntry.getName() into File / FileOutputStream / Paths.get without canonical-path check.
ARCH-SLIP-RB-001HighRubyzip manual File.open(entry.name, 'wb') loop.
ARCH-SLIP-NET-001High.NET ZipFile.ExtractToDirectory / ExtractToFile without Path.GetFullPath + StartsWith check.

CRLF / response-header injection

src/security/crlf_injection.rs. CWE-93. Three rules across the highest-volume framework families.

IDSeverityWhat
CRLF-001HighPython Flask / Django: Response.headers[...] = req.X, set_cookie(value=req.X), redirect(req.X).
CRLF-002HighNode Express: res.set / res.header / res.cookie / res.append / res.redirect with request-shaped value.
CRLF-003HighGo net/http w.Header().Set/Add, http.Redirect, http.SetCookie reading from r.URL.Query() / r.PostFormValue / r.Header.Get.

Log injection (CWE-117)

src/security/log_injection.rs. Five rules covering the most-deployed log frameworks per language.

IDSeverityWhat
LINJ-001MediumPython logging / logger.{debug,info,...} / print.
LINJ-002MediumNode winston / pino / bunyan / console.*.
LINJ-003MediumGo log.Printf / log.Println / slog.*.
LINJ-004MediumJVM logger / LOGGER / SLF4J / log4j.
LINJ-005MediumRuby Rails.logger / Logger.logger / bare logger.*.

SAML signature wrapping

src/security/saml_signature_wrapping.rs. Catches CVE-2024-45409, CVE-2022-39299, CVE-2017-11427 family.

IDSeverityWhat
SAML-001CriticalPython python3-saml / pysaml2 content-read (get_attributes, get_nameid, ...) without is_valid / validate_signature / verify in scope.
SAML-002CriticalJava OpenSAML / Spring Security SAML getAssertions / getAttributes / getSubject without SignatureValidator / SAMLSignatureProfileValidator / TrustEngine in scope.
SAML-003CriticalApex SAMLP.getSamlBody / Auth.AuthToken.validateToken without Auth.SamlSsoConfig.validate / Crypto.verify in scope.

.NET advanced deserialization

src/security/dotnet_deser_variants.rs. Extends the existing dotnet_binary_formatter detector with the remaining RCE-shaped .NET deserializers.

IDSeverityWhat
DOTNET-DESER-002CriticalNewtonsoft JsonSerializerSettings.TypeNameHandling set to All / Auto / Objects / Arrays.
DOTNET-DESER-003CriticalLosFormatter + Deserialize in scope (legacy ASP.NET ViewState; ysoserial.net entry point).
DOTNET-DESER-004CriticalDataContractJsonSerializer constructed with the two-arg (typeof(T), knownTypes) form.

GCP IaC

src/security/gcp_iac.rs. Walks *.tf, firestore.rules, *.sh / *.yml.

IDSeverityWhat
GCP-IAC-001CriticalFirestore rule allow read/write/...: if true;.
GCP-IAC-002HighGCS bucket IAM allUsers / allAuthenticatedUsers OR predefinedAcl: publicRead*.
GCP-IAC-003HighCloud Run / Cloud Functions allUsers invoker, or gcloud --allow-unauthenticated.
GCP-IAC-004CriticalProject / folder / organization IAM bound to allUsers / allAuthenticatedUsers.
GCP-IAC-005HighBigQuery dataset / table ACL granting access to allUsers.

Azure IaC

src/security/azure_iac.rs. Walks *.tf, *.bicep, ARM JSON templates.

IDSeverityWhat
AZ-IAC-001HighStorage Account allow_blob_public_access = true OR publicNetworkAccess: 'Enabled'.
AZ-IAC-002CriticalKeyVault secret with inline literal value in Terraform / Bicep / ARM.
AZ-IAC-003HighNSG inbound rule with source_address_prefix = "*" or "0.0.0.0/0".
AZ-IAC-004HighAzure SQL Server / Managed Instance with public_network_access_enabled = true.
AZ-IAC-005HighCosmos DB account with public_network_access_enabled = true.

Rust unsafe + FFI patterns

src/security/rust_unsafe.rs. Walks .rs files directly (Rust is not in the language pipeline yet). Skips /target/ and /vendor/.

IDSeverityWhat
RUST-UNSAFE-001Mediumunsafe { ... } block without a // SAFETY: comment in the 3-line lookback.
RUST-UNSAFE-002Hightransmute without a size_of check in scope.
RUST-UNSAFE-003CriticalRaw-pointer dereference without is_null() guard in the 4-line lookback.
RUST-UNSAFE-004MediumStruct in a file declaring extern "C" without #[repr(C)].

Cross-method taint engine rules

Backends for the language-neutral taint engine (src/security/taint_core/). Each rule is engine-confirmed: SecurityFinding.trace carries the source-to-sink hop chain (rendered as SARIF codeFlows[]).

IDSeverityWhat
PY-TAINT-SQL-001HighPython Flask / Django / FastAPI handler whose request parameter reaches cursor.execute / engine.execute / session.execute without parameter binding or a sanitiser.
JS-TAINT-SQL-001HighExpress / Koa / Fastify handler whose request parameter reaches knex.raw / sequelize.query / db.query / pool.query.