UID2-7658, UID2-7659: suppress 2 CVEs in .trivyignore - #207
Closed
swibi-ttd wants to merge 1 commit into
Closed
Conversation
- CVE-2026-67213 (UID2-7658) - GHSA-5p4m-2wfm-xmqj (UID2-7659) 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.
Contributor
Author
|
Superseded by the newer suppression PR from run 20260811-110031, which carries every CVE this run did plus CVE-2026-40984 (UID2-7662) — the finding that was failing the Vulnerability Scan step here. Merge the newer PR instead; merging both would conflict on the same .trivyignore append. |
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-11 (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-67213 — HIGH,
nanoid (transitive via postcss)The DoS lives specifically in nanoid's customAlphabet/customRandom when called with size:0. In all flagged repos nanoid 3.3.16 exists only as a single transitive dependency of postcss (build-time CSS tooling for Docusaurus docs sites and CRA example apps). No repo source imports nanoid or calls customAlphabet/customRandom, and postcss itself only uses the plain default nanoid() for internal node IDs — never the vulnerable functions and never with a caller-controlled size. There is no code path, let alone an attacker-controlled size:0 input, that reaches the vulnerable loop, so the vulnerable code is unreachable despite the package being present.
Full triage report — CVE-2026-67213
CVE-2026-67213 — nanoid infinite loop (customAlphabet/customRandom, size=0)
The vulnerability
nanoidbefore 3.3.17 / 5.1.6 contains an infinite loop in thecustomAlphabetandcustomRandomfunctions. When either is configured withsize: 0, the internal generation loop never satisfies its exit condition and spins forever, hanging the calling thread. Exploitation requires an application to pass an unvalidated, attacker-controlledsize: 0into one of those two specific functions.How it appears in our repos
The scanner flagged four
package-lock.jsonfiles across three repos. In every one, nanoid is:node_modules/nanoidentry.postcss(postcssdeclaresnanoid: "^3.3.12"). No repo declares nanoid as a direct dependency.web-integrations/javascript-sdk/react-client-side&.../google-secure-signals/react-client-sidepackage-lock.jsonpreview/package-lock.jsonReachability assessment
.js/.ts/.jsx/.tsx/.mjs/.cjsfiles across the repos found zero references tonanoid,customAlphabet, orcustomRandom. Our code never calls the vulnerable functions.nanoid()export — it does not callcustomAlphabetorcustomRandom, and does not take a caller-suppliedsize. The specific vulnerable functions are therefore never invoked.sizeinput. Even setting aside (2), there is no path by which external input reaches a nanoidsizeargument (which would need to be0).uid2docs,uid2-docs-preview) and during the CRAbuild/startof the example React apps (uid2-examples). These are documentation and sample projects; the exampleserver.jsserves pre-built static assets and does not execute postcss at request time.Because the vulnerable code path (
customAlphabet/customRandomwithsize: 0) is not exercised by our code or by postcss, the CVE is unreachable in all flagged artifacts.Decision
not_affected. The package is present (consistent with the scan) but the vulnerable path is not reachable. Per the decision logic, an available fix does not change a not_affected verdict.
Recommended remedy
Suppress this finding for the flagged repos via the repo-root
.trivyignorein each. Optionally, the transitive nanoid can be bumped to ≥ 3.3.17 through the existingpostcssoverride / dependency refresh during routine maintenance, but this is not security-required given unreachability.GHSA-5p4m-2wfm-xmqj — HIGH,
js-yaml (3.15.0 and 4.3.0, transitive npm dependency)The advisory describes a quadratic-CPU DoS triggered by yaml.load() on untrusted YAML containing a large !!omap. In all four flagged repos js-yaml is only a dev/build-time transitive dependency (eslint, react-scripts, jest coverage, and Docusaurus's gray-matter). No production/runtime code parses attacker-controlled YAML: the portal and examples never invoke a YAML parser at runtime, and the docs sites only parse their own trusted markdown frontmatter during static-site builds. The vulnerable code path is therefore not reachable with untrusted input, so despite the affected versions being present the DoS vector does not apply.
Full triage report — GHSA-5p4m-2wfm-xmqj
GHSA-5p4m-2wfm-xmqj / CVE-2026-59870 — js-yaml quadratic
!!omapDoSWhat the CVE is
resolveYamlOmap()in js-yaml enforces key uniqueness for!!omapsequences with a linearobjectKeys.indexOf(...)scan inside the per-element loop, making omap resolution O(n²) in the number of entries. A modestly sized YAML document with a large ordered map therefore burns disproportionate CPU insideyaml.load(), giving a denial of service against any consumer that parses untrusted YAML.!!omapis in the default schema, so plainyaml.load(untrustedInput)is enough — no custom schema needed. The 5.x fix (aSet) was never backported to 3.x/4.x; both 3.15.0 and 4.3.0 remain affected. CVSS 3.1 AV:N/AC:L/PR:N/UI:N/A:H.Presence
Confirmed present in all four flagged repos, matching the affected versions:
overrideseven pin these exact (affected) versions.Reachability analysis (per repo)
The vulnerability requires a runtime code path that feeds untrusted YAML into
yaml.load(). That path does not exist in any of the flagged artifacts:eslint/@eslint/eslintrc) are all"dev": true, pulled transitively by ESLint and@istanbuljs/load-nyc-config(Jest coverage). A search ofsrc/andserver/finds no js-yaml import and noyaml.loadcall. The Express backend does not parse YAML.eslint,react-scripts, and@istanbuljs/load-nyc-configinside static integration-example apps. No production YAML parsing.gray-matter(markdown frontmatter parsing) and via ESLint.gray-matterruns at build time over the repositories' own, trusted markdown — input an external attacker does not control. There is no long-running service that ingests untrusted YAML.In short, js-yaml here is a dev-/build-time dependency. The single real parse path (Docusaurus/gray-matter) processes trusted repo-authored content during a build; a hostile payload would at most slow a CI build, not DoS a running service, and cannot be supplied by an external attacker.
Decision
not_affected. The affected code is present but the network-facing DoS vector —
yaml.load()on untrusted input — is not reachable in any of the built/run artifacts. A fixed version existing (3.15.1 / 4.3.1) does not change this; the finding is non-exploitable as deployed.Recommended action: suppress this finding for all four repos (repo-root
.trivyignore). If desired for hygiene, the pinnedjs-yaml@3/js-yaml@4overrides could be bumped to 3.15.1 / 4.3.1, but this is optional and not security-driving given the dependency is dev/build-time only.Opened by uid2-vul-scan-agent (general_use_claude-opus-4-8), verdict confidence high. Please sanity-check each reachability argument before approving.