HackTheBox: Interpreter
偵察 — Mirth Connect 4.4.0 検出
ポートスキャン
Jetty + 443 は Mirth Connect の典型的な構成。webstart.jnlp でバージョン確認。
Mirth Connect バージョン確認
Mirth Connect 4.4.0 は CVE-2023-43208 (XStream deserialization pre-auth RCE) の対象バージョン。
CVE-2023-43208 — XStream デシリアライゼーション Pre-Auth RCE
PoC 取得・準備
CommonsCollections4 + EventUtils$EventBindingInvocationHandler gadget chain を使用。POST /api/users + X-Requested-With: OpenAPI ヘッダ必須。応答 HTTP 500 = payload 受理済みを示す。
RCE 確認 (OOB nc callback)
exec(String[]) で [“sh”,”-c”,”CMD”] を渡すためスペースを含むコマンドも実行可能。OOB (Out-Of-Band) 経由でコマンド実行結果を確認。
mirth.properties から DB 認証情報取得
取得認証情報
mirthdb : MirthPass123!
MariaDB 侵入 → sedric ハッシュ → hashcat クラック
MariaDB テーブル調査
PERSON テーブルの主キーは PERSON_ID ではなく ID。PERSON_PASSWORD との JOIN に注意。
PERSON_PASSWORD テーブルから sedric ハッシュ取得
PERSON_PASSWORD スキーマは (PERSON_ID, PASSWORD, PASSWORD_DATE) のみ。SALT/ITERATIONS カラムなし。PASSWORD に 8-byte salt + 32-byte PBKDF2-SHA256 key を base64 エンコードして格納 (Digester.java DEFAULT_SALT_SIZE=8, DEFAULT_ITERATIONS=600000)。
ハッシュ分解と hashcat フォーマット作成
hashcat mode 10900 (PBKDF2-HMAC-SHA256)。フォーマット: sha256:<iters>:<base64_salt>:<base64_hash>。salt・hash ともに base64 エンコードが必須。
hashcat クラック
取得認証情報
sedric : snowflake1
SSH sedric → user.txt 取得
SSH 接続
user.txt 取得
user.txt
8274d238569b3e599f76dfb26a4e5faf
notif.py Flask eval() f-string インジェクション → SUID bash → root.txt
localhost:54321 の Flask サービス発見
ps auxww で /usr/local/bin/notif.py が root として起動中。ファイルパーミッションは -rwxr----- root:sedric。sedric のみ読み取り可。
notif.py ソースコード確認
eval(f"f'''{template}'''") が脆弱点。フィールドに {Python式} を埋め込むと eval で評価される。スペースは正規表現で禁止されているが、base64 エンコードで回避可能。
f-string インジェクションでコマンド実行確認
SUID bash 作成 (base64 スペース回避)
SUID bash 作成成功
/tmp/pwn — rwsr-sr-x root
root.txt 取得
root.txt
552be849004f2840d8916261281db366
全体まとめと防御側の学び
攻撃チェーンの全体像
| 段階 | 使った脆弱性 | 取得したもの |
|---|---|---|
| 1 | Mirth Connect バージョン露出 | CVE-2023-43208 特定 |
| 2 | XStream デシリアライゼーション RCE | mirth シェル / mirthdb:MirthPass123! |
| 3 | PBKDF2 ハッシュ (600000 iters) クラック | sedric:snowflake1 |
| 4 | SSH 認証情報 | user.txt |
| 5 | Flask eval() f-string injection | SUID bash / root.txt |
防御側の学び
- Mirth Connect を 4.4.1 以上に更新する: CVE-2023-43208 は 4.4.1 で修正済み。Pre-Auth RCE は最優先でパッチ適用が必要。
- mirth.properties の DB パスワード管理: プレーンテキストの設定ファイルに認証情報を書かない。環境変数や secret manager (Vault 等) で管理する。
- PBKDF2 反復回数の見直し: 600000 iters は現在 (2026) では不十分な場合あり。Argon2id への移行を検討する。
- Flask サービスでの eval() 禁止:
eval(f"f'''{template}'''")は f-string インジェクション攻撃の温床。テンプレートエンジン (Jinja2) を使用すること。 - localhost バインドでも安心しない: SSRF や内部サービスへの横展開でアクセス可能。入力検証はホワイトリスト方式で厳格に行う。

