概要
Node.jsの複数のバージョンに含まれるhttpモジュールのllhttpパーサーは、HTTPリクエストを区切るためにCRLFシーケンスを厳密に使用していないため、HTTPリクエストスマグリング(HRS)につながる可能性があります。
HTTP Request smuggling は、HTTP サーバーによるリクエストの適切な処理を妨害します。この悪用がもたらす可能性のある影響には、システムへの不正アクセスの許可、攻撃者によるデータ(データベース、ユーザーアカウント、その他の記録)の変更、セッションハイジャック、情報漏洩、キャッシュポイズニング、サービス拒否などがあります。
この問題は、以下のバージョンのNode.jsに影響します:16.0.0から16.20.1まで(ただし16.20.1を除く)、18.0.0から18.16.1まで(ただし18.16.1を除く)、20.0.0から20.3.1まで(ただし20.3.1を除く
詳細
モジュール情報
影響を受けるパッケージ: llhttp
影響を受ける Node.js のバージョン: 14 LTS
リポジトリ https://github.com/nodejs/node
公開パッケージノード
パッケージマネージャ:npm
脆弱性情報
この深刻度の高い脆弱性は、多くのバージョンの llhttp ライブラリに存在します。RFC7230 セクション3は、CRLFシーケンスだけが各ヘッダーフィールドを区切るべきであることを示していますが、このライブラリの脆弱なバージョンは、HTTPヘッダーフィールドを区切るためにCR文字だけを許可しています(LFなし)。
このライブラリはNode.jsにバンドルされているため、v16、v18、v20ブランチのNode.jsの多くのバージョンが影響を受けます。
回避策はない。
再現の手順
- サーバに脆弱なバージョンのNodeをインストールする。
- ヘッダーフィールドを終了するために、"CRLF "の代わりに "CR "だけを使うHTTPリクエス トを作成する。下の例では、1つ目のリクエストは♪だけで終わっているので、2つ目のリクエストが密輸される可能性があります(Webサーバーの特定のレイヤーに隠されたり、Webサーバーの特定のレイヤーに誤解されたりします)。2つ目のリクエストは正しく形成されています。
POST / HTTP/1.1
ホスト: example.com
Content-Type: application/x-www-form-urlencoded
コンテンツ長: 11
クッキー:session=abc123
\r
data=payload1
POST /secret HTTP/1.1
ホスト: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
data=payload2
回避策はない。
緩和
すべてのユーザは、この脆弱性のないバージョンの Node にアップグレードする必要があります。
その他のリソース
- NIST エントリー
https://nvd.nist.gov/vuln/detail/CVE-2023-30589 - https://github.com/advisories/GHSA-cggh-pq45-6h9x
弊社がサポートするオープンソースソフトウェアに新たな脆弱性が修正された場合、いつでもアラートを受け取ることができます。