Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Astro/MDX page interpolating untrusted data into script/style child
-
DeliveryCraft value with closing </script> or </style> tag plus injected script
-
ExploitDeliver via request parameter or stored input
-
ExecutionVictim loads page, element terminates early
-
PersistInjected JavaScript executes under app origin
-
ImpactSession/cookie theft or action on behalf of user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the target application to pass attacker-controlled data as a DYNAMIC child of a <script> or <style> element rendered through the astro:jsx renderer (including MDX components) - e.g. <script>{value}</script> or <style>{value}</style> - where the attacker can influence that value via request input or stored data. The flaw does NOT affect compiler-generated literal script/style content or content injected by remark/rehype plugins, and does NOT affect other JSX expression contexts, which already escape dynamic strings. Limiting factors: the vulnerable coding pattern is developer-introduced (not a default configuration), the victim must load the affected page (UI:R), and only astro:jsx/MDX rendering paths prior to Astro 7.3.2 are affected; using set:html is the sanctioned opt-in for raw rendering. |
| Impact | This is a moderate, developer-dependent XSS (CWE-79) in the Astro framework's astro:jsx/MDX renderer, scored CVSS 6.5 (NVD vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N). The vector signals network reach, low complexity, no attacker privileges, but required user interaction (victim must load the page). No EPSS score, KEV entry, or SSVC decision data was supplied, so probabilistic and automatable signals cannot be evaluated - treat exploitation likelihood as unquantified. Critically, this is NOT a flaw exploitable against default/unmodified Astro installs: it only triggers when the application developer passes attacker-controlled data as a dynamic child of a <script> or <style> element (e.g. <script>{value}</script>) rendered through astro:jsx, including MDX components. All other JSX expression contexts already auto-escape, which sharply narrows the real-world attack surface. The public fix PR (#17896) ships a functional payload fixture ('</script><script id="script-owned">window.__pwned = true</script>'), so working exploit input is effectively public even though no CISA KEV or in-the-wild exploitation is indicated. Net: a genuine but conditional priority - high if your app renders untrusted data into script/style children, low otherwise. Note the PR:N in the vector reflects the victim/attacker-less web context, not that every Astro site is exploitable. |
| Exploit ScenarioDerived | A developer builds an Astro/MDX page that interpolates user- or request-derived data directly into a script or style child, e.g. <script>{userValue}</script>. An attacker submits a value containing '</script><script>...</script>' (or '</style>...'), which closes the element early and injects attacker JavaScript; when a victim loads the page, the script runs under the application's origin (reflected or stored XSS). A working payload demonstrating this is already published in the fix PR's test fixture. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
Reflected and stored cross-site scripting can occur in Astro Framework versions prior to 7.3.2 when an application passes attacker-controlled data as a dynamic child of a <script> or <style> element rendered through the astro:jsx renderer, including MDX components. Exploitation is conditional on that developer-introduced pattern-compiler-generated literal script/style content and other JSX expression contexts are not affected-and requires the victim to load the crafted page (UI:R). No public exploit code was identified at time of analysis; the NVD score is 6.5, while our independent assessment treats impact as limited (S:C/C:L/I:L/A:N) because the vulnerable pattern is not a default configuration.
RemediationAI
Upgrade to Astro 7.3.2 or later (vendor-released patch: Astro 7.3.2), and update the associated @astrojs/markdown-remark and @astrojs/markdown-satteri packages to the versions shipped with that release. If immediate upgrade is not possible, remove or rewrite application/MDX patterns that pass request-derived or stored user data as a dynamic child of <script> or <style>-for example, serialize untrusted values into a data attribute and parse them client-side, or JSON-encode and explicitly escape '<' before interpolation; do not rely on set:html with untrusted data, because set:html is the sanctioned opt-in for raw rendering and must only be used with trusted or sanitized content. A restrictive Content Security Policy can reduce impact but does not fix the injection and may require nonce/hash adjustments. The fix is tracked in PR https://github.com/withastro/astro/pull/17896, commit https://github.com/withastro/astro/commit/a548223607b9bb146d5d90ddda495343f9a2a739, and advisory https://github.com/withastro/astro/security/advisories/GHSA-98hj-9722-w3j8.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Astro's astro:jsx renderer and MDX pipeline build HTML from JSX-like trees. In affected versions, when a <script> or <style> element had a plain-string child, the renderer marked it as an HTMLString and emitted it raw, on the assumption that such strings were compiler-generated literal content or plugin-injected markup. That assumption breaks when a dynamic expression such as <script>{value}</script> receives attacker-controlled data: a value containing </script> or </style> can close the element and inject HTML/JavaScript in the application origin. The root cause maps to CWE-79 (improper neutralization of input during web page generation). The 7.3.2 fix changes the compiler to collapse literal script/style content into set:html at compile time and escapes remaining dynamic string children-using escapeStyleText for style, which escapes only '<' to preserve CSS quotes. Other JSX contexts already escaped dynamic strings; the flaw is scoped to script/style children in astro:jsx/MDX rendering.
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:L/PR:N/UI:R/S:U/C:N/I:H/A:N
Reflected/stored XSS executing in the victim browser (a different security scope, S:C) with no attacker auth (PR:N) but required page load (UI:R); limited confidentiality/integrity impact typical of script injection.
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 7.3.2, Astro's JSX and MDX rendering pipeline treats string children of script and style elements as trusted HTML without distinguishing compiler-generated literal content from dynamic expression values. An application that passes attacker-controlled data directly as a dynamic child can allow a value containing a closing script or style tag to terminate the element and inject arbitrary HTML and JavaScript. Other JSX expression contexts escape dynamic strings automatically; the issue is limited to script and style children rendered through the astro:jsx renderer, including MDX components. Successful exploitation can produce reflected or stored cross-site scripting under the application's origin. This issue is fixed in 7.3.2.
Blast Radius
ecosystem impact- 4 npm packages depend on astro (4 direct, 0 indirect)
Ecosystem-wide dependent count for version 7.3.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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
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-107411
GHSA-98hj-9722-w3j8
NVD
CVE.org
EPSS
VulDB
Exploit-DB