Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Netlify-hosted Astro site with Image CDN
-
DeliveryDiscover allowlisted hostname via CDN response headers or JS
-
ExploitCraft URL with metacharacter-exploiting path variation
-
ExecutionSubmit optimization request to Netlify CDN endpoint
-
PersistOverly-broad regex matches unintended path
-
ImpactCDN optimizes and serves restricted image
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Incorrect input validation
|
| Exploitation Conditions | Three conditions must all be present: (1) the site uses @astrojs/netlify adapter at a version prior to 8.1.2, (2) at least one image.remotePatterns entry is configured with a literal pathname value containing a regex metacharacter - the most common real-world case is a dot in a version string (e.g., /img/v1.0/) or a file extension - and (3) the built site is deployed to Netlify with Netlify Image CDN active. Exploitation is bounded to hostnames already present in the allowlist; the attacker cannot introduce new hosts. There is no authentication requirement to call Netlify's image optimization endpoint. Sites that use only wildcard pathnames (/**) or pathnames free of metacharacters are not affected even if running a vulnerable version, because the regex generated for those patterns already matches the broader set the developer intended. |
| Impact | The provided CVSS 3.7 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) is consistent with independent analysis. AC:H correctly reflects that exploitation requires the target deployment to have configured a pathname containing at least one regex metacharacter (most commonly a literal dot in a version string or filename extension), which is a non-universal but realistic configuration. The confidentiality impact is limited to C:L: an attacker can cause Netlify's CDN to optimize and serve images from path variations that should be excluded, but only on hostnames already present in the allowlist - no new hosts can be added and there is no integrity or availability impact. EPSS data was not provided in the input; given the narrow exploitation prerequisites and absence from CISA KEV, real-world exploitation probability is assessed as low. A proof-of-concept is publicly available in the GHSA advisory, which modestly elevates urgency, but the low severity and specific prerequisites mean this is not a broad-blast-radius priority. The discrepancy between PR:N in the CVSS vector and the fact that only developer-controlled configurations trigger the flaw is worth noting: the vulnerability is introduced at build time by the developer's own config, but the exploitation window is Netlify's CDN endpoint which is unauthenticated. |
| Exploit ScenarioDerived | An attacker inspecting a Netlify-hosted Astro site's public CDN behavior identifies that the site allows image optimization for cdn.example.com. They request Netlify's image optimization endpoint with a URL pointing to https://cdn.example.com/img/v1X0/secret-file - where X replaces the dot in a version path segment - and Netlify's CDN processes the request because the unescaped dot in the generated allowlist regex matches any character, including the substituted character. A proof-of-concept demonstrating this exact bypass (including path-segment crossing via /) is included in GHSA-hp3v-mfqw-h74c. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Regex metacharacter injection in @astrojs/netlify prior to 8.1.2 causes the Netlify Image CDN allowlist to be broader than the developer intended, allowing optimization of images from unintended URL paths on already-allowed hostnames. The root cause is that remotePatternToRegex() escapes dots in hostnames but passes literal pathname values into the generated regex unescaped, so a pathname like /img/v1.0/file silently becomes a wildcard that matches /img/v1X0/file or /img/v1/0/file. No active exploitation has been confirmed (not in CISA KEV), though a working proof-of-concept is included in the GHSA advisory; CVSS 3.7 with AC:H reflects the constrained but network-accessible impact.
RemediationAI
Upgrade @astrojs/netlify to version 8.1.2, which introduces proper regex metacharacter escaping for pathname values in remotePatternToRegex(). The fix is confirmed in the vendor security advisory at https://github.com/withastro/astro/security/advisories/GHSA-hp3v-mfqw-h74c and the upstream pull request at https://github.com/withastro/astro/pull/17018. As a compensating control prior to patching, inspect the generated .netlify/v1/config.json after each build and manually verify that the images.remote_images regexes are as restrictive as intended - any unescaped . in the pathname portion of a regex is a red flag. A second compensating control is to avoid dots and other metacharacters (., +, ?, (, [) in literal pathname values within image.remotePatterns until the patch is applied; note this may require renaming URL path segments which could have application-level side effects. Rebuilding and redeploying after upgrading to 8.1.2 is required to regenerate the config.json with the corrected regexes.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is the @astrojs/netlify integration package (cpe:2.3:a:withastro:astro:*:*:*:*:*:*:*:*), which generates .netlify/v1/config.json during astro build. The remotePatternToRegex() function in packages/integrations/netlify/src/index.ts correctly escapes dots in the hostname segment using hostname.replace(/\./g, '\\.') but interpolates the pathname value verbatim into all three regex branches - including the exact-match branch - without calling a metacharacter escape routine. This is classified as CWE-185 (Incorrect Regular Expression). The security boundary is the generated regex itself: Netlify's Image CDN enforces it directly at the edge, and Astro's runtime matchPattern() helper (which performs exact string comparison for non-wildcard pathnames) is not in the critical path for Netlify-served image requests, eliminating any compensating layer. This is a residual of the same bug class partially addressed in CVE-2026-54300 (PR #17018), which added a $ anchor and fixed wildcard semantics but did not introduce metacharacter escaping for literal pathname values.
Know when Astro gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Netlify CDN endpoint is network-reachable with no auth (AV:N/PR:N), but exploitation requires a metacharacter-containing pathname in dev config (AC:H); impact is limited to partial image path disclosure with no integrity or availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Astro is a web framework for content-driven websites. Prior to 8.1.2, the Astro Netlify adapter converts each image.remotePatterns entry into a regular expression written to .netlify/v1/config.json under images.remote_images for Netlify's Image CDN allowlist. In packages/integrations/netlify/src/index.ts, remotePatternToRegex() escapes dots in hostname values but interpolates literal pathname values without escaping regular expression metacharacters such as ., +, ?, (, and [, so a restrictive pathname such as /img/v1.0/file also matches metacharacter-adjacent paths, including paths that cross a segment. Netlify enforces the generated regular expression directly and Astro's matchPattern() helper does not revalidate the request, allowing optimization of images on an already-allowed host that the declared pathname was intended to exclude. This issue is fixed in version 8.1.2.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
SQL Injection exists in the Saxum Astro 4.0.14 component for Joomla!. Rated critical severity (CVSS 9.8), this vulnerabi
Astro web framework versions prior to 9.5.4 contain a server-side request forgery vulnerability in error page handling t
Authorization bypass in the Astro web framework version 6.4.7 lets remote unauthenticated attackers reach protected rout
Astro is a web framework for content-driven websites. Rated high severity (CVSS 7.8), this vulnerability is remotely exp
Server-side request forgery in Astro's built-in image proxy lets unauthenticated remote attackers force the server to fe
Astro is a web framework for content-driven websites. Rated high severity (CVSS 7.2), this vulnerability is remotely exp
Astro is a web framework for content-driven websites. Rated medium severity (CVSS 6.9), this vulnerability is remotely e
Astro is a web framework. Rated medium severity (CVSS 6.9), this vulnerability is remotely exploitable, no authenticatio
Astro is a web framework. Rated medium severity (CVSS 6.5), this vulnerability is remotely exploitable, no authenticatio
Unvalidated reflection of the X-Forwarded-Host header in Astro (versions before 5.14.3) lets remote, unauthenticated att
Astro web framework versions 9.0.0 through 9.5.3 fail to validate remote image domains when the inferSize option is enab
Base-path prefix bypass in Astro prior to 7.2.4 allows unauthenticated remote attackers to reach protected server-side r
EUVD-2026-57610
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB