GitHub 新增 PR 機密合併阻擋:代理憑證回應方案

GitHub 於 2026 年 9 月 9 日宣布,儲存庫規則集現在可在拉取請求引入的機密掃描警示尚未解決時阻止合併。對在 GitHub 維護代理用戶端、瀏覽器測試與資料蒐集自動化的團隊,這新增了一道審查階段控制。

明亮彩色玻璃全球網際網路流程在受保護網路前分流一個破損憑證膠囊

這是 GitHub 的公開預覽能力,並非 98IP 功能。GitHub 表示,它開放給使用 GitHub Secret Protection 或 GitHub Advanced Security 的客戶。規則能減少意外洩漏路徑,但不能讓已暴露的代理憑證恢復安全、不會自動清除歷史,也不能取代立即輪替。

公開來源說明:GitHub,《Block pull requests with exposed secrets from merging》,2026 年 9 月 9 日。

規則檢查什麼

GitHub 說明兩項合併條件:拉取請求頭提交的機密掃描已完成;拉取請求提交所引入的機密警示均已關閉。

預設情況下,規則作用於開放的拉取請求,並阻擋供應商模式識別出的機密。管理員也可選擇自訂或通用模式等類別。

設定名稱為「Require secret scanning alerts are resolved」,可在儲存庫、組織或企業規則集中設定,也能透過 GitHub 公開的 REST 與 GraphQL 表達方式管理。

它與推送防護的差異

推送防護嘗試在機密進入儲存庫前阻止推送;新規則位於 PR 合併邊界,可涵蓋推送防護未攔截或未設定攔截的情況。

應把兩者當作分層控制:本機讓機密遠離追蹤檔案;推送防護在進入儲存庫前攔截;PR 規則阻止未解決警示進入受保護分支;真正暴露後仍需撤銷、輪替、調查與清理驗證。

不能因為有 PR 規則就關閉前置防護。即使沒有合併,機密也可能已出現在分支、fork、日誌或構件中。

識別代理憑證的全部形式

代理驗證材料可能是使用者名稱與密碼、API 權杖、嵌入使用者名稱的工作階段編號、含憑證的完整代理 URL、環境檔與命令歷史、複製到夾具的 CI 變數、截圖和偵錯日誌,以及允許清單管理權杖。

不得用真實憑證建立公開自訂模式。應依記錄結構使用合成範例,同時避免把普通 URL 或 IP 位址大量誤報為憑證;過高誤報會鼓勵不安全繞過。

可搭配代理憑證輪替指南執行替換流程。

安全設定合併規則

  1. 盤點含代理用戶端、蒐集 Worker、CI 範本與基礎設施定義的儲存庫。
  2. 確認 GitHub 安全權限與機密掃描涵蓋範圍。
  3. 明確指定受保護分支和規則集範圍。
  4. 啟用「Require secret scanning alerts are resolved」。
  5. 先用供應商模式,再加入經審查的代理專用模式。
  6. 將繞過權限限制到具名緊急角色。
  7. 每次繞過必須有工單、原因和到期時間。
  8. 使用沒有正式價值的合成憑證測試。

先在少量儲存庫啟用,量測掃描時間、警示量、誤報率、解決時間和繞過頻率。不要因某個通用模式雜訊高就整體弱化規則,應調整模式與範圍。

把真實警示視為暴露事件

只要警示含真實代理憑證,即使 PR 未合併,也應假設內容可能已被複製。

1. 停止傳播

阻擋相關工作流程、移除公開構件並防止分支繼續重用。不要把值貼到聊天、Issue 或事故工單。

2. 撤銷或輪替

在供應商或內部機密管理器讓舊值失效,建立只具備工作負載需要的產品、地區、目標、並行量和期限的新憑證。

3. 查清暴露範圍

檢查提交歷史、fork、工作流程日誌、快取、發布構件、容器層、套件儲存庫與設定包。GitHub Actions 快取權限稽核可降低低信任任務儲存可重用狀態的風險。

