Angular SSRにおけるサービス拒否(DoS)脆弱性:不正なDOCTYPE宣言による無限ループ

`@angular/platform-server`のDOMエミュレーションパーサー(`domino`)に、サービス拒否(DoS)の脆弱性が存在します。信頼できないユーザーからの入力に、不完全なDOCTYPE宣言が含まれており、それがファイルの終端(EOF)の前に空白文字で終わっている場合(例:`<!DOCTYPE html `)、HTMLパーサーは無限の同期ループに入り、CPU使用率が100%になり、Node.jsのサーバープロセスが完全にフリーズします。

### 技術的な説明
Angularのサーバーサイドレンダリング(SSR)において、`@angular/platform-server`は、テンプレートバインディング(例:`[innerHTML]`)を介して渡されるHTMLや、DOM APIを介して操作されるHTMLを解析およびサニタイズするために`domino`を使用します。

DominoのHTMLパーサー(`lib/HTMLParser.js`)では、固定の先読みを指定するトークナイザーの状態(例:`after_doctype_name_state`、`lookahead = 6`)は、状態ハンドラ関数が明示的に文字インデックスポインタ(`nextchar`)を進めることを前提としています。空白文字、`>`、キーワードのマッチングの各処理では`nextchar`が進められますが、EOFの処理(`case -1: // EOF`)では、DOCTYPEとEOFのトークンを生成するものの、`nextchar`を進めたり、状態を遷移したりしません。

```javascript
case -1: // EOF
forcequirks();
emitDoctype();
emitEOF();
break;
```

このため、`nextchar`が変化せず、EOFマーカー文字(`\uFFFF`)を指したままになり、スキャナループ(`while (nextchar < numchars)`)が`after_doctype_name_state`を`codepoint = EOF`の状態のまま、無限に再実行します。Node.jsのシングルスレッド環境では、この同期ループがイベントループを完全にブロックします。

### 影響と到達可能性
* **到達可能性**: この脆弱性は、信頼できないユーザーからの入力が `[innerHTML]` にバインドされている、マークアップに埋め込まれている、またはサーバー側でサニタイズされている、Angular SSR アプリケーションであれば、どの環境でも発生する可能性があります。
* **影響**: 攻撃が成功すると、認証されていないリモート攻撃者が、不完全な DOCTYPE (例: `<!DOCTYPE html `) を含むペイロードを送信することで、即座にサービス拒否 (DoS) 攻撃を引き起こす可能性があります。Node.js SSR プロセスが 100% の CPU 使用率で停止し、すべての同時および後続の HTTP リクエストに応答できなくなります。

**概念実証:**
```ts
import { Component } from '@angular/core';

@Component({
selector: 'app-root',
standalone: true,
template: `<div [innerHTML]="payload"></div>`,
})
export class AppComponent {
// 攻撃者が制御する入力。不完全な DOCTYPE が含まれており、末尾に空白文字があります。
payload = '<!DOCTYPE html ';
}
```

### 対策
* サーバー側レンダリングテンプレートで、信頼できないユーザー入力を直接 `[innerHTML]` にバインドしないようにします。生の HTML レンダリングが不要な場合は、標準のテキスト補間 (`{{ userInput }}`) または `[textContent]` を使用してください。
* `[innerHTML]` にユーザー入力を渡す前に、`/^<!DOCTYPE/i` に一致する文字列を削除または拒否するなどして、ユーザー入力を検証またはサニタイズしてください。

影響を受けるパッケージ:
- npm (JavaScript) @angular/platform-server: 影響を受けるバージョン >= 22.0.0、< 22.1.6、22.1.6 で修正済み
- npm (JavaScript) @angular/platform-server: 影響を受けるバージョン >= 21.0.0、< 21.2.23、21.2.23 で修正済み
- npm (JavaScript) @angular/platform-server: 影響を受けるバージョン >= 20.0.0、< 20.3.31、20.3.31 で修正済み
- npm (JavaScript) @angular/platform-server: 影響を受けるバージョン <= 19.2.25、修正なし