概要
- CVE-2026-31431 (Copy Fail)脆弱性の検証とラボ構築手順の解説
- shellcode 解析から実際のエクスプロイト実行、カーネル挙動のトレースまでを詳細に記録
- rootless Podman とユーザ名前空間による特権昇格の封じ込めを確認
- strace や eBPF を活用した動作観察とその結果の考察
- uid_map によるホストとコンテナ間の権限マッピング証明
CVE-2026-31431「Copy Fail」脆弱性の実験と検証
- SELinux MCS とGitLab Runnerの安全性検討の一環としてCVE-2026-31431を題材に選定
- Theori による詳細な技術解説は xint.io/blog/copy-fail-linux-distributions を参照推奨
- 本記事では 公開エクスプロイトのshellcode解析 から rootless環境での実行、 カーネルレベルでのトレース までを網羅
- rootless Podman アーキテクチャがどのように特権昇格を封じ込めるかを実証
shellcodeの解析
- Pythonエクスプロイト に埋め込まれた圧縮・hexエンコード済みshellcodeを zlib.decompress() で展開
- ELF 64-bit実行ファイル として構成、/usr/bin/suのページキャッシュを上書き
- objdump で解析不能な最小構成(ELF golfing)
- 実際の命令列は setuid(0) → execve("/bin/sh") → exit(0) の流れ
- /bin/sh の文字列を埋め込み、execveでシェル起動を実現
実験ラボの構築
- Fedora 43 VM をvirt-installで用意、脆弱なカーネル(6.17.x系)を使用
- rootless Podman のセットアップ
- podman専用ユーザ作成
- pastaによるネットワーク設定
- Sub-UID/Sub-GIDの広範な割り当て
- Podman の動作確認コマンド例
- podman run --rm alpine echo "Rootless Podman is working!"
コンテナ内でのエクスプロイト実行
- strace によるシステムコールトレースには--cap-add=SYS_PTRACEおよび--security-opt seccomp=unconfinedが必要
- copy_fail_exp.py を事前にダウンロードし、内容を必ず確認
- コンテナ内で strace とともにエクスプロイトを実行し、詳細なシステムコールログを取得
エクスプロイトの仕組みトレース
- AF_ALGソケット を利用し、カーネルの暗号API経由でページキャッシュを不正に上書き
- sendmsg/splice の組み合わせで、/usr/bin/suのページキャッシュにshellcodeを4バイト単位で注入
- execve("/usr/sbin/su") でキャッシュ上の不正ELFを実行、 /bin/sh が起動
- これらの挙動は strace ログで逐次確認可能
rootlessコンテナによる昇格阻止
- setuid(0) 成功によりコンテナ内でroot取得
- しかし User Namespace により、コンテナ内UID 0はホスト上の一般ユーザ(例:UID 1000)にマッピング
- コンテナ内root はホスト上での特権を持たず、/etc/shadowやホストプロセスにはアクセス不可
eBPFによるカーネル動作観察
- strace ではSUIDバイナリ実行時にカーネルがsecureexec遷移でイベント報告を一時停止するため、setuid(0)拒否を直接観察できない
- bpftrace を用い、カーネルtracepointでsetuidシステムコールの入出力を監視
- strace有効時はsetuid(0)が-1(EPERM)で失敗、straceなしでは0で成功
- 成功時も User Namespace で隔離されているため、ホストへの影響なし
uid_mapによる権限マッピングの証明
- Podman のユーザ名前空間設定により、コンテナ内UID 0がホストUID 1000(podmanユーザ)に対応
- /proc/self/uid_map でマッピング状況を確認可能
- rootless運用 の安全性を数値的に証明
結論
- CVE-2026-31431 のような深刻なカーネル脆弱性も、 rootless Podman やユーザ名前空間の活用で現実的な攻撃リスクを大幅に低減可能
- straceやeBPF などのツールを併用し、カーネル挙動の可視化と検証が重要
- ダウンロードしたエクスプロイトやshellcodeは必ず内容を確認し、安易な実行を避けるべき
- rootlessコンテナ はCI/CDやランナー環境における安全な隔離手段として有効
- 今後も ユーザ名前空間 や 最小権限原則 を徹底し、システム全体の堅牢化を推進