PHPのリモートでコードが実行される脆弱性の分析(CVE2019-11043)

PHPのリモートでコードが実行される脆弱性の分析(CVE2019-11043)

最近、Mechuang Security Labは、PHPがNginx + php-fpmの一部の構成でリモートコード実行のリスクの高い脆弱性(CVE2019-11043)を公式に公開したことを監視しました。攻撃者はこの脆弱性を利用して、ターゲットWebサイトでリモートコード実行攻撃を行う可能性があります。この脆弱性の影響は限定的ですが、構成ファイルがオープンであるため、niginx + php-fpmの運用および保守担当者を使用して、セルフチェックとセルフチェックを時間どおりに行ってください。

0x00脆弱性タイムライン

9月14日から18日まで、外国のセキュリティ研究者であるAndrew Danauは、Real World CTFに参加しているときに、%0aシンボルをターゲットサーバーのURLに送信すると、脆弱性を疑って例外が返されることを発見しました。
9月26日、PHPは正式に脆弱性通知を発行しました。これは、Nginx + php-fpmサーバーを使用すると、一部の構成ではリモートでコードが実行される脆弱性があり、その構成が広く使用されて大きな被害を引き起こしていることを指摘しています。PHPは
10月21日から22日に脆弱性更新プログラムを正式にリリースし、脆弱性POCが公開されました。
10月24日、ラボ番号59から脆弱性に関する警告が出されました。

0x01脆弱性の説明

Nginxのfastcgi_split_path_infoで%0aを使用して要求を処理する場合、改行\ nのためにPATH_INFOは空です。また、php-fpmには、PATH_INFOが空であることを処理するときに論理的な欠陥があります。攻撃者は、注意深く構築および利用されたPAYLOADを介してリモートコード実行を引き起こす可能性があります。ただし、Nginxで使用されるfastcgi構成は、Nginxのデフォルト構成ではありません。

0x02影響を受けるバージョン

Nginx + php-fpmで構成されたサーバーを使用し、nginx / conf / nginx.confg構成ファイルで次の構成が採用されている場合、RCEの脆弱性が存在します

Location ~[^/]\.php(/|$){
  ...
  fastcgi_split_path_info  ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

fastcgi_split_path_infoフィールドが^(。+?。php)(/.*)$;として構成されている場合、攻撃者は慎重に作成されたペイロードを通じてリモートコード実行の脆弱性をトリガーできます。GitHubによって公開されたPOCコードは、Webshel​​lからWebサイトディレクトリに書き込まれますバックドアの作成を開きます。PHP> = 5.3.3以降、php-fpmはphpコアに統合されますが、上記の構成のサーバーは依然として攻撃される危険があります。

0x03脆弱性の原則

サーバー側の設定は次のとおりです
ここに画像の説明を挿入
。サーバーに送信されるPOCはfpm_main.cです。接続は次のとおりです:
https : //github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c

この脆弱性は主に、PHP-FPMのsapi / fpm / fpm / fpm_main.cファイルのenv_path_infoのアンダーフローによって引き起こされました。これは、「fpm_main.c」ファイルの1150行目に\ n(%0a)が導入されたことによって引き起こされましたnginxからphp-fpmに渡されたPATH_INFOが空です。次に、FCGI_PUTENVとPHP_VALUEの組み合わせを使用して、現在のphp-fpmプロセスのphp設定を変更できます。特別に構成された構成が有効になると、任意のコード実行がトリガーされます。
ここに画像の説明を挿入

0x04脆弱性の再発

vulhub環境を使用して、CVE2019-11043の脆弱性を再現します。
vulub / php / CVE-2019-11043のパスでdocker-compose up -dを実行して、脆弱性環境を生成します
ここに画像の説明を挿入
。vulhub/ php / CVE-2019-11043ディレクトリーでサーバー構成情報を表示します
ここに画像の説明を挿入
。default.confphuip-fpizdamツールを使用して、脆弱性を悪用します。
wget https://github.com/neex/phuip-fpizdamにアクセスし、解凍してディレクトリに移動し、ビルドを実行してphuip-fpizdamを生成します(このツールは、OSに応じて対応するOSバージョンを自動的に
ここに画像の説明を挿入
生成します)データを送信するために生成されたばかりのツールphuip-fpizdamを使用しますパッケージ
ここに画像の説明を挿入
が表示され、ここで正常に実行された後、http:// localhost:8080 / index.phpにアクセスし、パラメーターaを取得します。ここで、aは、/ bin / sh±c 'PAYLOAD'&を使用して、コマンドインジェクションを実行できるインジェクションポイントです。 、idやwhoamiなどのコマンドコードをその中に挿入すると、正常に使用されたことを示す結果が返されることがわかります。
ここに画像の説明を挿入
ここに画像の説明を挿入
php-fpmは複数のサブプロセスを開始するため、ここに注意する場所があります。したがって、汚染されたプロセスがアクセスされるまで、コマンドインジェクション中に複数回アクセスする必要があります。

0x05緊急緩和策

高リスク:脆弱性の詳細とテストコードが公開されています。セキュリティ更新パッチを更新するか、公式に推奨されている構成例を有効にするか、WAFおよびその他のセキュリティ保護機器を導入して脆弱性の利用状況を監視することをお勧めします。

脅威の差し引き:この脆弱性はリモートでコードが実行される脆弱性です。悪意のある攻撃者は、製品を世界中で使用するユーザーの数に基づいて、脆弱性を標的とした自動攻撃プログラムを開発し、脆弱性が悪用された後にバックドアプログラムの自動埋め込みを実装し、さらにマイナープログラムをリリースする可能性があります。または、DDOSゾンビやトロイの木馬などの悪意のあるプログラムがワームを拡散させ、Webサービスの通常の提供に影響を与える可能性があります。

セキュリティ開発の提案:PHPファミリ製品は、これまでに複数のセキュリティ脆弱性を報告しています。この製品を使用する企業は、セキュリティ開発コードを通じてユーザー入力フィルタリングを強化し、いつでもセキュリティアップデートの発表に注意を払うことをお勧めします。

0x06修理防御方法

  1. Nginx構成ファイルのfastcgi_split_path_infoの正規表現を変更して、.phpの後に表示できない文字を許可しないようにします
  2. 状況が許せば、Nginx + php-fpmサービスの使用を一時停止してください
  3. 実際の本番環境のビジネス要件に従って、次の構成を削除します
    fastcgi_split_path_info ^(。+?。php)(/.*)$;
    fastcgi_param PATH_INFO $ fastcgi_path_info;
21件の元の記事を公開 14 件を獲得 4075件を訪問

おすすめ

転載: blog.csdn.net/m0_38103658/article/details/102783914