
CVE-2026-21710の概念実証エクスプロイト。Node.jsのHTTPリクエスト処理における欠陥で、`__proto__`ヘッダーを介してキャッチされないTypeErrorを引き起こし、サービス拒否(DoS)に至ります。
| フィールド | 値 |
|---|
| CVE ID | CVE-2026-21710 |
| 公開日 | 2026-03-30 |
| CVSS v3.1 | 7.5 HIGH (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) |
| CWE | CWE-770 — リソースの無制限割り当て(スロットリングなし) |
| 影響を受けるバージョン | Node.js 20.x、22.x、24.x、25.x |
| 修正バージョン | 2026年3月セキュリティリリース |
Node.js の HTTP リクエスト処理に欠陥があり、__proto__ という名前のヘッダーを含むリクエストを受信し、アプリケーションが req.headersDistinct にアクセスすると、捕捉されない TypeError が発生します。
dest["__proto__"] は undefined ではなく Object.prototype に解決されるため、配列以外のオブジェクトに対して .push() が呼び出されます。この例外はプロパティゲッター内で同期的にスローされるため、error イベントリスナーでは捕捉できません。すべての req.headersDistinct アクセスを try/catch でラップしない限り、この例外を処理することはできません。
headersDistinct ゲッターは、ヘッダー値をプレーンオブジェクトに蓄積します:
const dest = {};
// ...
dest[name] = dest[name] || [];
dest[name].push(value);
name === "__proto__" の場合:
dest["__proto__"] は Object.prototype を返します(truthy であり、undefined ではない)|| [] による初期化がスキップされるObject.prototype に対して .push(value) が呼び出される → TypeError: dest[name].push is not a function| ファイル | 説明 |
|---|---|
server.js | 脆弱な HTTP サーバー(req.headersDistinct に直接アクセス) |
poc.js | 概念実証エクスプロイト |
認可されたセキュリティ研究/責任ある開示のみを目的としています。
node server.js
# Listening on http://127.0.0.1:3000
node poc.js
期待される出力:
__proto__ ヘッダーが送信され、サーバーは捕捉されない TypeError でクラッシュします。