BrunnerCTF : WordPressed to Ro... ノート

BrunnerCTF : WordPressed to Root Writeup

このチャレンジは、PHP 8.2 / Apache 上の Debian Trixie ベースイメージで実行される、ストック WordPress 7.0.0 の Docker/Kubernetes デプロイメントを伴いました。初期アクセスは、www-data シェルを提供する既知の脆弱なプラグイン wp2shell を通じて得られました。主な目的は権限昇格であり、典型的なコンテナエスケープや SUID トリックに対して意図的に強化されており、最近の sudo CVE を示唆していました。偵察により、特定のバージョンが固定された Dockerfile が明らかになり、特にランタイムイメージに存在する gcc および libc6-dev は、権限昇格のためのオンボックスコンパイルを示唆していました。sudo の存在により、焦点は sudo ローカルルートバグに絞られました。docker-compose.yml は、デフォルトの WordPress データベース認証情報を公開しました。docker/entrypoint.sh スクリプトは重要でした。これは、最初の起動時にランダムな WordPress 管理者認証情報を生成し、Apache/PHP ワーカーのような子プロセスがアクセスできるコンテナの環境にエクスポートしたためです。テーマディレクトリ brunnerne-docs は意図的に root 所有でしたが、世界読み取り可能であり、root 実行フックの可能性のあるレッドヘリングでした。初期アクセスでは、WordPress 7.0.0 の公開エクスプロイトチェーンである wp2shell-poc が利用されました。これには、CVE-2026-63030(認証されていないブラインド SQL インジェクション)と CVE-2026-60137(管理者認証情報の回復後のプラグインアップロードによる RCE)が含まれていました。これにより、www-data としてのリバースシェルが得られました。www-data としての列挙では、異常な SUID バイナリ、ケーパビリティ、または世界書き込み可能な root 所有ファイルのない、強化された環境が示されました。sudo バージョン 1.9.15p5 が重要な情報として特定されました。/proc/*/environ での認証情報検索により WordPress 管理者認証情報が明らかになりましたが、これらは sudo のシステム認証情報ではありませんでした。sudo でそれらを使用したり、デフォルトのパスワードを使用したりする試みは失敗しました。権限昇格は、sudo 1.9.14 から 1.9.17 に影響を与える CVE-2025-32463 を使用して達成されました。この脆弱性により、任意のローカルユーザーが --chroot/-R オプションを利用して、sudoers エントリやパスワードなしでルートとして任意のコードを実行する、自己提供の chroot から攻撃者が制御する NSS 共有ライブラリをロードできるようになりました。エクスプロイトには、ルートシェルをドロップする悪意のある NSS モジュールをコンパイルし、このモジュールを指すカスタム nsswitch.conf を持つ偽の chroot ディレクトリをステージングし、次に 'sudo -R woot woot' でトリガーすることが含まれていました。これにより、ルートシェルが正常に付与され、フラグへのアクセスが可能になりました。根本原因は、初期アクセスに対する WordPress コアの認証されていない SQL インジェクションによる RCE と、権限昇格のための sudo 1.9.15p5 の脆弱性(CVE-2025-32463)でした。修正には、sudo をバージョン >= 1.9.17p1 にアップグレードすることが含まれます。主な教訓には、特権バイナリのバージョンを早期に確認することや、オンターゲットコンパイルのための gcc/libc6-dev の存在のようなヒントを認識することが含まれます。