Angular SSR: Denial of Service (DoS) via Infinite Loop on Malformed DOCTYPE
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 20.3.31, 21.2.23, 22.1.6
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: poc
- Automatable: yes
- Technical impact: partial
Summary
Angular is a development platform for building mobile and desktop web applications using TypeScript/JavaScript and other languages. Prior to 20.3.31, 21.2.23, and 22.1.6, the @angular/platform-server DOM emulation parser can enter an infinite synchronous loop when Angular server-side rendering processes attacker-controlled HTML containing an incomplete DOCTYPE that ends with whitespace at end of input. In Domino lib/HTMLParser.js, after_doctype_name_state emits doctype and EOF tokens without advancing nextchar or leaving the fixed-lookahead state, so the scanner repeatedly handles the same EOF marker. A remote unauthenticated attacker can use this condition through server-side HTML parsing paths such as innerHTML binding to consume a Node.js SSR worker at full CPU, starve the event loop, and stop concurrent and subsequent requests. This issue is fixed in versions 20.3.31, 21.2.23, and 22.1.6.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: poc · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- angular angular
through 19.2.25; From 20.0.0 · fixed in 20.3.31; From 21.0.0 · fixed in 21.2.23; From 22.0.0 · fixed in 22.1.6
- @angular/ platform-server
through 19.2.25; From 20.0.0 · fixed in 20.3.31; From 21.0.0 · fixed in 21.2.23; From 22.0.0 · fixed in 22.1.6
- @angular/platform-servernpm
From 22.0.0 · fixed in 22.1.6
- @angular/platform-servernpm
From 21.0.0 · fixed in 21.2.23
- @angular/platform-servernpm
From 20.0.0 · fixed in 20.3.31
- @angular/platform-servernpm
through 19.2.25