YAML 錨點與別名 - YAML 錨點

YAML 錨點與別名:被忽略的攻擊面 CI/CD

YAML 錨點和別名的工作原理 CI/CD Pipelines

YAML錨點 別名是維護資料庫的強大工具。 CI/CD pipeline 定義遵循 DRY(不要重複自己)。錨點定義可重複使用的程式碼區塊(&錨),以及別名(*別名在所有引用它們的地方複製它們的內容。這適用於 GitHub Actions、GitLab CI 和 CircleCI 等常用平台。

這是一個簡單的例子:

⚠️ 此範例不安全,請勿在生產環境中使用

雖然像這樣的 YAML 模式錨點可以提高可維護性,但它們也可能抽象化重要的上下文。 CI/CD其中配置即程式碼,YAML 錨點和別名可能會悄無聲息地傳播不安全的預設值,而開發人員卻意識不到繼承了什麼。

錨點 YAML 結構中隱藏的安全風險

他們的問題在於 問題不在於文法,而是如何使用(或濫用)。諸如權限過寬、跳過驗證或硬編碼金鑰等安全設定可能會嵌入到錨點中,並在各處重複使用。

示例:

此錨點(不安全包含不安全 curl | bash 這種模式會被注入到多個作業中。即使只有一個作業本應採用不同的驗證或金鑰處理方式,現在也已被攻破。錨點的 YAML 結構 這樣在審核過程中就很容易忽略這個錯誤。

YAML錨點設定錯誤如何導致供應鏈風險

單一配置錯誤 YAML錨點 可以將不安全的邏輯級聯到多個層面 pipeline當別名的使用缺乏明確的文檔或可見性時,很容易在無意中繼承危險的行為。

考慮這個場景:

  • A .ci-templates 倉庫定義了共享錨點 建立, 部署以及 test.
  • 跨多個團隊的專案使用 <<: *建置階段 未經審查其內容。
  • 後來有人修改了錨點,使其跳過依賴項的簽名驗證。

現在每一種消費 pipeline 繼承了這種不安全的邏輯。這是一個經典的例子。 軟體供應鏈風險:不安全的模板透過靜默複製 YAML 錨點與別名.

這類漏洞並非總是能在傳統的程式碼審查中被發現。 YAML 錨點濫用隱藏在別名背後,讓漏洞難以被發現。 CI/CD 邏輯不透明。

偵測並防止不安全的錨點使用

為了降低 YAML 錨點帶來的風險,請在多個層面實施驗證:

  • CI/CD 棉絨使用支援 YAML 的程式碼檢查工具,在分析之前展開 YAML 錨點和別名。例如: actionlint 適用於 GitHub Actions 或 GitLab 的自訂程式碼檢視器。
  • 配置掃描工具使用能夠解析和分析 YAML 邏輯的工具 檢測高風險模式。
  • 擴展後檢討差異某些平台允許查看編譯後的內容。 pipeline請務必查看展開後的 YAML 文件,而不僅僅是原始檔案。
  • Guardrails設定策略以 阻止不安全配置 例如不受限制的 shell 命令或未經驗證的腳本下載。

在 DevSecOps 中保護錨點 YAML Pipelines

安全使用最佳實踐 錨點和別名 包括:

  • 盡量減少錨點避免將過多的職責塞進一個核心元件中。將邏輯拆分成多個單獨的、命名清晰的核心元件。
  • 使用明確的職位定義 在安全邊界至關重要的領域,尤其是在開發階段和生產階段之間。
  • 避免在不同環境中重複使用錨點 除非必要,否則請為開發環境、測試環境和生產環境分別定義錨點。
  • 掃描模板和繼承鏈 在集中式 CI/CD 配置倉庫。

永遠不要嵌入秘密訊息 將其錨定。務必確保安全取回。

結語

YAML 錨點和別名是提升效率的強大工具,但如果管理不善,它們會直接構成供應鏈風險。它們可能會悄無聲息地傳播不安全的預設設置,削弱階段隔離,並模糊關鍵邏輯。 CI/CD pipelines.

以確保 pipeline基於 YAML 錨點結構構建,強制執行可見性,限制錨點重複使用,並進行處理 CI/CD 配置資訊應與應用程式程式碼一樣受到嚴格審查。濫用錨點不僅僅是樣式問題,它們也是一個攻擊面。 類似的工具 Xygeni 可以偵測誤用的錨點,阻止不安全的模式,並使團隊能夠全面了解繼承的錨點。 CI/CD 在不安全程式碼投入生產環境之前,先進行邏輯檢查。

sca-tools-software-composition-analysis-tools
優先處理、補救並保護您的軟體風險
註冊免費帳號。
不需要信用卡。

確保您的軟體開發和交付安全

使用 Xygeni 產品套件