PHP-FPMに含まれるリモートコード実行に関する脆弱性(CVE-2019-11043)についての検証レポート
2019/11/06 初版
2019/11/12 更新
2019/11/13 更新
2019/11/14 更新
2019/11/28 更新
松本 拓也、上原 渓一郎、鈴木 涼太
2019年10月24日にThe PHP Groupが公表した、PHP-FPMに含まれるリモートから任意のコードを実行される脆弱性(CVE-2019-11043)についての検証を実施し、脆弱性の悪用が可能であることを確認しました。
1. 本脆弱性の概要
「PHP-FPM」は、The PHP Groupによって提供されているFastCGI型のPHP実行環境です。 The PHP Groupにより、PHP-FPMにはWebサーバアプリケーションNginxとPHP-FPMで構成される環境において、特定の設定値が設定されている場合にリモートからの任意コード実行が可能となる脆弱性(CVE-2019-11043)が存在することが報告されました。[1]
本脆弱性は、PHP-FPMにおけるenv_path_infoに関する処理を行う際、使用される値の妥当性の確認が行われず、適切な処理が行われないことに起因します。Nginxの設定が下記の4つの条件を満たす場合、本脆弱性を悪用することでPHPの実行環境の変数を書き換えることが可能となります。
- locationディレクティブでリクエストをPHP-FPMに転送するようになっている
- PATH_INFO変数を割り当てる際にfastcgi_paramディレクティブが使用されている
- fastcgi_split_path_infoディレクティブが存在し、「^」で始まり「$」で終わる正規表現が用いられている
- 「try_files $uri =404」のようなファイルの有無を判断するためのチェックがない
本脆弱性についてCVSSv3スコアで9.8と評価されており[2]、概念実証コードが確認されていることから、脆弱性の悪用が流行する可能性があります。[3]
図1. 本脆弱性を悪用した攻撃の例
図1は、本脆弱性に対する攻撃の一例として、インターネットから脆弱性を含む構成のNginxサーバーへ攻撃者が不正なHTTPリクエストを送信する攻撃例を示しています。
2. 本脆弱性の影響を受ける環境
本脆弱性の影響を受ける可能性があるバージョンは以下の通りです。
- PHP7.3系:7.3.10以下
- PHP7.2系:7.2.23以下
- PHP7.1系:7.1.32以下
3. 本脆弱性を利用した攻撃の検証
概念実証コードを用いて本脆弱性に対する攻撃を試行し、脆弱性の悪用が可能であることを検証しました。
3.1. 検証環境
疑似攻撃者 | 疑似被害者 | |
---|---|---|
OS | Kali Linux 2018.01 64bit | Ubuntu 18.04.2 64bit |
アプリケーション | 概念実証コード | Nginx 1.14.0 PHP 7.1.33dev(※脆弱性未対応の開発バージョン) |
3.2. 攻撃手法
Nginxで使用されているWebサーバへのHTTPアクセス用のポート(例:TCP 8080)に対して不正なHTTP GETリクエストを送信し、PHPの実行環境に対して変数の上書きを試みます。
図2. 概念実証コードのリクエストとそのレスポンス
図2は、攻撃対象サーバに対して送信された概念実証コードによるリクエストと攻撃対象サーバからのレスポンスです。青線にて示している通り、エラーログの出力先を示す変数に対して新たに「/tmp/a」という値を上書きしています。
これによりエラーログを利用し、「/tmp/a」にペイロードを書き込んで行くことが可能となります。その後、先ほどと同様の手法にていくつかの変数の値を上書きし、プログラムの読み込み元を示す変数に「/tmp/a」を指定することで書き込んだペイロードのコードを実行することが可能となります。
3.3. 検証結果
図3に示す結果の通り、攻撃対象のサーバに対して攻撃者端末からOSコマンドを含むHTTPリクエストを送信することでコマンドの実行と実行結果の表示ができました。ここでは、ユーザ情報を参照するOSコマンド「id」を実行しています。同様に、URL末尾の「?a=」の後にコマンドを追記したURLに対してブラウザなどでアクセスすることにより、任意のコマンドの実行と実行結果の表示が可能となります。
図3. 攻撃対象のサーバ上で攻撃コードの実行に成功した結果を確認
4. 本脆弱性に対する対策
4.1. 現在推奨されている対策
2019年11月6日現在、The PHP Groupにより本脆弱性の修正用バージョンが提供されています。[4]
- PHP7.3系:7.3.11
- PHP7.2系:7.2.24
- PHP7.1系:7.1.33
また、同グループによれば、「try_files $uri =404」などのディレクティブによってファイルの有無をチェックするような設定を施せば本脆弱性の影響を回避することが可能であるとしています。
4.2. 不正アクセス監視機器による対策
4.2.1. 当社が確認している不正アクセス監視機器の対応状況
各製品ベンダーの本脆弱性への対応状況に関する情報、及び本検証による各製品での検知結果は以下の通りです。表2に公式シグネチャの提供状況を記載します。
種別 | 製品ベンダー/ 製品 |
製品ベンダー提供のシグネチャー | 検知 結果 |
---|---|---|---|
IDS/IPS | IBM QRader Network Security GX/XGS Series |
XPU 3911.07160: HTTP_PhpFpm_FastCgiSplitPathInfo_Exec [2104514] |
○ |
McAfee Network Security Platform NS/M Series |
Signature Set 9.8.57.3: HTTP: PHP-FPM Remote Code Execution Vulnerability (CVE-2019-11043) [0x4526f200] |
○ | |
WAF | Imperva SecureSphere |
メーカーからのシグネチャーは現在未提供です。 | - |
F5 Networks BIG-IP |
ASM Signature:200004996 ・PHP-FPM path_info Remote Code Execution |
検証中 | |
NGFW | Palo Alto PA Series |
Application and Threat Content:Version 8204 ・PHP-FPM Arbitrary Code Execution Vulnerability |
○ |
Check Point NGFW Series |
IPS Software Blade: ・PHP FastCGI Process Manager Remote Code Execution (CVE-2019-11043) |
○ |
参考文献
- [1] PHP :: Sec Bug #78599 :: env_path_info underflow in fpm_main.c can lead to RCE
https://bugs.php.net/bug.php?id=78599 - [2] ONVD - CVE-2019-11043
https://nvd.nist.gov/vuln/detail/CVE-2019-11043 - [3] neex/phuip-fpizdam: Exploit for CVE-2019-11043
https://github.com/neex/phuip-fpizdam - [4] PHP: PHP 7 ChangeLog
https://www.php.net/ChangeLog-7.php#7.3.11
機器別当社対応サービス
IDS/IPS
- INTELLILINK IDS/IPSセキュリティ監視・運用サービス
http://www.intellilink.co.jp/business/security/scrutiny_01
WAF
- INTELLILINK WAFセキュリティ監視・運用サービス
http://www.intellilink.co.jp/business/security/scrutiny_05
NGFW
- INTELLILINK UTMセキュリティ監視・運用サービス
http://www.intellilink.co.jp/business/security/scrutiny_06
更新履歴
2019/11/06 | 初版作成 |
---|---|
2019/11/12 | 「表2. 製品ベンダーによるシグネチャー提供状況」のPalo Altoの検知結果を更新 |
2019/11/13 | 「表2. 製品ベンダーによるシグネチャー提供状況」のIPS/IDS の情報を更新 |
2019/11/14 | 「表2. 製品ベンダーによるシグネチャー提供状況」のIBMの検知結果を更新 |
2019/11/28 | 「表2. 製品ベンダーによるシグネチャー提供状況」のCheck Pointの検知結果を更新 |
本件に関するお問い合わせ先
NTTデータ先端技術株式会社
お問い合わせフォーム
- ※ 各規格名、会社名、団体名、製品名は、各社の商標または登録商標です。
Tweet