fix(deps): remediate 39 Dependabot alerts across server, dashboard, bridges - #582
Draft
thewrz wants to merge 1 commit into
Draft
fix(deps): remediate 39 Dependabot alerts across server, dashboard, bridges#582thewrz wants to merge 1 commit into
thewrz wants to merge 1 commit into
Conversation
…ridges Closes every open Dependabot alert (30 high / 9 medium) with age-vetted versions rather than "whatever npm resolves today". Server (api.wrzdj.com, ghcr.io/wrzonance/wrzdj-api): - Pillow 12.2.0 -> 12.3.0 clears a 13-CVE cluster. Genuinely reachable: banner.py calls Image.open()/load() BEFORE its format allowlist runs, so attacker bytes reach EPS/GD/PDF/JPEG2000 decoders regardless of the JPEG/PNG/GIF/WEBP restriction, and Image.paste() runs on attacker-sized images (GHSA-6r8x-57c9-28j4, heap OOB write). - pyasn1 0.6.3 -> 0.6.4 (decoder DoS). No installed package imports pyasn1; it survives only as a floor pin, so this is hygiene, not exposure. Dashboard (app.wrzdj.com, ghcr.io/wrzonance/wrzdj-web): - next 16.2.6 -> 16.2.11 clears 9 CVEs. - sharp -> 0.35.3 (libvips CVEs). sharp IS traced into .next/standalone, so it ships in the published image even though next/image is unused. - postcss/js-yaml/brace-expansion pinned to patched versions. None of these appear in .next/standalone -- they are build tooling, not runtime. Bridge / bridge-app: - tar -> 7.5.21 collapses bridge-app's npm audit from 28 findings (23 critical) to 5, none critical. - fast-uri -> 3.1.4, postcss -> 8.5.18, brace-expansion floors raised. Security overrides are pinned to exact versions because caret ranges resolved to packages published 0-2 days earlier (js-yaml 4.3.1 shipped the same day). Every pinned version is 10-51 days old; next/postcss/sharp also carry SLSA provenance attestations. Co-Authored-By: Claude Opus 5 <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: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
3 tasks
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.
This was written agentically; verify its assertions and edit accordingly:
Why
39 open Dependabot alerts (30 high / 9 medium) against a stack that is live on
api.wrzdj.com/app.wrzdj.comand publishes Docker images others consume.This clears all 39 without a feature regression, and does so with versions that
have had real community soak time rather than same-day publishes.
What
Server (
ghcr.io/wrzonance/wrzdj-api)Pillow12.2.0 → 12.3.0 — clears a 13-CVE cluster. This is the only groupwith a genuinely reachable memory-safety bug:
banner.pycallsImage.open()+.load()before checkingimg.formatagainst itsJPEG/PNG/GIF/WEBP allowlist, so attacker bytes reach the EPS / GD / PDF /
JPEG2000 decoders no matter what the allowlist says.
Image.paste()thenruns on attacker-controlled dimensions (GHSA-6r8x-57c9-28j4, heap OOB write).
Mitigated in practice by
get_owned_event(approved DJ + event owner),10/minuterate limit, 5 MB cap, andMAX_IMAGE_PIXELS = 25M.pyasn10.6.3 → 0.6.4 — decoder DoS. Nothing in the venv imports pyasn1; itexists only as a floor pin from an older audit. Hygiene, not exposure.
Dashboard (
ghcr.io/wrzonance/wrzdj-web)next16.2.6 → 16.2.11 — clears 9 CVEs. Most are not reachable in thisapp's configuration (no middleware, no Server Actions, no rewrites, no
Turbopack), but it is a patch bump with no API change.
sharp→ 0.35.3 —next/imageis unused in app code, but sharp istraced into
.next/standalone, so it ships in the published image and/_next/imageis still mounted. Worth fixing.postcss/js-yaml/brace-expansionpinned to patched versions. None ofthe three appear in
.next/standalone— they are build tooling.Bridge / bridge-app
tar→ 7.5.21 — takesnpm auditfrom 28 findings (23 critical) to 5, nonecritical, by clearing a fan-out through the electron-forge chain.
fast-uri→ 3.1.4,postcss→ 8.5.18,brace-expansionfloors raised.Why exact pins instead of carets
The security entries in
overridesare pinned exactly. With carets,npmresolved
js-yaml@4.3.1(published that day),brace-expansion@1.1.18/2.1.4/5.0.9(1 day), and
postcss@8.5.25(2 days) — the exact window where a compromisedpublish has not yet been caught. Every version pinned here is 10–51 days old;
next,postcssandsharpadditionally carry SLSA provenance attestations.Testing
ruff check+ruff format --checkclean,banditcleanpytest— 3394 passed, coverage 89.50% (gate 85%)identically on Pillow 12.2.0 / pyasn1 0.6.3, caused by the local repo-root
.envsettingDEV_AUTH_BYPASS=true(absent in CI).test_banner.pypasses 18/18 on the new Pillow.
npm run buildsucceeds,eslintclean,tsc --noEmitclean,vitest 1444 passed (109 files)
tsc --noEmitclean, vitest 352 passed (16 files)tsc --noEmitclean, vitest 78 passed (8 files).env-driven)WebP banner, kiosk variant, and dominant colours still render
Known follow-ups (deliberately not in this PR)
brace-expansionCVE-2026-14257 needs 1.1.17 / 2.1.3 / 5.0.8, all published1–3 days ago. Dev-scope only and DoS-only; revisit once aged.
ipSSRF has no fixed version in any release; the existing override is theceiling available.
🤖 Co-authored by Claude Opus 5. Closes #581.