Astro CVE count change: 0 → 3 XSS advisories (July 2026) (Source: GitHub Security Advisories (GHSA-f48w-9m4c-m7f5, CVE-2026-54298 and related))
The Clean Record Ends
Astro was one of a handful of modern web frameworks with a zero-CVE track record in WebPulse's security intelligence database. As of July 2026, that record is over. Three cross-site scripting advisories have been published in rapid succession, including one that is an incomplete fix for an earlier vulnerability.
What the XSS Chain Looks Like
The first advisory, CVE-2026-54298, disclosed a cross-site scripting vulnerability via unescaped spread attribute names in Astro's server-side rendering. The fix added an INVALID_ATTR_NAME_CHAR guard to the addAttribute() function to drop attribute names containing dangerous characters. The problem: a second attribute-rendering path in renderHTMLElement() was not covered by that fix.
The follow-up advisory (GHSA-f48w-9m4c-m7f5) documents this incomplete remediation. A third advisory addresses XSS via unescaped transition directive values on hydrated islands — a separate rendering path, a separate injection vector, the same class of vulnerability.
All three are XSS. All three are in the server-side rendering pipeline. All three stem from the same root pattern: user-controlled or dynamic values passing through rendering functions without adequate escaping.
What This Does — and Doesn't — Mean
Three XSS advisories do not make Astro insecure. WordPress has accumulated over 18,000 CVEs. Astro has three. The WebPulse security score for Astro moved from 84.3 to — still 84.3. Three low-to-moderate severity XSS findings barely register against the scoring model's other dimensions: development velocity, community health, AI-readiness, maintenance cadence.
What the advisories do reveal is that the zero-CVE narrative was always a reflection of Astro's youth and small attack surface, not an inherent immunity to vulnerabilities. Every framework that gains adoption, adds features, and handles more rendering edge cases will eventually produce security findings. The question is not whether a framework will have CVEs. The question is how the project responds when they arrive.
The Incomplete Fix Pattern
The most instructive detail is the incomplete fix. CVE-2026-54298 was patched in addAttribute(). The same class of flaw in renderHTMLElement() was missed. This pattern — fixing the reported instance but not auditing for the same class of issue across the codebase — is one of the most common sources of follow-up vulnerabilities in any software project. It is also why security scoring should weight the response pattern, not just the count.
Astro's maintainers issued patches for all three advisories. The turnaround was fast. The project's small codebase and active maintainer base make it possible to respond at a speed that a project the size of WordPress structurally cannot match. That response velocity is itself a security property, and it is one that WebPulse's maintenance dimension captures.
What This Means for Framework Decisions
For teams that chose Astro partly because of its clean security record: the choice is still defensible. A framework that goes from zero to three XSS findings and patches all of them within days is demonstrating exactly the kind of security posture that matters more than a zero count. The frameworks to worry about are not the ones that get CVEs. They are the ones that get CVEs and take months to patch them — or never patch them at all because the plugin maintainer has abandoned the project.


