• ひとことでPHP を CGI として動かしている場合に、URL の細工で外からプログラムを動かされる弱点です。
  • 深刻度9.8 緊急CVSS v3.1
  • まずやることPHP をサポート中の版に移行する

何をすればいいかを詳しく読む

基本情報(データから表示)

CVE番号CVE-2012-1823
製品PHP PHP
深刻度(CVSS)9.8 緊急CVSS v3.1
NVD に登録された、他の機関(開発元など)による評価
詳細(ベクター)CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
KEVへの追加日2022-03-25
米国政府機関の対応期限2022-04-15
ランサムウェアでの悪用不明(確認されていない)
弱点の種類(CWE)CWE-20(入力の確認の不備)

何が起きた

PHP を CGI(Web サーバーから別のプログラムとして呼び出す方式)で動かしている場合に、URL の後ろに付ける問い合わせの文字列(クエリ文字列)の扱いを誤る弱点が見つかりました。= を含まないクエリ文字列にコマンドラインのオプションを入れると、任意のコード(攻撃者が好きに選べる命令)を実行される可能性があります。NVD に登録された CISA の評価では、離れた場所からログインなしで、利用者の操作もなしに攻撃できます。実際の攻撃での悪用も確認されています。

攻撃の流れ

データをもとに、AIを使用して作成した図です。実際の攻撃は、これと異なる場合があります。

攻撃の流れ: 1. 攻撃者が CGI で動く PHP のサイトを探す → 2. = を含まないクエリ文字列を送る → 3. 文字列がオプションとして解釈される → 4. サーバー上で攻撃者のコードが実行される1攻撃者が CGI で動く PHP のサイトを探す2= を含まないクエリ文字列を送る3文字列がオプションとして解釈される4サーバー上で攻撃者のコードが実行される攻撃の流れ: 1. 攻撃者が CGI で動く PHP のサイトを探す → 2. = を含まないクエリ文字列を送る → 3. 文字列がオプションとして解釈される → 4. サーバー上で攻撃者のコードが実行される1攻撃者が CGI で動く PHP のサイトを探す2= を含まないクエリ文字列を送る3文字列がオプションとして解釈される4サーバー上で攻撃者のコードが実行される攻撃の流れ: 1. 攻撃者が CGI で動く PHP のサイトを探す → 2. = を含まないクエリ文字列を送る → 3. 文字列がオプションとして解釈される → 4. サーバー上で攻撃者のコードが実行される1攻撃者が CGI で動く PHP のサイトを探す2= を含まないクエリ文字列を送る3文字列がオプションとして解釈される4サーバー上で攻撃者のコードが実行される

誰が影響を受ける

PHP を CGI(php-cgi)として動かしている Web サーバーの管理者が対象です。NVD の説明では、5.3.12 より前、5.4.x のうち 5.4.2 より前のバージョンが影響を受けます。PHP の公式の告知では、Apache の mod_php や php-fpm で動かしている場合は影響を受けないとしています。

何をすればいい

PHP の公式の告知では、PHP 5.3.12 と 5.4.2 で修正したものの、すべての変種は直っていなかったと説明しており、その後に公開した 5.3.13 と 5.4.3 への更新を勧めています。ただし PHP の公式サイトでは、5.3 系は 2014年8月14日、5.4 系は 2015年9月3日 にサポートが終わっているため、サポート中の PHP に移ってください。すぐに更新できない場合の回避策として、Apache の mod_rewrite で、= を含まず - を含むクエリ文字列の依頼を拒否する方法が案内されています。あわせてメーカーの公式の案内を確認してください。

やることチェックリスト

  • PHP をサポート中の版に移行する
  • PHP を CGI で動かしているか確認する
  • mod_rewrite で - を含む不審な依頼を拒否する

用語メモ

CGI
Web サーバーが、依頼を受けるたびに別のプログラムを呼び出して結果を返す仕組みです。
クエリ文字列
URL の ? の後ろに付けて、ページに情報を渡すための文字列です。
mod_rewrite
Apache の機能で、届いた依頼の URL を条件に応じて書き換えたり拒否したりできます。

次に読む

公式情報と元データ

公式情報

元データ(英語・CISA KEV より)を開く

PHP-CGI Query String Parameter Vulnerability

概要

sapi/cgi/cgi_main.c in PHP, when configured as a CGI script, does not properly handle query strings, which allows remote attackers to execute arbitrary code.

推奨対応

Apply updates per vendor instructions.

この元データの出どころ: CISA KEV カタログで見る