
A Rust honeypot that simulates a vulnerable cPanel/WHM instance for CVE-2026-41940 CVE-2026-41940 用の脆弱な cPanel/WHM インスタンスをシミュレートする Rust 製ハニーポット

CVE-2026-41940(cPanel2Shell 認証バイパス)をシミュレートする、脆弱な cPanel/WHM インスタンスを模した Rust 製ハニーポットです。
このハニーポットは、cPanel2Shell 脆弱性スキャナが使用する応答シーケンスをエミュレートします。
msg_code:[expired_session] マーカーを提供する初期プローブを通過した攻撃者は、インメモリ仮想ファイルシステムに支えられた偽の bash シェルに誘導されます。
cargo build --release
# デフォルト: ポート 2087、2083(自動生成 TLS 使用)
./target/release/cpanel2shell-honeypot
# カスタムポート
./target/release/cpanel2shell-honeypot -p 2083,2087
# TLS 無効化
./target/release/cpanel2shell-honeypot --no-tls
# ホスト名ごとの TLS(ホットリロード対応)
./target/release/cpanel2shell-honeypot --certs-config data/certs.toml
# 全オプション
./target/release/cpanel2shell-honeypot --help
data/certs.toml を作成します(data/certs.example.toml を参照):
default = "auto"
[auto]
cache_dir = "./captures/certs"
key_type = "ecdsa-p256"
validity_days = 365
issuer_cn = "Let's Encrypt Authority X3"
[[host]]
sni = "cpanel.example.com"
cert = "/etc/honeypot/certs/cpanel.pem"
key = "/etc/honeypot/certs/cpanel.key"
src/
├── main.rs # エントリポイント、ランタイム設定
├── cli.rs # コマンドライン引数
├── config.rs # アプリケーション設定
├── router.rs # HTTP ルート定義
├── capture.rs # リクエストログとペイロード保存
├── sessions/ # セッション永続化
├── handlers/ # HTTP リクエストハンドラ
├── shell/ # Bash インタプリタと VFS
│ ├── lexer.rs # トークナイザ
│ ├── parser.rs # 再帰下降パーサ
│ ├── exec.rs # AST エグゼキュータ
│ ├── expand.rs # 変数展開
│ ├── builtins.rs # シェル組み込みコマンド
│ ├── commands.rs # 外部コマンドスタブ
│ ├── vfs.rs # 仮想ファイルシステム
│ └── init.rs # ファイルシステムシードデータ
└── tls/ # TLS 証明書管理
├── config.rs # 証明書設定
├── generator.rs # 証明書生成
├── resolver.rs # SNI 証明書解決
└── watcher.rs # 設定ファイルのホットリロード
偽のシェルは bash のサブセットを実装しています:
$VAR、${VAR:-default})$(cmd)、`cmd`)セッション状態(cwd、env、VFS 書き込み、履歴)は JSON スナップショットにより再起動後も保持されます。
すべての攻撃者のアクティビティは ./captures/ に書き込まれます:
| ファイルパターン | 説明 |
|---|---|
upload_*.bin | アップロードされたファイル |
upload_meta_*.txt | アップロードメタデータ |
post_*.txt | POST リクエストボディ |
cmd_*.txt | ターミナルコマンド |
sessions/*.json | セッションスナップショット |
certs/ | キャッシュされた TLS 証明書 |
until/case キーワード対応の拡張シェルパーサMIT