4. 清理並驗證

從目前程式樹刪除機密,並依政策使用核准流程重寫歷史。最新檔案乾淨不能證明舊物件、fork 或構件已經乾淨。

5. 透過受管路徑恢復

使用核准的機密儲存於執行期注入新值,避免命令列參數與詳細日誌,並限制可讀取它的作業與環境。

6. 監控舊身分

在供應商遙測允許時,檢查已撤銷身分的持續嘗試、意外地區、陌生閘道、異常並行量與目的類別,只保存必要且去識別化的證據。

驗證規則確實阻擋合併

在一次性儲存庫使用合成模式:啟用測試分支規則;提交無害合成標記並開啟 PR;等待頭提交掃描;確認警示開放時無法合併;刪除標記並推送新提交;等待再次掃描;確認只有警示解決後才放行;驗證未授權使用者不能繞過;檢查緊急角色的繞過稽核軌跡。

絕不能用真實代理密碼作測試標記。即使儲存庫、日誌與截圖公開,測試也必須無害。

區分警示解決與風險解決

警示可能因撤銷、誤報、測試使用或政策接受而標記已解決,但工作流程狀態不代表風險消失。

真實憑證應關聯一份回應記錄,包含憑證與儲存庫別名、首次發現/撤銷/補發時間、歷史與構件檢查狀態、舊身分監控狀態和負責人。只保存別名,不保存機密值;記錄需要存取控制與保留期限。

治理繞過權限

規則集可有繞過主體,因此治理決定實際強度。每次繞過必須有具名核准人、事故或發布工單、狹窄儲存庫範圍與自動到期時間,並在事後檢視。

緊急正式環境修復也不應把真實憑證放進原始碼。若為誤報,應改善模式或記錄合成夾具,不能把略過警告變成習慣。

對買方與營運團隊的啟示

採購或續約代理服務前,應確認憑證能否獨立輪替、依子帳號隔離、限制地區或目標,並在不暴露值的情況下稽核。共享永久密碼會讓儲存庫暴露的代價遠高於短期、窄範圍憑證。

也要驗證輪替後舊連線不會無限期維持授權。代理池隔離與復原指南可把路由健康與憑證事故分開處理。

檢查清單

  • [ ] 推送防護與 PR 合併阻擋形成分層。
  • [ ] 受保護分支與儲存庫範圍明確。
  • [ ] 代理專用模式使用合成範例。
  • [ ] 繞過權限範圍小、可稽核且會到期。
  • [ ] 真實警示立即觸發撤銷或輪替。
  • [ ] 已檢查歷史、fork、日誌、快取與構件。
  • [ ] 新憑證具有更小範圍與生命週期。
  • [ ] 機密於執行期注入且不進入快取。
  • [ ] 合成迴歸測試證明合併門檻有效。
  • [ ] 舊身分活動只以去識別化證據監控。

常見問題

阻止合併是否代表憑證從未暴露?

不是。它可能已存在於分支、fork、日誌、快取或構件中。真實憑證即使未合併也應輪替。

新規則對所有儲存庫都可用嗎?

GitHub 表示公開預覽面向 Secret Protection 或 Advanced Security 客戶。依賴前應確認目前權限與儲存庫涵蓋。

刪除偵測到的代理 URL 而不輪替可以嗎?

不可以。刪除只減少後續暴露,既有副本可能仍存在。先撤銷或輪替,再清理與驗證。

通用機密模式能取代供應商模式嗎?

不能完全取代。它能發現未記錄格式,但誤報可能更多,需要合成資料與受控治理。

合規說明

代理憑證屬於敏感驗證資料。只使用獲准代理資源與目標,遵守儲存庫及供應商政策,最小化日誌,並執行適用的事故通知和隱私要求。不得公開機密值,也不得使用洩漏憑證測試第三方存取。