fix(deps): resolve all open npm audit high/moderate advisories - #153
Conversation
`main` failed its own CI `audit` gate (`npm audit --audit-level=high`), and because branch protection requires that check plus an up-to-date branch, none of the per-package dependabot/renovate PRs could land on their own -- each inherited the red audit from the others still open. Land them together so the gate goes green in one step: - fastify ^5.12.4 (direct, prod): schema-validation bypass via root primitive coercion (GHSA-w2qp-rph6-63g4) and X-Forwarded-* spoofing under trustProxy hop-count (GHSA-3m5p-2c4r-xxw2) - fast-uri (transitive via fastify, prod): four host-confusion / SSRF advisories (GHSA-5jgf-p345-68v8, GHSA-f65p-4m7j-42xc, GHSA-fph4-wmhf-6fwf, GHSA-jqff-g426-hqxp) - vitest + @vitest/coverage-v8 ^4.1.11 (dev): @vitest/mocker path traversal / arbitrary file read - puppeteer ^25.11.0 (dev, UI tests only): @puppeteer/browsers 3.x drops extract-zip (GHSA-jmr9-qjv8-65gv, GHSA-7pqw-9j4j-h8q3) - js-yaml, nanoid (dev transitive): lockfile refresh past the vulnerable ranges Verified locally on Node 24.18.1: typecheck, typecheck:scripts, check:node-pin, build, shellcheck, test:coverage (1670 passed, 11 skipped), `npm audit --audit-level=high` -> 0 vulnerabilities. UI suite (puppeteer smoke): 21/23 pass; the 2 visual-snapshot failures reproduce identically on main with puppeteer 24 (same pixel-diff percentages), so they are a pre-existing baseline/environment difference, not a regression from this change. Supersedes #146, #147, #148, #149, #150, #151, #136. Closes #152. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
@fastify/rate-limit < 11.2.0 is vulnerable to rate-limit bypass via
IPv6 address rotation (high; not yet in the npm audit feed, published
as a GitHub repository advisory). The only patched release is on the
11.x major, whose one documented breaking change is the removal of
deprecated type aliases that this codebase never imported -- the
plugin is registered with `{ max, timeWindow }` only.
Verified: typecheck, build, test:coverage (1670 passed), audit clean,
plus a direct inject smoke (max=2 -> 200, 200, 429).
Supersedes #135.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
renovate.json sets minimumReleaseAge: 7 days as a supply-chain guard. Re-pin every version this branch pulled in that was younger than that to the newest patched release older than 7 days: - fastify 5.12.4 (4 days) -> 5.12.3 (11 days) - puppeteer 25.11.0 (1 day) -> 25.10.0 (12 days) - fast-uri 3.1.8 / 4.1.5 (0 days) -> 3.1.7 / 4.1.4 (13 days; the same pins dependabot proposed in #146) - nanoid 3.3.19 (5 days) -> 3.3.18 (39 days) Lockfile integrity hashes for the transitive re-pins come from the npm registry dist metadata and were validated by a clean `npm ci`. Audit stays at 0 vulnerabilities; typecheck, build, and test:coverage unchanged (1670 passed). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Replace the hand-pinned transitives with a lockfile npm resolved itself: start from main's lock, apply the manifest ranges, and run `npm install --before=2026-09-08` plus `npm update --before=...` for fast-uri, js-yaml and nanoid. Every changed entry is now a release published at least 7 days ago (renovate.json minimumReleaseAge), the lock is internally consistent (clean `npm ci`, `npm ls` reports no invalid/missing), and the diff against main is smaller: vite 8.2.2, rolldown 1.2.7, obug 2.1.4 and ip-address 10.4.0 instead of the 0-6-day-old builds a plain install pulled. Unchanged evidence: audit 0 vulnerabilities; typecheck, build, test:coverage 1670 passed / 11 skipped. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
This was written agentically; verify its assertions: Adversarial review receipt
🤖 Co-authored by Claude Fable 5.1. |
|
This was written agentically; verify its assertions: Review ledgerMachine-readable record of every review already performed on this PR. {
"version": 1,
"pr": 153,
"repo": "wrzonance/DMXr",
"reviews": [
{
"kind": "adversarial",
"provider": "codex",
"model": "gpt-5.6-sol",
"effort": "xhigh",
"mode": "cross-provider",
"harness": "claude",
"head_sha": "443f4e11b62efd3e39f8759fc38b1c7cd140e9ae",
"covered_heads": [
"443f4e11b62efd3e39f8759fc38b1c7cd140e9ae"
],
"counts": {
"p1": 0,
"p2": 0
},
"reviewed_at": "2026-09-15T17:20:54Z"
}
]
}🤖 Co-authored by Claude Fable 5.1. |
This was written agentically; verify its assertions:
Why
mainfails its own CIauditjob (npm audit --audit-level=high). Branch protection requires that check plus an up-to-date branch, so none of the open per-package dependabot/renovate PRs can land alone: each one inherits the red audit from the advisories the others fix. One consolidated bump breaks the deadlock.What
Bumps in
server/so every open advisory is closed andauditgoes green:Every version chosen is at least 7 days old, matching the
minimumReleaseAgegate inrenovate.json; where the newest release was younger, the newest patched release older than 7 days was pinned instead.No source changes. Supersedes #146, #147, #148, #149, #150, #151, #136 and #135, which are closed as superseded.
Testing
npm run typecheckandnpm run typecheck:scriptspassnpm run check:node-pinconsistent (Node 24)npm run buildandshellcheckon server scripts passnpm run test:coverage: 106 files, 1670 passed, 11 skippednpm audit --audit-level=high: 0 vulnerabilitiesapp.injectwithmax: 2: responses 200, 200, 429npm run test:ui21/23 pass; the 2 visual-snapshot failures reproduce byte-identically onmainwith puppeteer 24 (pre-existing baseline/environment diff, not a regression)Closes #152.
🤖 Co-authored by Claude Fable 5.1.
🤖 Generated with Claude Code