@astrojs/rss: XML Injection via Unescaped RSS Feed Fields
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- None · Low · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub.
Summary
Astro is a web framework for content-driven websites. In versions 1.0.0 through 4.0.18, the source.title and enclosure.type item fields in packages/astro-rss/src/index.ts are interpolated directly into XML template strings without XML-character escaping before being parsed by fast-xml-parser. Both fields are validated only as z.string(), placing no restriction on XML special characters. An attacker who controls these values can inject arbitrary XML into the generated RSS feed: a value containing " can break out of an attribute (as with enclosure.type), and a value containing </source> can close an element early and inject additional nodes (as with source.title). This corrupts feed structure, injects false metadata (for example, a fake <link> pointing to a malicious URL), and can cause feed readers to misparse or display attacker-controlled content. In SSR mode (output: 'server'), the poisoned feed is served on every request to all subscribers. This issue has been fixed in version 4.0.19.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| withastro | astro | 1.0.0 to before 4.0.19 | 4.0.19 | Patch available | CNA |
| — | @astrojs/rss (npm) | 1.0.0 to before 4.0.19 | 4.0.19 | Patch available | GHSA-8j5q-mfj2-5q9q |
- astro Vendorwithastro Affected 1.0.0 to before 4.0.19 Fixed in 4.0.19 Patch available CNA
- @astrojs/rss (npm) Vendor— Affected 1.0.0 to before 4.0.19 Fixed in 4.0.19 Patch available GHSA-8j5q-mfj2-5q9q
Remediation
- Fix · CNA astro (withastro) Fixed in 4.0.19
- Fix · GHSA-8j5q-mfj2-5q9q @astrojs/rss (npm) Fixed in 4.0.19 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-59728
- 2026-10-03 Alias added: GHSA-8j5q-mfj2-5q9q
References
Other 5
- https://github.com/withastro/astro/security/advisories/GHSA-8j5q-mfj2-5q9q
- https://github.com/withastro/astro/pull/17209
- https://github.com/withastro/astro/commit/fbcfa039dfe3d700b239f595a6c55ee35e45bd06
- https://github.com/withastro/astro/releases/tag/@astrojs/[email protected]
- https://github.com/withastro/astro
More withastro vulnerabilities
- TI-2026-26147 Astro: Unauthenticated Path Override via `x-astro-path` / `x_astro_path` CVSS 3.1CRITICAL 9.1
- TI-2026-42600 Astro 6.4.7 Authorization Bypass via Decode Iteration Limit and Rewrite Path Canonicalization Mismatch CVSS 3.1HIGH 8.2
- TI-2024-37142 Server source code is exposed to the public if sourcemaps are enabled CVSS 4.0HIGH 7.8
- TI-2025-35987 Astro Cloudflare adapter is vulnerable to Server-Side Request Forgery via /_image endpoint CVSS 3.1HIGH 7.2
- TI-2025-34958 Unauthorized third-party images in Astro’s _image endpoint CVSS 4.0MEDIUM 6.9
- TI-2026-51542 Astro: Unauthenticated path override in the @astrojs/vercel ISR function CVSS 3.1MEDIUM 6.5
Sources
- CVE-2026-59728 · CVE Program
- CVE-2026-59728 · NVD
- FIRST EPSS
- GHSA-8j5q-mfj2-5q9q · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences