UID2-7633, UID2-7619: suppress 2 CVEs in .trivyignore - #206
Merged
Conversation
- CVE-2026-18446 (UID2-7633) - CVE-2026-69152 (UID2-7619) Each is present but not reachable from this service; see the linked tickets for the per-CVE impact assessments. Reachability alone determines suppress-vs-fix.
This was referenced Aug 6, 2026
BehnamMozafari
approved these changes
Aug 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Suppresses 2 vulnerabilities in
.trivyignore, expiry 2026-11-06 (3 months). No code fixes — each is present in the image but not reachable from this service.Reachability alone determines suppress-vs-fix: a fixed version existing upstream does not make an unreachable path exploitable. Change any expiry in review if you want a different window.
CVE-2026-18446 — HIGH,
fast-uri (transitive via ajv)Host-confusion parser desync: fast-uri <=4.1.1 folds a backslash authority introducer into the path while Node's WHATWG URL treats it as a host, so callers that enforce host-based policy with fast-uri then reuse the URL in fetch/undici can be redirected. In every flagged repo fast-uri is only a transitive dependency of ajv (JSON-schema validator running in webpack/babel build tooling) — no application source imports fast-uri, and nothing uses it to gate hostnames before an outbound request. The vulnerable code path is therefore unreachable. Note: the repos' overrides pin fast-uri ^3.1.4 and resolve to 3.1.4, one patch short of the 3.1.5 fix, so the scanner still flags it.
Full triage report — CVE-2026-18446
CVE-2026-18446 — fast-uri host confusion via backslash authority introducer
What the CVE is
fast-uriv4.1.1 and earlier only recognize a URI authority after a literal//. A reference using\\,/\, or\/as the authority introducer is parsed with no authority — the sequence and everything after it fold into the path. Node's native WHATWGURL(used byfetch(),undici,http/https) instead treats\as interchangeable with/for special schemes, so the two parsers extract different hosts from the same input. Applications that enforce host-based policy (allowlist/denylist, SSRF/loopback filtering, redirect validation, proxy routing) withfast-uriand then hand the same URL to a Node HTTP client see a policy/use desync and can be steered to an unintended host.CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:NHow it maps onto our repos
ajv; override^3.1.4ajv; override^3.1.4ajv; override^3.1.4ajv(webpack/babel tooling); override^3.1.4ajvKey observations from the code search:
fast-uri(require('fast-uri')/import ... 'fast-uri'→ zero matches). Its only consumer isajv, the JSON-schema validator, which sits under front-end build tooling (react-refresh-webpack-plugin, babel-loader, ajv-formats).fetch/undicirequest.Decision
not_affected. The library is present (and, because the
overridespin resolves to 3.1.4 — one patch below the 3.1.5 fix — the scanner keeps flagging it), but the vulnerable code path is unreachable: there is no fast-uri-based host-policy enforcement anywhere in these repos.Recommended remedy
Suppress this finding in the repo-root
.trivyignorefor each flagged repo (not-exploitable; unreachable path). Independently, if the team wants to clear the scan noise at source rather than suppress, they can raise thefast-urioverride to3.1.5(the intended patch the current^3.1.4pin narrowly misses) — but this does not change the reachability verdict.CVE-2026-69152 — HIGH,
brace-expansion (npm, transitive via minimatch)brace-expansion is a build/lint/test-time transitive dependency (pulled through minimatch) in every flagged repo. The repos are Docusaurus documentation sites, static example apps, and a React+Express portal; none of their production runtime code imports brace-expansion, minimatch, or glob, and no production path passes attacker-controlled patterns to expand(). The advisory's DoS (unbounded intermediate arrays / event-loop block) requires reaching expand() with untrusted input, which is not reachable at runtime. A fixed 5.0.9 exists but availability does not change a not_affected verdict.
Full triage report — CVE-2026-69152
CVE-2026-69152 — brace-expansion DoS via unbounded intermediate arrays
What the CVE is
brace-expansionversions before 1.1.18 / 2.1.4 / 3.0.6 / 5.0.9 contain a denial-of-service flaw (GHSA-rgw5-rvv9-x895). ThemaxLengthmitigation added in 5.0.8 for CVE-2026-14257 is incomplete: it bounds the accumulator incombine()but not the intermediatevaluesarray built from comma-alternatives before combining. A ~25 KB crafted brace pattern can trigger an uncatchable out-of-memory crash (atry/catcharoundexpand()does not help), and a related path lets a ~400 KB input block the event loop for minutes. CVSS 3.1 HIGH (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) — availability impact only.To be exploitable, production code must pass attacker-controlled strings to
brace-expansion.expand()— typically indirectly viaminimatch/globpattern matching on untrusted input.Where it appears in our repos
brace-expansion@5.0.8is present in all six flagged repos. In every case it is a transitive dependency ofminimatch(minimatchdeclaresbrace-expansion: ^5.0.2), andminimatch/globare consumed by build, lint, test, and dev tooling — not by request-handling code:server.jsrequires only axios/express/cookie-session/ejs/nocache/cryptosrc/Notes:
brace-expansionis only exercised duringdocusaurus build/lint, never in a served request.brace-expansion,minimatch, orglob. (The portal's directbraces@3dependency is a different package and unrelated to this CVE.).trivyignoreentry documenting brace-expansion as devDependency-only and not runtime-reachable (aligned with the earlier CVE-2026-14257 suppression).Decision
not_affected. The vulnerable
expand()path is confined to build/lint/test tooling in all six repos; no production runtime code feeds attacker-controlled input to brace-expansion (directly or via minimatch/glob). The DoS therefore cannot be triggered against any of our deployed services. A fixed release (5.0.9) exists, but per triage policy the availability of a fix does not convert a non-reachable finding into an affected one.Recommended action
Suppress this CVE for all six repos (record the standard tracking/expiry via the repo-root
.trivyignore). tcportal already has an equivalent entry; the others can follow the same devDependency-only rationale. Optionally, on the next routine dependency bump, allow the transitivebrace-expansionto float to ≥5.0.9 (e.g. via the existingoverrides/resolutionspins) to clear the scanner without any runtime risk change — but this is hygiene, not a security necessity.Opened by uid2-vul-scan-agent (general_use_claude-opus-4-8), verdict confidence high. Please sanity-check each reachability argument before approving.