エラー応答(HTTP 500)でも Web シェルは書き込まれている:ログの応答コードで判断しない
YOOtheme Pro の CVE-2026-102785(5.0.53 で修正)を狙った攻撃では、サーバーが HTTP 500 を返したのに PHP の Web シェルは保存され、数秒後に動作確認の通信が来ていた。攻撃の痕跡調査では、応答コードではなくファイルの有無と、その後のアクセスで判断する。
攻撃の流れ(Unit 42 の観測)
- 影響版は 5.0.0〜5.0.52(WordPress / Joomla 向けテーマ)。修正版 10-21、CVE 公開 10-22、PoC 流通 10-23、その 2 日後には自動攻撃による書き込みが観測された。
- 公開済みの署名付き画像 URL に、送信データの読み込みと保存を指示する処理を追加し、メタデータに PHP コードを埋めた画像を送ってアップロード領域へ PHP ファイルとして保存させる。再処理後もコードが残る作り。
- 応答は HTTP 500。それでも書き込みは成立し、数秒後に検証用コマンドが送られた。約 2 分後には別 IP から人の操作が入り、ALFA Team 製 Web シェルや補助ファイルを置き、
gsocketの導入も試みていた。
調査の手順
- YOOtheme Pro を 5.0.53 以降に更新する。
- アクセスログで画像処理のエンドポイントへの不審なリクエストを探すとき、200 だけでなく 4xx / 5xx も含めて抽出する。
- その時刻の前後に、アップロード領域(WordPress なら
wp-content/uploads/)に作られた.phpや二重拡張子のファイルを探す。bashfind wp-content/uploads -type f \( -name '*.php' -o -name '*.phtml' -o -name '*.php.*' \) -newermt '2026-10-21' - 見つけたファイルへのその後のアクセス(GET/POST)をログで追い、追加で置かれたファイルや外向き通信(
gsocketなど)を確かめる。 - アップロード領域では PHP を実行させない設定にしておく(Web サーバーで
uploads配下の PHP 実行を禁止)。