Skip to content

fix(deps): Bump astro to 7.3.5, clearing five Dependabot alerts - #907

Open
stefanko-ch wants to merge 1 commit into
mainfrom
fix/control-plane-deps
Open

stefanko-ch wants to merge 1 commit into
mainfrom
fix/control-plane-deps

Conversation

@stefanko-ch

@stefanko-ch stefanko-ch commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

All five open Dependabot alerts sit in control-plane/package-lock.json, and all five are transitive under the one direct dependency, astro. Raising it resolves every one.

Package Before After Advisory Severity
astro 7.2.7 7.3.5 GHSA-26w7-cxv4-gfx2 critical
js-yaml 4.3.1 4.3.2 CVE-2026-84375 high
svgo 4.0.2 4.1.0 CVE-2026-84370 high
svgo 4.0.2 4.1.0 CVE-2026-84369 medium
devalue 5.8.1 5.9.4 CVE-2026-81176 medium
sharp 0.35.4 0.35.4 — unchanged

npm audit afterwards: found 0 vulnerabilities.

None of the five was reachable here

Recorded so the next person does not have to re-derive it.

The Control Plane is output: 'static' — prerendered in CI and served as files by Cloudflare Pages. The API is separate plain-JS Pages Functions plus a Worker, and none of them imports any of these packages. So none of this code runs in production at all; it runs in the build step, on repository-controlled input.

Alert Why it is not reachable
astro — RCE through AVIF image optimization (libheif via Sharp) Needs Astro to optimize an untrusted AVIF. There is no astro:assets, no <Image> and no getImage anywhere in src/; the only image is a PNG in public/ that Astro copies verbatim; there is no AVIF in the repository; and no Astro server runs in production. sharp was already at 0.35.4 — the version the advisory names as the fix
js-yaml — CPU exhaustion via merge keys Build-time only, under astro and @astrojs/internal-helpers. The only YAML the build reads is ours
svgo — removeScripts bypasses An opt-in plugin that matters only when it is your sole protection for untrusted SVG. This project contains no SVG at all
devalue — DoS in devalue.parse Astro serializes its own props with it at build time

One detail that explains why this is so cheap: devalue was stale in the lockfile rather than blocked. Astro already allowed ^5.8.1, so 5.9.4 was installable all along, and a plain lockfile refresh would have closed that alert on its own.

Verification

Built in node:22-bookworm — the image the workflows use — before and after the bump. Nine pages both times, and the build output is byte-identical: 15 files, matching SHA-256 for every one, none added and none removed. The bump changes nothing about what gets deployed.

Local CodeRabbit round

Reviewed a035529a against main — 0 findings.

Summary by Sourcery

Upgrade the Control Plane’s Astro dependency to resolve all outstanding security alerts without changing deployed output.

Bug Fixes:

  • Update Astro and its transitive dependencies to clear all five reported Dependabot vulnerabilities.

Enhancements:

  • Refresh the Control Plane dependency lockfile while preserving byte-identical build output.

Tests:

  • Verify identical successful builds before and after the dependency update.

Summary by CodeRabbit

  • Chores
    • Updated the Astro dependency to a newer compatible version.

All five open alerts sit in control-plane/package-lock.json and all five
are transitive under the one direct dependency, `astro`. Raising it
resolves every one:

  astro     7.2.7 -> 7.3.5    GHSA-26w7-cxv4-gfx2  critical
  js-yaml   4.3.1 -> 4.3.2    CVE-2026-84375       high
  svgo      4.0.2 -> 4.1.0    CVE-2026-84370       high
                              CVE-2026-84369       medium
  devalue   5.8.1 -> 5.9.4    CVE-2026-81176       medium
  sharp     0.35.4            unchanged

`npm audit` afterwards: found 0 vulnerabilities.

None of the five was reachable in this deployment, and that is worth
recording rather than leaving for the next person to re-derive. The
Control Plane is `output: 'static'` — prerendered in CI and served as
files by Cloudflare Pages. The API is separate plain-JS Pages Functions
plus a Worker, and none of them imports any of these packages, so none of
this code runs in production at all; it runs in the build step, on
repository-controlled input.

Per alert:

  astro/Sharp AVIF RCE  needs Astro to optimize an untrusted AVIF. There
                        is no `astro:assets`, no <Image>, no getImage
                        anywhere in src/; the only image is a PNG in
                        public/ that Astro copies verbatim, and there is
                        no AVIF in the repository. `sharp` was already at
                        0.35.4, the version the advisory names as the fix.
  js-yaml CPU DoS       build-time only, under astro and
                        @astrojs/internal-helpers; the only YAML the build
                        reads is our own.
  svgo removeScripts    an opt-in plugin that matters only when
                        sanitizing untrusted SVG. This project contains no
                        SVG.
  devalue parse DoS     astro serializes its own props with it at build
                        time.

devalue was stale in the lockfile rather than blocked: astro already
allowed ^5.8.1, so 5.9.4 was installable all along and a plain lockfile
refresh would have closed that one.

Verified in node:22-bookworm, the same image the workflows use, before
and after: 9 pages, and the build output is BYTE-IDENTICAL — 15 files,
matching SHA-256 for every one, none added or removed. The bump changes
nothing about what gets deployed.
@sourcery-ai

sourcery-ai Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

This dependency-only PR raises Astro to 7.3.5 and refreshes its transitive lockfile dependencies, clearing all five Dependabot alerts while preserving the existing static build output. Verification includes a clean npm audit, matching Node 22 builds with byte-identical artifacts, and a reachability review showing the vulnerable code paths are not used in production.

File-Level Changes

Change Details Files
Bump the sole direct Astro dependency and refresh the lockfile to resolve all five Dependabot alerts.
  • Update Astro from 7.2.7 to 7.3.5.
  • Refresh transitive packages, including js-yaml 4.3.2, svgo 4.1.0, and devalue 5.9.4.
  • Confirm sharp remains at 0.35.4 and npm audit reports no vulnerabilities.
control-plane/package.json
control-plane/package-lock.json
Verify that the dependency refresh does not alter the statically deployed Control Plane output.
  • Build with the workflow’s Node 22 container before and after the bump.
  • Confirm both builds produce nine pages and byte-identical output across 15 files.
  • Document that affected packages are build-time-only and not reachable by production APIs or workers.
control-plane/package.json
control-plane/package-lock.json

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: stefanko-ch/Nexus-Stack/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 91da6d7f-3172-48a6-bed6-0e892a1edb9e

📥 Commits

Reviewing files that changed from the base of the PR and between 9039357 and a035529.

⛔ Files ignored due to path filters (1)
  • control-plane/package-lock.json is excluded by !**/package-lock.json, !control-plane/package-lock.json
📒 Files selected for processing (1)
  • control-plane/package.json

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The control-plane package manifest updates the Astro dependency range from ^7.2.7 to ^7.3.5.

Changes

Astro dependency update

Layer / File(s) Summary
Update Astro version range
control-plane/package.json
The Astro dependency range changes from ^7.2.7 to ^7.3.5.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to a0355

The Astro update is reflected consistently in the lockfile, with no identified merge-blocking issue.

Architecture Summary

Architecture risk: 🔵 Low · up to a0355

The change affects 1 system.

Changed systems: control-plane

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — control-plane (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in control-plane/package.json: The astro dependency requirement changed from ^7.2.7 to ^7.3.5.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: updating Astro to version 7.3.5. It also states the reported security outcome of clearing five Dependabot alerts.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Fixed security issues:

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant