跳到正文
Hacker News (official RSS)(mongodb.com)·· 1 小時前精選AI 評分76

在中國 Gitee 掃描 7.25M 倉庫發現 26,400 個即時憑證

26,400 live credentials found scanning 7.25M repos on China's Gitee

AI 導讀

核心導語:本研究掃描中國最大 Git 平臺 Gitee 7,256,531 個公開倉庫,發現 26,400 個經驗證的即時憑證,憑證密度遠高於 GitLab 與 Bitbucket。

推薦理由

本研究揭示 Gitee 7.25M 公開倉庫中 26,400 個即時憑證,密度遠超 GitLab/Bitbucket,凸顯中國主機平臺安全風險。

正文 · AI 翻譯

本篇客座文章由獨立安全研究員 Ben Zimmermann 撰寫,並與 MongoDB 的 Kingfisher 團隊合作完成。Ben 專精於跨公共原始碼託管平臺的大規模憑證曝光研究。

TL;DR: 我掃描了 Gitee(中國最大的本土 Git 託管平臺)上的 7,256,531 個公開倉庫,使用 TruffleHog 和 Kingfisher,並發現 26,400 個獨特的已驗證且活躍的憑證。發現包括一個主要企業 AI 平臺的活躍組織管理員憑證,以及數千個雲服務提供商的活躍存取金鑰。

什麼是 Gitee?

Gitee 於 2013 年由 OSChina 釋出,並被中國工業和資訊化部選為國家開源程式碼託管平臺。其公開 API 與 GitHub、GitLab 相比受到嚴重限制:沒有分頁的專案端點,且站內程式碼搜尋功能似乎已在數年前被淘汰。2021 年的嘗試研究 Gitee 上的憑證曝光結論是其 API 過於有限,無法擴充套件此研究。

像任何大型 Git 平臺一樣,它是憑證曝光的吸引面:

  • 它是基於 Git 的,因此深藏於提交歷史中的機密會持續存在。
  • 它託管數以百萬計的公開倉庫,且有活躍的提交量。
  • 它沒有像 GitHub 上已成為標準的平臺‑供應商機密掃描合作夥伴關係的公開等價物。

列舉數百萬個 Gitee 倉庫

Gitee 的公開 API 受到嚴重限制,因此列舉數百萬個倉庫需要結合多個表面:唯一能在大規模返回有用資料的官方 REST 端點、平臺的 Explore 訂閱、網站上每位使用者的倉庫和星標頁面,以及支援站內搜尋 UI 的 Gitee 內部 Elasticsearch 小工具。

啟動使用者名詞典

唯一能在大規模返回有用資料的官方 REST 端點是 GET /api/v5/search/users?q=。我以三字母字首查詢(aaa、aab、…、zzz)傳送請求,並將結果與從公開 Explore 訂閱(/explore/all?order=starred|popular|updated)提取的使用者名結合。接著,我通過每位使用者的關注列表和熱門倉庫的星標者擴充該集合。這產生了一個種子名詞典,包含 1,704,759 個使用者名。

在前端抓取每位使用者頁面

手握使用者名詞典後,兩個每位使用者頁面可取得倉庫:gitee.com/{user}/projects(使用者自己的倉庫)以及 gitee.com/{user}/stared_projects(使用者已星標的倉庫)。/projects 的第 1 頁返回完整 HTML;後續頁面為 AJAX 分頁(X-Requested-With: XMLHttpRequest)。在使用者名詞典啟動期間使用的星標者列表頁面以相同方式分頁,且還需從第 1 頁 HTML 提取 CSRF 令牌。

查詢站內搜尋小工具

平臺的大量內容位於社交圖之外。為了存取它,我使用了支援 Gitee 站內搜尋 UI 的同一個內部 Elasticsearch 端點:so.gitee.com/v1/search/widget/wong1slagnlmzwvsu5ya。它接受查詢 ID、q 引數,並透過 from + size 進行分頁:

未格式化

程式碼片段

每個查詢每頁最多返回 20 個結果,且總結果上限硬性為 200 個結果(from + size <= MAX_RESULTS),無論實際匹配數量多少。對於特定使用者名,通常沒問題;對於常見使用者名和對小工具進行三字母字首查詢時,該上限會悄悄截斷結果。

通過分桶拆分來突破 200 結果上限

小工具的回應包含 Elasticsearch 聚合,按語言(程式語言)和授權(許可證)將結果分組。對於每個使用者名的抓取,當查詢被限制時,我會按回應已返回的語言分桶進行拆分:

Unformatted

Code Snippet

對於針對小工具的三字母字首查詢(用於顯示我發現的未與任何使用者關聯的倉庫),我將其擴充套件為對查詢樹的 BFS:被限制的節點首先按語言拆分,然後按授權拆分,最後按更深的字首拆分,直到每個分支都符合 200 結果的限制。

在跨所有來源去重倉庫 ID 後,產生了 7,256,531 個唯一公開的 Gitee 倉庫作為工作集。

構建掃描管線

下一個挑戰是克隆並掃描 7.25 百萬個倉庫。為了在單一 Python 指令碼中完成此任務,我使用了Modal,一個受 AI 工作負載歡迎的無伺服器計算平臺,但也非常適合大多數並行工作。我同時對每個倉庫執行 TruffleHog 和 Kingfisher 以提高覆蓋率。兩者各自驗證對方忽略的憑證,因而同時執行比單獨執行能捕捉到更多暴露的憑證。

圖 1. 雙掃描器管線架構。

Docker 映像檔

此容器映像為多階段構建,將兩個掃描器二進位制檔從各自的上游發布拉取到單一 Python 基礎映像中,並加入 git 和 OpenSSH 用於克隆:

