云原生服務風險測繪分析(四):Prometheus
一、概述
Prometheus是一套開源的監控、告警、時間序列數據庫的組合工具。與Kubernetes由Google內部Borg系統演變而來相似,Prometheus由Google內部的Borgmon[6]監控系統演變而來,最初在2012年由前Google工程師Matt T. Proud于SoundCloud[5]進行研發使用并在短時間內迅速受到業界廣泛認可,后于2015年初在GitHub上開源,目前已有42.2K的Star數和7.1的Fork數。其用戶社區非常活躍,擁有將近700位貢獻者,并在多數云原生組件中被集成。
2016年5月,Prometheus成為繼Kubernetes之后第二個正式加入CNCF的項目,同年六月發布1.0版本,并與2018年8月順利畢業。Prometheus現已被眾多的企業、互聯網公司和初創公司在其微服務業務環境下使用。
本篇為云原生服務測繪系列的第四篇,主要從資產發現、資產漏洞、資產脆弱性發現三個維度對國內暴露的Prometheus進行了測繪分析,最后筆者針對Prometheus提供了一些安全建議,希望各位讀者通過閱讀此文可對Prometheus服務風險暴露情況有更清晰的認識。
二、Prometheus資產風險測繪分析
2.1 Prometheus資產暴露情況分析
借助測繪數據,我們可以了解到國內Prometheus資產地區和版本的分布情況,筆者也以這兩個維度為各位讀者進行介紹。
2.1.1 Prometheus資產地區分布
筆者從測繪數據中得到Prometheus相關資產共5908條數據,地區分布如圖1所示(資產數較少的由于篇幅原因不在圖中顯示)

圖1. Prometheus資產地區分布
筆者針對以上Prometheus資產暴露的端口情況進行了統計,如圖2所示:
圖2. Prometheus資產端口分布
由圖1,圖2我們可以得出如下信息:
國內暴露的Prometheus資產信息中有約81%的數據來源于北京市、上海市、廣東省、浙江省、香港特別行政區、江蘇省,其中北京市暴露1403條數據位居第一
國內暴露的Prometheus資產使用的端口主要分布在9090端口,9090為Prometheus Dashboard提供HTTP服務的默認端口,使用9090端口的資產數約占整體資產數的94%
2.1.2 Prometheus資產版本分布
借助測繪數據,筆者對國內暴露的Prometheus資產版本進行了分析,其分布情況如圖3所示(資產版本數較少的由于篇幅原因不在圖中顯示):
圖 3. Prometheus資產版本分布
上圖可以看出在統計的Prometheus資產中,24%的資產未獲取到具體版本信息,剩余約76%資產中,絕大多數資產暴露版本分布在2.32.1、2.34.0、2.31.1、2.26.0、2.28.1、2.27.1、2.30.3之中。
2.2 Prometheus脆弱性風險和漏洞介紹
2.2.1 脆弱性風險介紹
Prometheus的2.24.0版本(2021.1.6發布,當前版本為2.35.0)之前,Prometheus未內置認證授權等安全機制,究其原因,筆者查看了官方Q&A文檔[7],其中官方是這樣解釋的:
TLS and basic authentication is gradually being rolled out to the different components. Please follow the different releases and change logs to know which components have already implemented it.
The components currently supporting TLS and authentication are:
· Prometheus 2.24.0 and later?
· Node Exporter 1.0.0 and later
可以看出官方計劃將TLS和Basic認證機制在不同的組件中實現,目前還在進行中,并給出了當前支持認證機制的具體版本范圍,這也同時意味著在2.24.0及之前的版本中,只要用戶對外暴露Prometheus的9090端口,那么任何人都可以對Prometheus Dashboard進行未授權訪問。 雖然Prometheus在2.24.0版本后針對Dashboard引入了TLS及Basic認證方式,但由于引入時間較晚,許多企業及組織已在云上部署了Prometheus,且未及時啟用官方提供的認證機制,從而導致大量暴露在互聯網Prometheus服務存在未授權訪問風險。 通過進一步挖掘,筆者發現這些Prometheus服務存在敏感數據泄露的風險,并將一些敏感的數據接口梳理如下:
- /api/v1/status/config
訪問 該接口將返回Prometheus服務相關的配置文件內容,文件格式為YAML,該文件內容包括Alertmanager組件(Prometheus告警組件)相關的配置、告警匹配規則、Prometheus任務配置、Prometheus監控的目標節點信息等,完整的內容可參考官方文檔[4],示例配置文件如下圖所示:
圖4. Prometheus數據泄露接口返回內容1
值得注意的是,通過官方文檔[4],筆者發現該接口返回的內容定義包含basic_auth配置項,通過此配置項Prometheus可訪問到目標服務或監控服務,此配置項含有用戶敏感信息,如下圖所示:
圖5. Prometheus數據泄露接口參數定義[4]
從以上信息我們可以看出若用戶將目標服務或監控服務的認證信息寫入配置文件,將會導致敏感數據泄露。
- /api/v1/targets
訪問該 接口將返回Prometheus目標服務的當前狀態,包括活動狀態(activeTargets)、下線狀態(DroppedTargets)等,示例如下圖所示:
圖6. Prometheus數據泄露接口返回內容2
我們還可以通過“/targets”接口看到目標服務狀態的可視化UI,如下圖所示:

