Angular SSR: Denial of Service (DoS) via Infinite Loop on Malformed DOCTYPE
A Denial of Service (DoS) vulnerability exists in `@angular/platform-server`'s DOM emulation parser (`domino`). When processing untrusted user input containing an incomplete DOCTYPE declaration ending with whitespace before EOF (such as ``, and keyword matching advance `nextchar`, the EOF branch (`case -1: // EOF`) emitted doctype and EOF tokens without advancing `nextchar` or transitioning out of the state: ```javascript case -1: // EOF forcequirks(); emitDoctype(); emitEOF(); break; ``` Because `nextchar` remained unchanged pointing to the EOF marker character (`\uFFFF`), the scanner loop (`while (nextchar < numchars)`) repeatedly re-invoked `after_doctype_name_state` with `codepoint = EOF` indefinitely. In Node.js's single-threaded runtime, this synchronous loop starves the event loop entirely. ### Impact & Reachability * **Reachability**: The vulnerability is reachable in any Angular SSR application where untrusted user input is bound to `[innerHTML]`, interpolated into markup, or sanitized on the server. * **Impact**: Successful exploitation allows an unauthenticated remote attacker to cause an immediate Denial of Service (DoS) by sending a payload containing an incomplete DOCTYPE (e.g., ``, }) export class AppComponent { // Attacker-controlled input containing an incomplete DOCTYPE ending with whitespace payload = '
GHSA-f67j-2jqw-jpq7
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:GHSA-f67j-2jqw-jpq7
@angular/platform-server
Source reference: /affected/0/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 22.1.6
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
@angular/platform-server
Source reference: /affected/1/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 21.2.23
Source reference:
/affected/1/ranges - Prerequisites
- Not stated in this record
@angular/platform-server
Source reference: /affected/2/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 20.3.31
Source reference:
/affected/2/ranges - Prerequisites
- Not stated in this record
@angular/platform-server
Source reference: /affected/3/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- Not stated in this record
- Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "22.0.0"
},
{
"fixed": "22.1.6"
}
]
}
],
"package": {
"name": "@angular/platform-server",
"purl": "pkg:npm/%40angular/platform-server",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-f67j-2jqw-jpq7/GHSA-f67j-2jqw-jpq7.json"
}
},
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "21.0.0"
},
{
"fixed": "21.2.23"
}
]
}
],
"package": {
"name": "@angular/platform-server",
"purl": "pkg:npm/%40angular/platform-server",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-f67j-2jqw-jpq7/GHSA-f67j-2jqw-jpq7.json"
}
},
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "20.0.0"
},
{
"fixed": "20.3.31"
}
]
}
],
"package": {
"name": "@angular/platform-server",
"purl": "pkg:npm/%40angular/platform-server",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-f67j-2jqw-jpq7/GHSA-f67j-2jqw-jpq7.json"
}
},
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"last_affected": "19.2.25"
}
]
}
],
"package": {
"name": "@angular/platform-server",
"purl": "pkg:npm/%40angular/platform-server",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-f67j-2jqw-jpq7/GHSA-f67j-2jqw-jpq7.json"
}
}
]- Related CVEs
- CVE-2026-101895
Source reference:
/aliases
Publisher severity
high
Source reference: /database_specific/severity
- Event
- #23693 · Revision 1
- Added to Heist Feed
- Publisher date