Unformatted

Code Snippet

每個倉庫掃描函式

一個 Modal 函式透過 SSH 直接克隆每個倉庫,並同時以子程序方式對同一磁碟克隆執行兩個掃描器:

Unformatted

Code Snippet

以批次方式分發 7.25 百萬個倉庫

我將語料庫拆分為 50 個約 150K 個倉庫的批次,並以 350 個並發容器穩定地順序執行。較小的批次在此規模下更安全,也更容易在中斷後恢復;較大的批次則不穩定,且可能在克隆端遇到阻塞。

成本與規模

總牆面時間:約一個月的連續執行。每個倉庫的克隆時間是主要因素:Gitee 的伺服器位於中國,跨太平洋的網路距離以及 SSH 協議開銷使每次克隆比等效的 GitHub 克隆慢得多。總成本為 $3,097.64,完全由 Modal 提供的 $5,000 計算信用贊助承擔,支援此研究。相同的 Modal + 雙掃描器架構可對大多數 Git 主機使用,只需更換克隆 URL。 我在先前對 Algolia DocSearch 管理金鑰的調查中使用了此方法的較小規模版本。

結果

在掃描的 7,256,531 個公開 Gitee 倉庫中,雙掃描器管線在按 token 值去重後,呈現了 26,400 個唯一、已驗證且仍有效的憑證。

兩個掃描器在掃描時會將每個候選者對應其供應商的 API 進行驗證(TruffleHog 的 --only-verified 和 Kingfisher 的 --only-valid 模式),並丟棄任何雖符合模式但驗證失敗的專案。26,400 的數字已按原始秘密值去重,因此跨倉庫或掃描器的重複專案僅計算一次。

掃描器唯一發現
TruffleHog12,737
Kingfisher14,664
雙方捕捉到1,001
總唯一憑證26,400

單一掃描器僅能偵測到這些憑證的大約一半。兩種工具的偵測覆蓋率主要互補:TruffleHog 在阿里雲鑰匙偵測方面佔優勢(9,428 vs. 993),而 Kingfisher 在 DeepSeek(2,940 vs. 230)、OpenAI(1,198 vs. 150)、HuggingFace(154 vs. 1)以及 TruffleHog 沒有偵測器的中國 AI 服務如 Zhipu(1,489 vs. 0)方面佔優勢。

型別別的機密

最常見的洩漏憑證型別是阿里雲 AccessKey 對:大約 每 766 個 Gitee 倉庫就有 1 個 內含已驗證的即時阿里雲憑證。

圖 2. 按供應商分類的憑證。

剩餘部分則由大量其他供應商(LangSmith、OpenWeather、Algolia、PostHog、OpenRouter、MySQL、Stripe、Slack、Twitter 等)構成。

按日期提交的機密

絕大多數已驗證的即時憑證是在過去兩年內提交的。僅 2025 年就佔 12,242 個獨特憑證,接近整個資料集的一半。

圖 3. 按年份提交的獨特憑證。

按提交者電子郵件域名的機密

大多數憑證來自個人郵件服務(qq.com、163.com、gmail.com),使得大規模下難以按公司歸屬。以下列出的企業域名數量為最低值;即便如此,名稱仍涵蓋中西方主要科技公司。

圖 5. 按提交者電子郵件域名的獨特憑證。

較小的企業足跡也出現在 Oracle、Apple、Meta、Anthropic 等,以及中國商業和學術域名中。

將 Gitee 與 GitLab 和 Bitbucket 比較

最近的先前資料點來自TruffleSecurity 對 5.6 百萬個公開 GitLab 倉庫的掃描,以及該貼文中提及的同伴 Bitbucket 掃描。

平臺掃描的倉庫已驗證的即時憑證每千倉庫
Bitbucket~2,600,0006,2122.39
GitLab~5,600,00017,4303.11
Gitee7,256,53126,4003.64

Gitee 在原始數量和每倉庫密度上均超越兩個西方平臺。方法論說明:TruffleSecurity 的掃描僅使用 TruffleHog,而本次掃描則結合了 TruffleHog 和 Kingfisher。TruffleHog 的偵測庫偏向西方供應商,而 Gitee 擁有大量中國供應商活動(阿里雲、DeepSeek、Zhipu 等),Kingfisher 的覆蓋幫助發現這些;若僅保留 TruffleHog 的結果,Gitee 的密度為每千倉庫 1.76。

披露

我已向本次掃描中暴露量最高的供應商傳送電子郵件,為每個供應商提供一份協調報告,包含其服務相關的完整已驗證即時憑證清單,以及來源倉庫元資料,協助其歸屬受影響的客戶。

以開發者為單位的通知(逐一聯絡每個洩漏憑證的提交者)在此規模下未被追蹤。供應商側的撤銷是更可靠的途徑,因為它不需要洩漏憑證的使用者採取任何行動。

撰寫時,已披露憑證的撤銷狀態尚未確認。

總結

  • Gitee 是一個重要的憑證暴露面。 7.25M 倉庫中有 26,400 個已驗證即時憑證。每倉庫密度高於 GitLab 和 Bitbucket 的可比公開掃描。
  • 主要科技公司出現在提交者元資料中,中西方皆有。 範圍涵蓋華為、字節跳動、Google、Microsoft、Oracle 等,表明這不是純粹的中國開發者現象。
  • 披露路徑不對稱。 西方公司通常有漏洞賞金計畫或可存取的安全管道。大多數中國公司沒有,導致洩漏的憑證缺乏明確的修復途徑。
  • 架構可攜帶。 相同的 Modal + 雙掃描器流程在大多數 Git 主機上即可使用,只需將 clone-URL 進行替換;完整掃描的成本約為 3,000 美元。