location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
nginx側の処理にてURLに改行コード(%0a, %0d)が含まれる際の不備に起因し、攻撃者は細工した悪意のあるリクエストをサーバに送ることで、本脆弱性を悪用してPHPの任意の設定値を上書きすることが可能であり、その結果、リモートから任意のコマンド実行が可能となります。
本記事では、脆弱性の検証結果や弊社SOCでの検知傾向について解説します。
本脆弱性の影響を受けるバージョンは以下のとおりです。
※ なお、サポートが終了しているバージョンにおいても同様に影響を受ける可能性があります。
本脆弱性は公開当初、パッチが存在しないゼロデイの状態でしたが、10月25日(日本時間)に本脆弱性を修正する新しいバージョンが公開されています。パッチの詳細についてはベンダの情報をご参照ください。
本脆弱性の有無を調査する方法や任意のコード実行を行う手法はすでに公開されています。
検証の結果、以下のことを確認しました。
・本脆弱性を有する環境において、リモートから任意のコマンド実行が可能である。
・本脆弱性を対策したバージョンにアップデートすることで攻撃は成立しなくなる。
以下で公開されているDocker コンポーネントを使用しました。
vulhub/php/CVE-2019-11043 at master · vulhub/vulhub · GitHub
https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043
Debian GNU/Linux 9
nginx/1.17.5
PHP 7.2.10 (cli) (built: Sep 15 2018 02:33:49) ( NTS )
今回行った検証は、脆弱性を悪用し対象サーバのPHPの設定を上書きしてWebShellを配置するというものです。
以下は、脆弱性有無を調査する攻撃リクエストであり、脆弱性を有するサーバは502応答を返します。(図1)
以下は脆弱性を悪用してPHPの設定書き換えを試みる攻撃リクエストです。(図2)
今回の攻撃コードでは、PHPの設定を書き換えることでエラーログの出力先を変更し、そこにWebShellのペイロードを書き込み、それを読み込ませるということを行っています。
その結果、配置したWebShellを用いて任意のコードが実行できることを確認しました。(図3)
なお、PHP実行時にWebShellを読み込ませるようにPHPの設定を書き変えているため任意のPHPファイルに対して任意のコードが実行できるようになります。
図2. PHPの設定上書きが成功した例
図3. 任意のコマンド実行が可能になったことを確認した例
弊社SOCでは脆弱性を認知して直ちに監視デバイスでの検知検証を行い、既存のシグネチャで攻撃通信の検知が可能であることを確認しました。
以下は弊社SOC監視環境下における検知傾向です。(図4)
10月26日より本脆弱性の有無を調査する通信を検知しており、10月29日に大量の調査通信を確認しました。
なお、弊社SOC監視環境下では11月1日現在脆弱性有無の調査通信にとどまっており、実際に脆弱性を悪用しようとする攻撃の検知はありません。
図4. CVE-2019-11043 の脆弱性有無を調査する通信の検知推移
図5. CVE-2019-11043 の脆弱性有無を調査するリクエスト検知例
nginx と PHP-FPM を組み合わせた環境において脆弱性に該当するPHPバージョンを利用している場合は早急にベンダから公開されている修正済みのバージョンにアップデートすることを推奨いたします。
なお、本脆弱性はURLに改行コード(%0a, %0d) が含まれた際の処理に不備があることに起因しています。
そのため、早急なアップデートが困難な場合は、IPS/WAFといった監視デバイスでURLに改行コード(%0a, %0d)が含まれるアクセスをブロックする対策も有効ですのでご検討ください。