週末にちょうど間に合うように、非常に単純なエクスプロイトによる厄介なバグが PHP を襲う

Date:

Share post:

週末にちょうど間に合うように、非常に単純なエクスプロイトによる厄介なバグが PHP を襲う

PHPプログラミング言語の重大な脆弱性が簡単に悪用され、Windowsデバイス上で悪意のあるコードが実行される可能性があるとセキュリティ研究者は警告し、影響を受ける人々に対し週末が始まる前に対策を講じるよう促した。

脆弱性とそれに伴うパッチが公開されてから24時間以内に、非営利セキュリティ組織Shadowserverの研究者らは、 報告 インターネットスキャンは、攻撃を受けやすいサーバーを特定するために設計されています。これは、(1)悪用の容易さ、(2)概念実証攻撃コードの入手可能性、(3)脆弱なマシン上でのリモートコード実行の重大性、(4)広く使用されている ザムップ PHP プラットフォームがデフォルトで脆弱であるという問題を受け、セキュリティ専門家は管理者に対し、週末が始まる前に PHP サーバーが影響を受けていないか確認するよう促しています。

「ベストフィット」が

「非常に単純なエクスプロイトを使った厄介なバグ。金曜の午後にぴったりだ」とセキュリティ会社ウォッチタワーの研究者は言う。 書きました

CVE-2024-4577は、PHPがUnicode文字をASCIIに変換する方法のエラーに起因する脆弱性です。 特徴 Windowsに組み込まれているベストフィットと呼ばれる機能により、攻撃者は 引数の挿入 アプリケーション(この場合はPHP)によって実行されるコマンドにユーザーからの入力を渡す。この脆弱性を利用すると、攻撃者は CVE-2012-18232012 年に修正された PHP の重大なコード実行の脆弱性。

「PHPを実装する際に、チームはWindowsオペレーティングシステム内のエンコード変換のベストフィット機能に気付かなかった」と、CVE-2024-4577を発見したセキュリティ会社Devcoreの研究者らは述べている。 書きました「この見落としにより、認証されていない攻撃者は特定の文字シーケンスによって CVE-2012-1823 の以前の保護を回避できます。引数インジェクション攻撃により、リモート PHP サーバー上で任意のコードが実行される場合があります。」

CVE-2024-4577 は、Web サーバーが HTTP リクエストを解析し、それを PHP スクリプトに渡して処理する CGI と呼ばれるモードで実行されている場合にのみ PHP に影響します。ただし、PHP が CGI モードに設定されていない場合でも、php.exe や php-cgi.exe などの PHP 実行ファイルが Web サーバーからアクセス可能なディレクトリにある場合は、脆弱性が悪用される可能性があります。この構成は Windows 版 XAMPP でデフォルトで設定されており、変更されていない限りプラットフォームが脆弱になります。

WatchTowrが指摘した一例は、クエリが解析され、コマンドラインを通じて送信されるときに発生する。その結果、次のような無害なリクエストが生成される。 http://host/cgi.php?foo=bar 変換できる php.exe cgi.php foo=barメインの PHP エンジンによって実行されるコマンドです。

逃げ場はありません

他の多くの言語と同様に、PHP は特定の種類のユーザー入力を変換して、実行コマンドとして解釈されないようにします。これはエスケープと呼ばれるプロセスです。たとえば、HTML では、< および > 文字は、ブラウザーによって HTML タグとして解釈されないように、Unicode の 16 進値に相当する < および > に変換してエスケープされることがよくあります。

WatchTowr の研究者は、Best Fit がソフトハイフン (Unicode 値 0xAD) などの文字をエスケープできず、代わりに多くのコード構文で役立つ文字であるエスケープされていない通常のハイフン (0x2D) に変換する方法を実証しています。

研究者らは次のように説明した。

ユニコード処理の一環として、PHPは「ベストフィット」マッピングと呼ばれるものを適用し、ユーザーがソフトハイフンを入力したときに、実際にはハイフンを入力するつもりだったと仮定します。 本物 ソフトハイフンとして解釈されます。ここに脆弱性があります。CGIハンドラにソフトハイフン(0xAD)を与えると、CGIハンドラはそれをエスケープする必要性を感じず、PHPに渡します。しかし、PHPはそれをハイフンとして解釈します。 本物 これにより、攻撃者はハイフンで始まる追加のコマンドライン引数を PHP プロセスに忍び込ませることができます。

これは、CGIモードのPHPの古いバグ(CVE-2012-1823)と非常によく似ているため、この古いバグのために開発されたいくつかのエクスプロイト手法を借用して、新しいバグに適用することができます。 書き上げる インジェクションを RCE に変換するには、次の引数をインジェクションすることを目指すべきだとアドバイスしています。

-d allow_url_include=1 -d auto_prepend_file=php://input

これは、HTTP リクエスト本文からの入力を受け入れ、PHP を使用して処理します。非常に簡単です。通常のハイフンの代わりに 0xAD「ソフト ハイフン」を備えたバージョンを試してみましょう。エスケープをすり抜けるには十分でしょうか?

POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: {{host}}
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive


 

ああ、嬉しいことに、 phpinfo ページには、実際に RCE を達成したことがわかります。

この脆弱性はDevcoreの研究者Orange Tsai氏によって発見された。 言った「このバグは信じられないほど単純ですが、それがまた興味深い点でもあります。」

Devcore のレポートによると、研究者らは、Windows が繁体字中国語、簡体字中国語、または日本語のロケールを使用するように構成されている場合に XAMPP が脆弱であることを確認したとのことです。Windows では、ロケールとは、ユーザーの言語、環境、および/または文化的慣習に関連するユーザー設定情報のセットです。研究者らは他のロケールをテストしておらず、それらのロケールを使用するユーザーには、使用シナリオをテストするために包括的な資産評価を実行するよう促しています。

CVE-2024-4577 は、Windows デバイスで実行されているすべてのバージョンの PHP に影響します。これには、バージョン ブランチ 8.3 から 8.3.8 まで、8.2 から 8.2.20 まで、および 8.1 から 8.1.29 までが含まれます。

8.0、7、5 バージョン ブランチも脆弱ですが、サポートが終了しているため、パッチが利用できないため、管理者は緩和策のアドバイスに従う必要があります。 1 つのオプションは、次のような書き換えルールを適用することです。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

研究者らは、これらのルールは脆弱性が確認された 3 つの地域でのみテストされていると警告している。

この投稿が公開された時点では、XAMPP for Windows はまだ修正プログラムをリリースしていませんでした。PHP CGI を必要としない管理者は、次の Apache HTTP Server 構成を使用してこれをオフにすることができます。

C:/xampp/apache/conf/extra/httpd-xampp.conf

対応する行を見つける:

ScriptAlias /php-cgi/ "C:/xampp/php/"

そしてコメントアウトします:

# ScriptAlias /php-cgi/ "C:/xampp/php/"

脆弱性に関する追加分析は利用可能 ここ