CVE-2026-59728 @astrojs/rss: XML Injection via Unescaped RSS Feed Fields
Attackers can inject malicious XML into RSS feeds via unescaped fields, corrupting feed structure and injecting false metadata for subscribers.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- A user has to click or open something
- Fix
- Available
What is CVE-2026-59728?
CVE-2026-59728 is a medium-severity vulnerability in withastro astro, published on 27 Jul 2026. An attacker can exploit it over the internet without logging in, and only if a user opens a file or follows a link.
Official description
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.
Weakness: CWE-91
Which versions are affected by CVE-2026-59728?
2 open source packages ship an affected version, including @astrojs/rss.
| Package | Affected | Fixed in |
|---|---|---|
@astrojs/rss npm | From 1.0.0 | 4.0.19 |
@astrojs/rss npm | From 1.0.0 | 4.0.19 |
How do I fix CVE-2026-59728?
Upgrade @astrojs/rss to 4.0.19 or later.
Is CVE-2026-59728 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-59728 exists.
Sources
Also known as CLSA-2026-1784596299, CLSA-2026-1784943236, CLSA-2026-1792161555, CLSA-2026-1792161559, CLSA-2026-1792161694, CLSA-2026-1792161701 and 6 more.