LOWCVSS v4 2.3Vulnerability

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)

→[Software]npm/astro

VULNERABLE_TO (1)

←[Software]npm/astro

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-114127 (CVSS v4 2.3) — Ninja Signal Threat Intelligence | Ninja Signal