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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-34234-Lab — CtrlPanel Web インストーラーの CVE-2026-34234 認証されていない RCE を実証するローカル Docker ラボ。脆弱なコンテナとパッチ適用済みコンテナ、PoC スクリプト、根本原因分析が含まれ、セキュリティ調査と防御的検証に役立ちます。 | Kitploit
ツール/GitHubGitHub/rootdirective-sec/cve-2026-34234-lab
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育ラボと実践
GitHubrootdirective-sec/cve-2026-34234-lab

CVE-2026-34234-Lab

CtrlPanel Web インストーラーの CVE-2026-34234 認証されていない RCE を実証するローカル Docker ラボ。脆弱なコンテナとパッチ適用済みコンテナ、PoC スクリプト、根本原因分析が含まれ、セキュリティ調査と防御的検証に役立ちます。

リポジトリを見る
13ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2026-34234 - CtrlPanel インストーラー RCE ラボ

CtrlPanel の CVE-2026-34234 を実証するためのローカル Docker ラボです。

このリポジトリは以下を比較します:

  • vuln: ダイジェストで固定された CtrlPanel 1.1.1
  • patched: ダイジェストで固定された CtrlPanel 1.2.0

このラボはローカルのみで動作し、サービスは 127.0.0.1 にバインドされます。


概要

CVE-2026-34234 は、CtrlPanel の Web インストーラーにおける認証なし RCE です。

この問題は、2つのバグが連鎖することで発生します:

  1. install.lock によるゲートの前に、インストーラーのフォームハンドラーに到達できた。
  2. インストーラーの入力がシェルコマンド文字列に埋め込まれた。

このラボでは、脆弱なコンテナが無害な証明コマンドを実行し、その出力をコンテナ内に書き込みます。パッチ適用済みコンテナは同じリクエストを受け取りますが、証明ファイルは作成されません。

期待される結果:

root@kitploit:~
vulnerable => proof file created
patched    => no proof file

根本原因

1. 1.1.1 における脆弱なシェル実行

元の脆弱なファイル:

root@kitploit:~
public/installer/src/functions/shell.php

1.1.1 の関連するアップストリームコード:

root@kitploit:~
function run_console(string $command, ...) {
    $path = dirname(__DIR__, 4);
    $handle = proc_open("cd '$path' && bash -c 'exec -a ServerCPP $command'", ...);
}

問題点:

  • run_console() は1つのシェルコマンド文字列を受け取ります。
  • その文字列は bash -c に渡されます。
  • ユーザーが制御するインストーラーの値が、そのコマンド文字列の一部になる可能性があります。
  • シェルのメタ文字によりコマンド構造が変更される可能性があります。

2. 脆弱なインストーラーのフォームパス

元の脆弱なファイル:

root@kitploit:~
public/installer/src/forms/pterodactyl.php

1.1.1 の関連するアップストリームの動作:

root@kitploit:~
run_console("php artisan settings:set 'PterodactylSettings' 'panel_url' '$url'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'admin_token' '$key'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'user_token' '$clientkey'", ...);

問題点:

  • url、key、clientkey はインストーラーの POST データに由来します。
  • これらの値はシェルコマンド文字列に埋め込まれます。
  • インストーラーのエンドポイントは認証なしで到達可能です。

3. インストーラーのゲート順序

アドバイザリによると、public/installer/index.php はインストーラーのフォームロジックを読み込んで実行した後にのみ install.lock をチェックしていました。そのため、インストール済みのインスタンスでもインストーラーのハンドラーに到達可能でした。


パッチ / 修正

1. 早期のインストーラーロックチェック

修正では、install.lock のチェックをフォームハンドラーの読み込み前に移動します。

パッチ適用後の動作:

root@kitploit:~
if (file_exists('../../install.lock')) {
    exit("The installation has been completed already. Please delete the File 'install.lock' to re-run");
}

2. シェル文字列の実行を回避

元のパッチ適用済みファイル:

root@kitploit:~
public/installer/src/functions/shell.php

1.2.0 の関連するアップストリームコード:

root@kitploit:~
function run_console(array $command, ...): string {
    $cwd = $cwd ?? $path;
    $handle = proc_open($command, $descriptors, $pipes, $cwd, null, $options);
}

これで問題が修正される理由:

  • run_console() は argv 形式の配列を受け取るようになりました。
  • コマンドは単一のシェル文字列として構成されなくなりました。
  • $() のようなペイロード構文は、シェル構文ではなくリテラル入力として扱われます。

1.2.0 のパッチ適用済みフォームの動作では、配列形式のコマンド実行を使用します:

