Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessInject CSS delimiters into transition animation value
-
ExploitServer emits unescaped CSS declaration in stylesheet
-
ExecutionVictim loads crafted server-rendered page
-
ImpactAttacker rules spoof UI or exfiltrate DOM attribute data
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 Astro application (versions 7.1.0 through 7.3.2) to pass attacker-controlled data into a server-side View Transition animation property - specifically duration, delay, easing, direction, fillMode, or the animation name - which the pre-patch CSS generator serializes without escaping the ';', '{', and '}' delimiters. This is a non-default, application-level condition: stock Astro with hardcoded transition values is not exploitable. Impact is further limited by the framework still escaping literal less-than characters (preventing style-element breakout, HTML, or JavaScript injection), by the need for a victim to load the crafted server-rendered page (passive user interaction), and by confining the outcome to CSS-level UI manipulation and at most exfiltration of data already present in selectable DOM attributes. |
| Impact | This is a genuinely low-priority issue, and the multiple signals agree rather than conflict. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N) scores 2.3 (Low), reflecting that while the attack is network-reachable and unauthenticated, it carries an attack requirement (AT:P) and passive user interaction (UI:P), with only Low confidentiality and integrity impact and no availability impact. There is no EPSS score, no CISA KEV listing, and no public exploit code in the provided data - only the upstream patch PR and its regression tests, which demonstrate the fix but are not a weaponized POC. Critically, the CWE-79 classification and the 'XSS' tag overstate the danger: the description explicitly notes that literal less-than characters remain escaped, so the flaw cannot terminate the style element or inject HTML/JavaScript. The real-world impact is confined to CSS injection (UI spoofing, content concealment/repositioning, and at most conditional exfiltration of data already in selectable DOM attributes). The most important limiting factor is not captured by CVSS: exploitation requires the hosting application to deliberately pass attacker-controlled data into View Transition animation properties - a non-default, application-specific coding pattern - so most Astro deployments are not exposed at all. |
| Exploit ScenarioDerived | An Astro application (7.1.0-7.3.2) server-renders a page that interpolates untrusted user input - for example a URL parameter or stored field - directly into a View Transition animation property such as duration, delay, easing, or the animation name. The attacker supplies a value containing CSS delimiters (';', '}', '{') to break out of the generated declaration and inject their own CSS rules, which a victim then loads as part of the server-rendered stylesheet. No public exploit code was identified at time of analysis; the attacker could overlay or hide interface elements to spoof the UI, and in some apps use conditional resource loads to leak attribute data already present in the DOM. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 21, 2026
CSS injection in Astro's server-side View Transition generator (versions 7.1.0 through 7.3.2) lets attacker-controlled strings placed into animation properties - duration, delay, easing, direction, fillMode, or animation name - break out of their generated declaration because the ';', '{' and '}' delimiters are serialized unescaped. An application is only affected if it feeds untrusted input into those transition properties; stock Astro sites using hardcoded values are not exploitable. The framework still escapes literal less-than characters, so the injected content cannot close the style element, inject HTML, or execute JavaScript - impact is confined to CSS-level UI manipulation (hiding, repositioning or spoofing content, adding generated text, and conditional resource loads that may leak data already present in selectable DOM attributes). Severity is low (CVSS 4.0 base 2.3; independently assessed as CVSS 3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N), with no public exploit identified at time of analysis and a vendor fix released in Astro 7.3.3.
RemediationAI
Upgrade to Astro 7.3.3 or later (vendor-released patch; release notes at https://github.com/withastro/astro/releases/tag/astro@7.3.3, advisory at https://github.com/withastro/astro/security/advisories/GHSA-mpr7-6m5w-76rw). The fix escapes ';', '{' and '}' as CSS hex escapes inside stringifyAnimation while still permitting calc() and var() expressions, so no application changes are required after upgrading. If an immediate upgrade is not possible, the most effective compensating control is to stop untrusted data from reaching transition animation properties: map user input through a strict server-side allowlist (for example, accept only a fixed enum of named animations and only time/keyword tokens matching a pattern such as ^[0-9.]+m?s$ for duration and delay) or derive those values exclusively from a hardcoded table indexed by a validated key - the trade-off is reduced flexibility for applications that legitimately template transition timing per request. A Content-Security-Policy with a strict style-src (nonce- or hash-based rather than 'unsafe-inline') provides partial defense because injected rules land inside a style element, but style hashes must be recomputed whenever the generated CSS changes and nonce handling must be wired through Astro's SSR output, so this is a mitigation of impact rather than a fix. Because exploitation requires a victim to load the crafted server-rendered page, monitoring for unusual query- or API-driven transition parameter values in server logs can help identify attempted abuse, and any application that reflected such parameters should be reviewed for CSS-based UI redress or attribute-driven data exposure.
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 is a content-driven web framework whose SSR runtime includes a View Transition CSS generator (packages/astro/src/runtime/server/transition.ts). Its stringifyAnimation builder assembles declarations such as animation-duration: <value>; by concatenating user-supplied strings directly into the emitted stylesheet that is injected into the page head. The patch at PR #17970 introduces escapeCSSValue(), a CSS_VALUE_DELIMITERS regex (/[;{}]/g) that replaces each delimiter with its escaped hex form (\3B , \7D , \7B ), while deliberately preserving valid CSS functions such as calc() and var() - the accompanying unit tests assert both the escaping behavior and that calc(1s + var(--transition-delay, 200ms)) still round-trips. The root cause is classified as CWE-79 (improper neutralization of input during web page generation), but in practice this is a style-context injection rather than script injection: because '<' remains escaped, an attacker cannot terminate the <style> element, so the achievable primitive is arbitrary CSS rules within the page's own stylesheet. That still permits UI redress - overlay or conceal elements, reposition controls, inject generated text via CSS content, and trigger conditional resource loads that can surface data already exposed in selectable DOM attributes. Affected package coordinates map to cpe:2.3:a:withastro:astro with the vulnerable range 7.1.0 through 7.3.2; the prerequisite of application-controlled (not framework-default) data flow is why the independent assessment scores AC:H and UI:R.
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:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
AC:H because exploitation depends on the app passing untrusted data into animation properties (the 4.0 AT:P requirement); PR:N as no auth is needed, UI:R since a victim must load the page; C:L/I:L for limited CSS injection, A:N.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Astro is a web framework for content-driven websites. From 7.1.0 until 7.3.3, Astro's server-side View Transition CSS generator does not keep string animation properties within their generated declarations. An application that passes attacker-controlled data into properties such as duration, delay, easing, direction, fillMode, or animation names can allow CSS delimiters to terminate the declaration and add attacker-selected rules to the server-rendered page. The generated stylesheet still escapes literal less-than characters, so the injected content cannot terminate the style element or directly inject HTML or JavaScript. The injected CSS can conceal or reposition content, add generated text, and otherwise misrepresent the interface; some applications may also expose data already present in selectable DOM attributes through conditional resource loads. This issue is fixed in 7.3.3.
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-107409
GHSA-mpr7-6m5w-76rw
NVD
CVE.org
EPSS
VulDB
Exploit-DB