CVE-2026-114127
### Summary Astro's server-side View Transition CSS generator did not keep string animation properties within their generated CSS declarations. In an application that passes attacker-controlled data into an animation property such as `duration`, a value containing CSS delimiters could terminate the declaration and rule, then add attacker-selected CSS to the server-rendered page. The injected content remains inside the generated `<style>` element. It cannot terminate that element or inject HTML or JavaScript because Astro escapes `<` before emitting the stylesheet. ### Severity Exploitation requires an application to pass untrusted, request-derived, or user-controlled content directly into a transition animation value. This is an uncommon application pattern, and applications using static or otherwise trusted transition values are unaffected. The resulting capability is limited to CSS in the rendered document. The proof of concept does not demonstrate JavaScript execution, HTML injection, an origin-boundary bypass, or access to server-only data. ### Details Animation values are collected by `stringifyAnimations()` in `packages/astro/src/runtime/server/transition.ts` and passed to `addAnimationProperty()`. String values were converted directly with `toString()`: ```ts function addAnimationProperty(builder: AnimationBuilder, prop: string, value: string | number) { let arr = builder[prop]; if (Array.isArray(arr)) { arr.push(value.toString()); } else { builder[prop] = [value.toString()]; } } ``` The animation builder then interpolated each value into a declaration: ```ts out += `\n\t${k}: ${value.join(', ')};`; ``` The completed stylesheet passes through `escapeStyleText()`, which escapes literal `<` characters to keep the content inside its HTML `<style>` element. CSS delimiters such as `;`, `{`, and `}` remained active, allowing a value to escape its intended declaration and add another rule. The shared serializer handles `duration`, `delay`
Properties
- Severity
- low
- Summary
- Astro: Arbitrary CSS injection in Astro View Transitions
- Nvd fetched at
- 2026-10-22T22:14:18.200859+00:00
- Epss score
- 0.00329
- Cvss severity
- LOW
- Cvss score
- 2.3
- Retrieved at
- 2026-10-22T22:17:33+00:00
- Ghsa published
- 2026-10-22T16:29:28Z
- Source url
- https://github.com/advisories/GHSA-mpr7-6m5w-76rw
- Ghsa updated
- 2026-10-22T16:29:29Z
- Ghsa id
- GHSA-mpr7-6m5w-76rw
- Last source
- FIRST EPSS
- Score
- 2.3
- Cvss version
- 4.0
- Cve id
- CVE-2026-114127
- Cvss vector
- 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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
- First seen by Signal
- 2026-10-21T22:34:38+00:00
- Is ghsa only
- false
- Vector
- 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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
- Published at
- 2026-10-21T18:17:25.317
Related Entities (3)
AFFECTS (1)
HAS_WEAKNESS (1)
VULNERABLE_TO (1)
Explore deeper with Ninja Signal's threat intelligence graph