
NGINXは、世界中で広く使われているオープンソースのWebサーバソフトウェアです。
軽量かつ高速で、特に大量の同時アクセスを効率よく処理できるため、Apacheなどの従来のサーバに代わって大規模サイトやWebサービスで広く採用されています。
利用可能な動作パターンも豊富で、Webサーバとして動作させて利用できるだけでなく、リバースプロキシとして使う、ロードバランサーとして使う、一度読み込んだデータを保持し次回以降の表示を高速化する用途で使う、などが可能なソフトウェアとなっています。
このため、きわめて多くの環境で利用されており、閉じた環境で動作しているものも多くあることから正確な数値はわかりませんが、NGINXの稼働しているWebサイトやシステムの数は数千万〜数億サイトにのぼると考えられます。
このNGINXで、ずっと前からあった脆弱性が最近明らかになりました。
- CVE-2026-42945
この脆弱性は重大度が9.2と高いため問題の大きなものとなっています。
しかしそれだけでなく、この問題はずっと明らかになってこなかったもので、実に18年前のバージョンからずっと存在していた脆弱性でした。
NGINXのバージョンでいうと、0.6.27から1.30.0に影響を与えます。
この問題はヒープバッファオーバーフローの脆弱性です。
NGINXに投入する設定を解釈する際に想定外の動作をするもので、成功するとリモートコード実行に至ります。
通常のヒープバッファオーバーフローの悪用の場合、システムをクラッシュさせることは比較的難易度が低いのですが、それを悪用してコード実行させることは簡単ではありません。
しかしこの脆弱性の含まれるNGINXはマルチプロセスアーキテクチャを採用しています。
実際の処理を行うプロセスはワーカーと呼ばれますが、このワーカーは実行の前にマスタープロセスからフォークされて動作を開始します。
このことが脅威アクターにとって都合が良い状態に作用します。
つまり、ヒープバッファオーバーフローの脆弱性を悪用した試みが失敗に終わったとしても、何度も調整しながら試みることができる環境となっているのです。
またこのワーカーのフォーク時にはマスタープロセスは全く同じメモリレイアウトを持つ新しいワーカープロセスを生成するため、同じ状態の対象に対しての攻撃を試行できることになるのです。
ワーカーがクラッシュしてメモリレイアウトが変わってしまうことを心配することなく、成功するまで安全に複数回試行することができることを意味します。
なんと攻撃者にやさしい状態なのでしょうか。
この脆弱性が成り立つには特定の条件を満たす必要があり、その意味ではこれは実現性の高くない脆弱性といえるかもしれません。
しかし、長年利用されてすでに枯れた状態になっていると考えられるNGINXのようなソフトウェアにおいても、この例のようにずっと発見されないままになっている脆弱性が存在することがあるのだ、という点は衝撃的です。
広く利用されていて長期間メンテナンスされているソフトウェアだから安全だろうなどと盲目的に安心することなく、身近なソフトウェア資産を管理し、それらに対してのパッチケイデンスを維持していきましょう。
NGINX Rift: Achieving NGINX Remote Code Execution via an 18-Year-Old Vulnerability
https://depthfirst.com/research/nginx-rift-achieving-nginx-rce-via-an-18-year-old-vulnerability
| この記事をシェア |
|---|