Critical 18-Year-Old NGINX Vulnerability Enables Remote Code Execution Attacks
2026/05/14 CyberSecurityNews — NGINX のソース・コードにおいて、2008年から存在していた深刻なヒープバッファ・オーバーフローの脆弱性 CVE-2026-42945 (CVSS 9.2) が発見された。この脆弱性に対しては、すでに PoC エクスプロイトが公開され、認証を必要としないリモート・コード実行 (RCE) が実証されている。NGINX は、世界で最も広く利用される Web サーバの 1つであるため、その影響は広範に及ぶ。

この脆弱性は、NGINX の ngx_http_rewrite_module に存在する。このエンジンは、URL 書き換え/変数割り当てを担っており、大半の NGINX デプロイメントで使用されている。このバグは 2008年にリリースされた Version 0.6.27 で混入して以来、Version 1.30.0 に至るまでの全バージョンにおいて 18年間検出されなかった。
18年間潜伏した NGINX RCE 脆弱性
この脆弱性は、rewrite ディレクティブと set ディレクティブを同時に使用するコンフィグによりトリガーされるが、このパターンは API ゲートウェイ構成において一般的である。
NGINX の内部スクリプト・エンジンは、これらのディレクティブを 2段階で処理している。具体的には、第1段階 (長さ計算) でメモリ長を算出した後に、第2段階 (コピー処理) で確保済みバッファへデータを書き込む仕様となっている。
この問題の本質は、2 段階間の状態の不整合にある。たとえば、rewrite ディレクティブにクエスチョン・マーク (?) が含まれる場合、メイン・スクリプト・エンジンには is_args = 1 フラグが恒久的に設定される。その一方で、第1段階 (長さ計算) では初期化済みのサブ・エンジンが使用されるため、is_args は実質的に 0 となり、結果として URI エスケープを考慮しない不適切な長さ計算が実行されてしまう。
第2段階 (コピー処理) では、メイン・エンジンが is_args = 1 の状態で動作し、ngx_escape_uri 関数が各バイトを 1 バイトから 3 バイトへ展開するため、結果として確保されたバッファ・サイズを大幅に超えるデータが書き込まれることになり、典型的なヒープバッファ・オーバーフローが発生する。
ASLR 無効環境で動作する RCE エクスプロイトが、研究者により開発されている。この脆弱性は、セキュリティ企業 depthfirst が 2026年4月のコード監査中に発見したものであり、その際には、3件のメモリ破損バグも特定されている。特定されたバグを用いる攻撃チェーンは、ヒープ操作/POST ボディを用いた偽 cleanup 構造のスプレー攻撃/NGINX の決定的マルチ・プロセス構造を組み合わせることで、安定したコード実行を実現している。この PoC は、GitHub 上で公開済みである。
今回の調査で確認された 4件の脆弱性は以下の通りである。
| CVE | Severity | CVSS | Affected Module | Impact |
|---|---|---|---|---|
| CVE-2026-42945 | Critical | 9.2 | ngx_http_rewrite_module | Heap buffer overflow → RCE |
| CVE-2026-42946 | High | 8.3 | ngx_http_scgi/uwsgi_module | ~1 TB allocation → crash |
| CVE-2026-40701 | Medium | 6.3 | ngx_http_ssl_module | Use-after-free via OCSP |
| CVE-2026-42934 | Medium | 6.3 | ngx_http_charset_module | Out-of-bounds read |
この脆弱性は広範な F5/NGINX 製品に影響する。
NGINX Open Source 0.6.27–1.30.0
NGINX Plus R32–R36
NGINX Instance Manager
NGINX App Protect WAF
NGINX Gateway Fabric
NGINX Ingress Controller
各製品の修正バージョンは以下である。
| Product | Affected Versions | Patched Version |
|---|---|---|
| NGINX Plus | R32 – R36 | R36 P1+ / R37+ |
| NGINX Instance Manager | 2.16.0 – 2.21.1 | 2.21.2+ |
| F5 WAF for NGINX | 5.9.0 – 5.12.1 | 5.12.2+ |
| NGINX App Protect WAF | 4.9.0 – 4.16.0 and 5.1.0 – 5.8.0 | 4.16.1+ / 5.8.1+ |
| F5 DoS for NGINX | 4.8.0 | 4.8.1+ |
| NGINX App Protect DoS | 4.3.0 – 4.7.0 | 4.7.1+ |
| NGINX Gateway Fabric | 1.3.0 – 1.6.2 and 2.0.0 – 2.5.1 | 1.6.3+ / 2.5.2+ |
| NGINX Ingress Controller | 3.5.0 – 3.7.2, 4.0.0 – 4.0.1, 5.0.0 – 5.4.1 | 3.7.3+ / 4.0.2+ / 5.4.2+ |
F5 は 2026年5月13日に公式セキュリティ・アドバイザリを公開し、NGINX 1.30.1/1.31.0 への速やかなアップグレードを、管理者に対して強く推奨している。パッチの適用が根本的な解決策となるが、即時アップデートが困難な場合には、rewrite ディレクティブと set ディレクティブを併用するコンフィグを監査した上で、パッチ適用までの間は追加の WAF レイヤ背後に配置するなどの、暫定的な回避策を講じることが推奨される。
訳者後書:今回の脆弱性 CVE-2026-42945 は、NGINX の内部で行われる 2段階の処理プロセスにおける “状態の不整合” が原因で発生しています。第 1段階の長さ計算時に参照する設定と、第 2段階のデータ書き込み時に参照する設定が食い違っていたことで、本来確保すべきサイズよりも小さなメモリ領域に、 展開された大きなデータが書き込まれてしまいました。このような設計上の細かな差異が、ヒープバッファ・オーバーフローという深刻な問題に繋がります。ご利用のチームは、ご注意ください。よろしければ、Nginx での検索結果も、ご参照ください。

You must be logged in to post a comment.