ArtiPACKED: 潛在的 GitHub Actions 安全風險
- 發布單位:TWCERT/CC
- 更新日期:2024-09-11
- 點閱次數:2693
近期Palo Alto Networks Unit 42資安研究員Yaron Avital在 GitHub Actions artifacts 發現的一種名為「ArtiPACKED」的攻擊手法 ,此攻擊可能由於Github Actions 使用不安全的設定、錯誤的設定,而導致第三方雲端服務與Github Token外洩,使攻擊者可以利用這些資訊接管整個儲存庫,甚至取得組織的雲端環境存取權限。
Github Action是Github提供的一項CI/CD服務,透過自動化的流程不僅降低錯誤率和提升維護品質,還可以同時縮短開發時間並提高效率。CI(持續整合,Continuous Integration)是指開發的程式碼送出後,會經過自動化的測試及驗證,以確保程式在正式環境上可以正常運作;CD(持續部署,Continuous Deployment)則是程式通過測試後,自動將其部署到正式環境中。以上的服務,不僅使應用程式快速更新且頻繁地發布,還能減少了手動部署過程中的錯誤。
Yaron Avital發現在Github Action的過程中,測試或執行檔案所產生Artifacts檔案,可用於在同一個工作流程中與其它的工作項目共享日誌記錄、測試結果或二進位檔案等資料。由於這些資料是公開的,並且會保留90天,這意味者攻擊者可能藉此讀取這些檔案,取得敏感資訊,其中包括 GITHUB_TOKEN及ACTIONS_RUNTIME_TOKEN,攻擊者即可進一步利用前述的Token進行攻擊活動。
在GitHub 中,經常出現兩種類型的 Token:
- GITHUB_TOKEN:是一個自動產生的憑證,用於在 GitHub Actions 工作流程中,執行針對儲存庫的認證操作。每次執行 GitHub Actions 工作流程時,GitHub 會自動產生一個 GITHUB_TOKEN,並將其設置為工作流程的環境變數。雖然 GITHUB_TOKEN 會在工作流程結束時過期,但由於 Artifacts 功能在版本 4 中的提升速度的攻擊,攻擊者可以利用競爭條件(race condition)的情況,在工作流程運行過程中下載 Artifacts,從而竊取並使用這些 Token。
- ACTIONS_RUNTIME_TOKEN:是一個JSON Web Token (JWT),通常由 GitHub Actions 在執行工作流程時自動產生。這個 Token 通常用於內部的工作流程管理,如 Artifacts 的上傳(actions/upload-artifact)和快取(actions/cache),其有效期長達六小時。如果在此期間,攻擊者能夠成功取得 Token,便可能利用該 Token 來執行惡意操作。
以下二種使用方式也可能導致Token被公開,使用者需要額外注意:
- 使用Github基本功能時,如checkout進行clone,使用者忽略使用該功能後,GITHUB_TOKEN 將被寫入本機以便執行git命令,使用者不經意將含有Token的隱藏.git檔上傳至公開Github儲存庫。
- 代碼檢查器Super-linter的log file會紀錄許多細節也替工程師提供資訊且解決問題,例如log file儲存含有Token的環境參數。當CREATE_LOG_FILE屬性被設置為True時,該操作可能導致軟體暴露在危險中。目前,Super-linter已經將環境參數從log file移除。
另外,Yaron Avital 提到,許多使用者對於 Artifact 掃描的意識普遍不足,並建議應掃描檔案中是否含有敏感資訊作為防禦此類攻擊,因此也呼籲使用者在每一個環節中都應考慮潛在的威脅,因為被利用的威脅往往是那些被忽略的小細節。事實上,許多大型知名科技公司,如 Amazon Web Services(AWS)、Google、Microsoft、Red Hat 和 Ubuntu,都面臨這種隱藏的問題。GitHub 也表示,企業應自行負責管理和保護Artifacts,以有效防範潛在的安全風險。