kのサイバーシティ

サイバー空間を自由気ままに解説するブログ

【CVE-2024-4577】php-cgiとソフトハイフンで起こる脆弱性について

どうもー 最近CGI環境のphp脆弱性が話題になっているのでゆるくまとめます。

 

脆弱な環境例

windows,Apache,php,XAMPP

概要

windowsが日本語もしくは中国語(繁体字簡体字)のロケールで実行されている場合php脆弱性を使い、任意のコードが実行できてしまう脆弱性です。

 

ざっと解説しますと。。。

Apacheでは通常ハイフンをエスケープしますが、、、、

なんと!ソフトハイフンはエスケープしないんです!!

・・・・・

何言ってんだって感じだと思いますが、ハイフンとソフトハイフンをUnicodeで表すと。。

 

ハイフン:0x2D

ソフトハイフン:0xAD

 

になります。

ハイフン(0x2D)はApacheでしっかりガードしてくれますが、ソフトハイフン(0xAD)は番号が違うため、通ってしまいます。そして、phpはソフトハイフンを通常のハイフンと認識してしまうため、ハイフンで始まるコマンドラインの引数をphpに送り込むことができます。

 

以下に簡単にまとめると、、、

悪意のあるコード⇒Apache「なんかハイフンに似てるやついるけど大丈夫やろ!ヨシ!」⇒php「なんかきた!実行すればええやろ!」⇒完

 

検証

では実際に検証していきます。

※運営しているサービスの脆弱性を確かめるためにご利用ください。

 

http://localhost/index.phpで普通にindex.phpを表示させます。

index.phpの後ろに「?%ADs」をつけます。

そしてEnterを押すと、index.phpの中身が表示されます。

以上です。すごく簡単です。

 

%ADは先ほど述べたようにソフトハイフンです。sはソースコードを表示するオプションです。

つまりコマンドラインで表すと以下のようになります。

php.exe -s index.php

対処法

もっとも有効な対処法は最新のPHPバージョン(8.3.8, 8.2.20, 8.1.29)に上げることです。

しかし、「それができれば苦労しねぇよ、、」ってシステムもあると思います。(化石システムとか。。。。)

そういうシステムには「.htaccess」に以下の記述をして下さい。


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

上記追加後に実行してみると、

403エラーで返ってきます。

しかし、これは一時的な処置です。システム全体をアップデートするなりなんなりと改修が必要になるかと思います。