圖7. Prometheus數據泄露接口返回內容3
- /api/v1/status/flags
訪問 該接口將返回Prometheus配置的flag值,如下所示:

圖8. Prometheus 數據泄露接口返回內容4
其中,config.file參數提供用于存放Prometheus配置文件(該配置文件與/api/v1/status/config接口返回的配置文件信息一致)的完整目錄,若配置文件存放在/home目錄下,則可能導致系統用戶名泄露。
此外,該接口返回的內容中還包含web.enable-admin-api參數,該參數代表用戶是否可以使用其它Web Admin API的權限,默認值為false,如下所示:
圖9. Prometheus 數據泄露接口返回內容5
根據官方文檔[3],若用戶將web.enable-admin-api項參數值設為true,則將額外開啟一些管理API供操作者調用,這些管理API允許用戶刪除Prometheus所有已保存的監控指標以及關閉相應的監控功能,因而攻擊者可針對未設置認證機制的Prometheus服務進行訪問,并通過修改web.enable-admin-api項為false,直接關閉或刪除Prometheus服務提供的指標,危害巨大。
- /api/v1/status/buildinfo
訪 問該接 口將返回Prometheus服務的構建信息,其中包括Prometheus版本、Go版本、構建日期等敏感信息,如下圖所示:
圖10. Prometheus 數據泄露接口返回內容6
Prometheus于2013年開源至今,已有約9年時間,在此期間一共曝出兩個個漏洞[2],漏洞數量相對較少,從CVE編號信息我們可以看出漏洞披露時間分別在2019、2021年,根據CVSS2.0標準,兩個漏洞均為中危漏洞。CVE-2021-29622 漏洞類型為開放式重定向、CVE-2019-3826 為XSS,其中CVE-2021-29662漏洞在市面上曝光度較大,筆者也針對這兩個漏洞進行了信息匯總,其中包括公開暴露的PoC及ExP信息,如圖11所示:
圖11. Prometheus漏洞介紹
2.3 Prometheus資產脆弱性暴露情況分析
借助 測繪數據,筆者從Prometheus漏洞維度,統計了現有暴露資產的漏洞分布情況,如圖12所示:
圖12. Prometheus漏洞介紹
可以看出,在國內互聯網暴露的Prometheus資產中,有713個資產被曝出含有CVE-2021-29622漏洞(XSS), 從上圖我們也可以看出命中CVE-2021-29622漏洞的資產數約占總資產數的12%,該漏洞是個重定向漏洞,雖然對業務自身運行無影響,但重定向漏洞可用來作釣魚攻擊,仍存在一定危害。CVE-2019-3826漏洞在互聯網上并未發現有疑似暴露信息,從前面的Prometheus漏洞介紹,我們可以進一步了解這兩個漏洞,篇幅原因此處不再贅述。
2.4 安全建議
- 升級Prometheus版本為最新版本
- 升級Prometheus Dashboard使用認證機制,如Prometheus提供的Basic認證,使用TLS保證數據傳輸安全
- 禁止將用戶名密碼等敏感信息以明文形式寫入Prometheusd的配置文件中
三、總結
Pro metheus是CNCF第二個畢業的項目,也是除了Kubernetes之外被開發者普遍認為最火爆的項目,在其被大規模部署的同時,脆弱性配置及漏洞導致的風險也不容忽視,本文從測繪角度分析了國內暴露的Prometheus服務及其存在的風險,下一篇筆者將繼續針對云原生環境下的其它組件進行相應的測繪風險分析,歡迎各位讀者持續關注,若有任何問題歡迎提出,互相交流學習。
參考文獻
[1] https://security.archlinux.org/CVE-2021-29622
[2] https://www.cvedetails.com/vulnerability-list/vendor_id-20905/product_id-61503/Prometheus-Prometheus.html
[3] https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis
[4] https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config
[5] https://soundcloud.com/
[6] https://sre.google/sre-book/practical-alerting/
[7]https://prometheus.io/docs/introduction/faq/#why-dont-the-prometheus-server-components-support-tls-or-authentication-can-i-add-those
往期回顧: