[緊急解説] i18next-http-middlewareにHTTPヘッダー改ざん・DoSの深刻な脆弱性 (CVE-2026-41683)
はじめに:`i18next-http-middleware` 利用者へ緊急のお知らせ
`i18next-http-middleware` をご利用中のフロントエンドエンジニアの皆さん、こんにちは。国際化 (i18n) 処理を手軽に実現するための便利なミドルウェアですが、この度、バージョン `3.9.3` より前のバージョンに、深刻なセキュリティ脆弱性 `CVE-2026-41683` が発見されました。本記事では、この脆弱性の詳細、Node.jsのバージョンごとの具体的な影響、そして早急に取るべき対策について解説します。
脆弱性の概要:`Content-Language` ヘッダーとCRLFインジェクション
この脆弱性は、`i18next-http-middleware` がユーザーから指定された言語値(通常はURLパラメータの `lng`)を、適切にサニタイズ(無害化)することなくHTTPレスポンスの `Content-Language` ヘッダーに直接書き込んでしまうことに起因します。
問題となるのは、入力値に改行コード(CRLF: `\r\n`)などの制御文字が含まれていても、それが除去されずにヘッダーに埋め込まれてしまう点です。これにより、HTTPヘッダーの構造を攻撃者が意図的に操作できてしまう「HTTPヘッダーインジェクション」攻撃が可能になります。
Node.jsのバージョンによる異なる影響
この脆弱性の深刻度は `High` と評価されていますが、Node.jsの実行環境のバージョンによって、攻撃を受けた際の影響が大きく異なります。
Node.jsのバージョン `14.6.0` より前では、`res.setHeader()` 関数に改行コードが含まれる値が渡された場合、それらがそのままヘッダーとして解釈されてしまいます。攻撃者は `lng` パラメータに `ja%0d%0aSet-Cookie: evil=cookie` (URLエンコードされた `ja\r\nSet-Cookie: evil=cookie`)のような文字列を挿入することで、任意のHTTPレスポンスヘッダーを追加できます。
これを「HTTPレスポンス分割」攻撃と呼び、以下のような様々な深刻な攻撃につながる可能性があります。
`Set-Cookie` ヘッダーを注入し、既存のセッションクッキーを上書きしたり、新たな悪意のあるクッキーを設定することで、セッション固定攻撃やセッション乗っ取りを可能にします。
キャッシュ関連のヘッダー(`Cache-Control` など)を操作し、サーバーやCDNのキャッシュに不正なコンテンツを保存させる「キャッシュポイズニング」を引き起こすことで、他のユーザーに改ざんされたコンテンツを配信する可能性があります。
`Location` ヘッダーなどを介して、ユーザーを悪意のあるサイトへリダイレクトさせたり、`Content-Type` ヘッダーを操作して、ブラウザが意図しない形式でコンテンツを解釈させ、反射型XSS (クロスサイトスクリプティング) などにつながることも考えられます。
Node.jsのバージョン `14.6.0` 以降では、`res.setHeader()` 関数に改行コードを含む不正な値が渡されると、セキュリティ強化のため `ERR_INVALID_CHAR` というエラーが意図的に発生するようになりました。
しかし、このエラーが `i18next-http-middleware` やアプリケーションコード内で適切に捕捉・処理されない場合、未処理の例外としてサーバープロセスがクラッシュしてしまいます。
その結果、そのプロセスを共有している**すべての同時接続ユーザー**がサービスを利用できなくなり、最悪の場合、アプリケーションサーバー全体がダウンする「サービス拒否(DoS)」状態に陥る可能性があります。これは、たとえ攻撃者が特定のユーザーを狙わなくても、システム全体の安定性を著しく損なう危険性があることを意味します。
関連するXSSバイパスの修正
本件とは直接関係ありませんが、`i18next-http-middleware` のバージョン `3.9.3` では、このヘッダーインジェクションの修正に加え、以前のXSSフィルターが特定のペイロードを検出できないというXSSバイパスの脆弱性も同時に修正されています。
もし、アプリケーションが `res.locals.language` などの言語値をHTMLテンプレートに直接出力している場合、このXSSバイパスによって、悪意のあるスクリプトがユーザーのブラウザで実行される可能性がありました。この修正も重要なため、併せて認識しておきましょう。
対策:直ちにバージョン `3.9.3` 以降へアップグレード!
`i18next-http-middleware` のバージョン `3.9.3` より前のすべてのバージョンが本脆弱性の影響を受けます。
**唯一かつ最も確実な対策は、`i18next-http-middleware` をバージョン `3.9.3` 以降にアップグレードすることです。**
アップグレード後は、ヘッダー値から有害な制御文字が適切に除去され、XSSフィルターも強化されるため、これらの攻撃リスクが解消されます。
**アップグレードコマンドの例:**
`npm install i18next-http-middleware@latest`
`yarn add i18next-http-middleware@latest`
根本的な回避策はアップグレードですが、Web Application Firewall (WAF) を導入している場合は、リクエストパラメータやクッキー、パスセグメントから改行コード (`%0d%0a` など) を除去するルールを設定することで、部分的な軽減策として機能する場合があります。ただし、これはあくまで補助的な対策であり、ライブラリのアップグレードが最優先であることに変わりはありません。
まとめ
今回の `i18next-http-middleware` の脆弱性は、HTTPヘッダーインジェクションからサービス停止 (DoS) まで、広範かつ深刻な影響をもたらす可能性があります。特にNode.jsのバージョンによって攻撃ベクトルが異なるため、ご自身の環境を確認し、速やかに対応することが非常に重要です。
定期的なライブラリのアップデートと、サニタイズ処理の重要性を改めて認識し、セキュアなアプリケーション開発を心がけましょう。