root@kitploit:~
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'panel_url', $url], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'admin_token', $key], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'user_token', $clientkey], ...);

ラボ設計

root@kitploit:~
127.0.0.1:8081 -> vulnerable CtrlPanel 1.1.1
127.0.0.1:8082 -> patched CtrlPanel 1.2.0
127.0.0.1:9100 -> fake Pterodactyl API

サービス:

  • vuln: 実際の CtrlPanel 1.1.1
  • patched: 実際の CtrlPanel 1.2.0
  • fake-api: インストーラーのチェックを満たすためだけに使用されるローカル疑似 Pterodactyl API
  • mysql_vuln / mysql_patched: 独立した MariaDB インスタンス
  • redis_vuln / redis_patched: 独立した Redis インスタンス

このラボは CtrlPanel アプリケーションのソースコードを変更しません。

Dockerfile は、元のコンテナのエントリポイントをラップして、以下の Docker Desktop ランタイム権限を正規化するだけです:

root@kitploit:~
/var/www/html/storage
/var/www/html/bootstrap/cache

権限を修正した後、ラッパーは元の製品エントリポイントを実行します。


PoC 設計

主要な PoC:

root@kitploit:~
poc/poc_http_only.py

特性:

  • HTTP POST のみを送信
  • docker exec を使用しない
  • コンテナを検査しない
  • リバースシェルを起動しない
  • 無害なコマンドのみを使用: id、whoami、hostname

ヘルパースクリプト:

root@kitploit:~
poc/poc_lab.py

目的:

  • 同じ HTTP リクエストを送信
  • docker compose exec を使用してコンテナ内の証明を検証
  • デモおよびリグレッションテスト専用

アプリコンテナ内の証明ファイル:

root@kitploit:~
/var/www/html/storage/logs/cve_2026_34234_proof.txt

実行方法

クリーンなラボ状態から開始:

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

アプリコンテナが起動するまで待ってから、次を実行:

root@kitploit:~
python3 poc/poc_lab.py

期待される出力:

root@kitploit:~
== Testing vulnerable ==
proof_exists: True
result: PASS expected_proof=True

== Testing patched ==
proof_exists: False
result: PASS expected_proof=False

[+] Expected result reached:
    vulnerable => proof file created
    patched    => no proof file

手動 HTTP のみのテスト

HTTP のみの PoC を脆弱なターゲットに送信:

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8081

証明を手動で確認:

root@kitploit:~
docker compose exec vuln sh -lc 'cat /var/www/html/storage/logs/cve_2026_34234_proof.txt'

期待される証明:

root@kitploit:~
uid=1000(laravel) gid=1000(laravel) groups=1000(laravel)
laravel
<container-hostname>

同じリクエストをパッチ適用済みに対して実行:

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8082

パッチ適用済みの動作を確認:

root@kitploit:~
docker compose exec patched sh -lc 'test -f /var/www/html/storage/logs/cve_2026_34234_proof.txt && cat /var/www/html/storage/logs/cve_2026_34234_proof.txt || echo "no proof file"'

期待される結果:

root@kitploit:~
no proof file

クリーンアップ

コンテナ、ネットワーク、ラボのボリュームを削除:

root@kitploit:~
docker compose down -v

注意事項

  • このラボはローカルでのセキュリティ研究専用です。
  • 所有していない、またはテスト許可のないシステムに対して PoC を実行しないでください。
  • 証明は意図的にコンテナ内のローカルコマンド出力のみに限定されています。
  • 脆弱なサービスとパッチ適用済みのサービスは、別々のデータベースと Redis インスタンスを使用します。
  • 疑似 API は、インストーラーフローに必要な最小限の Pterodactyl API レスポンスをエミュレートするためにのみ存在します。

免責事項

このリポジトリは、教育目的のセキュリティ研究および防御的検証のためにのみ提供されます。

すべてのデモは、提供されたローカル Docker ラボ環境内での実行を意図しています。概念実証は、破壊的な操作、永続化、認証情報の窃取、データの外部送信、実際のシステムへの標的設定を回避しています。

明示的な許可なしに、このプロジェクトをいかなるシステムに対しても使用しないでください。著者は、この資料の悪用またはそれによる損害について責任を負いません。


参考情報

  • GitHub セキュリティアドバイザリ: https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh
  • CVE レコード / NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-34234
  • パッチ適用済みリリース: https://github.com/Ctrlpanel-gg/panel/releases/tag/1.2.0
  • アップストリームリポジトリ: https://github.com/Ctrlpanel-gg/panel
ツールをダウンロード