fix(deps): update dependency @astrojs/node to v10.0.5 [security]#249
Merged
ArmandPhilippot merged 1 commit intomainfrom Apr 24, 2026
Merged
Conversation
|
ArmandPhilippot
approved these changes
Apr 24, 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.
This PR contains the following updates:
10.0.4→10.0.5Astro: Cache Poisoning due to incorrect error handling when if-match header is malformed
CVE-2026-41322 / GHSA-c57f-mm3j-27q9
More information
Details
Summary
Requesting a static JS/CSS resource from the
_astropath with an incorrect or malformedif-matchheader returns a500error with a one-year cache lifetime instead of412in some cases. As a result, all subsequent requests to that file — regardless of theif-matchheader — will be served a 5xx error instead of the file until the cache expires.Sending an incorrect or malformed
if-matchheader should always return a412error without any cache headers, which is not the current behavior.Affected Versions
astro@5.14.1@astrojs/node@9.4.4Proof of Concept
Run the following command:
If a 5xx error is not returned, inspect the resources via the browser's web inspector and select another CSS/JS file to request until a 5xx error is returned. The behavior generally defaults to a 5xx response. Note that all static files are immutable, so the cache must be purged or disabled to reproduce reliably.
A response similar to the following is expected from CloudFront:
The above is not the real server output but the AWS error response triggered when the pods return a 5xx. Below is the output of the same
curlcommand issued directly against a pod in Kubernetes:This demonstrates that the pod itself returns a
5xxerror instead of412. In addition, the response includes aCache-Control: public, max-age=31536000, immutableheader.Because the testing setup configures
if-matchas part of the cache key, the exploit no longer affects the production application. Prior to that change, the CDN Point of Presence would become cache-poisoned, and any client visiting the affected pages without cached files through the same PoP would receive broken pages. This was reproduced by creating test URLs and visiting them in a browser only after triggering the exploit. The exploited resources returned5xxerrors instead of the original CSS/JS content, breaking the application.Details
The findings were analyzed with an LLM, which identified the following file as the likely source: serve-static.ts
LLM analysis:
Impact
Cache Poisoning — An attacker can force edge servers to cache an error page instead of the actual content, rendering one or more assets unavailable to legitimate users until the cache expires.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
withastro/astro (@astrojs/node)
v10.0.5Compare Source
Patch Changes
940afd5Thanks @matthewp! - Fixes static asset error responses incorrectly including immutable cache headers. Conditional request failures (e.g.If-Matchmismatch) now return the correct status code without far-future cache directives.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.