精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:云計算云安全 → 正文

GitHub主要倉庫泄露訪問令牌,代碼與云環境面臨風險

責任編輯:cres 作者:Lucian Constantin |來源:企業網D1Net  2024-08-16 10:59:32 原創文章 企業網D1Net

對一些大型公司的開源庫中GitHub Actions工作流生成的構建工件進行的分析顯示,這些工件中包含了對第三方云服務以及GitHub本身的敏感訪問令牌,此外,GitHub在今年對工件功能進行的一項改動引入了一種競爭條件,攻擊者可以利用這一點來濫用此前無法使用的GitHub令牌。
 
Palo Alto Networks的研究員Yaron Avital進行的調查發現,在數十個公共庫中存儲的工件中發現了機密信息,其中一些庫對應的項目由Google、Microsoft、Amazon AWS、Canonical、Red Hat、OWASP等大型組織維護,這些令牌提供了對各種云服務和基礎設施、音樂流媒體服務等的訪問權限。
 
“這使得惡意行為者能夠通過訪問這些工件,潛在地破壞這些機密信息所授予訪問權限的服務,”Avital在報告中寫道,“在我們此次研究中發現的大多數易受攻擊的項目中,最常見的泄露是GitHub令牌的泄露,這使得攻擊者能夠對觸發的GitHub庫采取行動,這可能導致惡意代碼的推送,通過CI/CD管道流入生產環境,或訪問存儲在GitHub庫和組織中的機密信息。”
 
機密信息如何被包含在工件中
 
GitHub Actions是一種CI/CD服務,允許用戶在GitHub或自己的基礎設施中設置工作流,以自動化代碼構建和測試,這些工作流在.yml文件中使用YAML語法定義,當庫中發生特定觸發器或事件時會自動執行。例如,新代碼提交可能會觸發一個操作來編譯和測試該代碼并生成報告。
 
Actions工作流通常會生成構建工件,這些工件可以是編譯后的二進制文件、測試報告、日志或其他執行工作流及其各個作業所產生的文件,這些工件會被存儲90天,并且可以被其他工作流或同一工作流的一部分所使用。在開源項目中,這些工件通常對所有人可見。
 
然而,在工作流執行過程中,常常會將訪問令牌臨時存儲在容器的環境變量或其他臨時文件中,以便作業能夠訪問完成所需的外部工具和服務。因此,必須格外小心,確保這些機密信息在工作流完成后不會離開該環境。
 
Avital發現的一個示例是,一個被許多項目使用的流行代碼靜態檢查工具生成了一個日志,該日志包括了環境變量;該日志隨后被保存為一個工件。代碼靜態檢查工具是靜態代碼分析工具,用于查找錯誤、漏洞和風格問題,以提高代碼質量。
 
更常見的是,通過使用actions/checkout命令創建庫的本地克隆,以執行作業時暴露了GitHub令牌。作為這一過程的一部分,會創建一個臨時的GITHUB_TOKEN并將其保存到本地.git文件夾中,以允許執行經過認證的git命令,該令牌應為臨時令牌,并在工作流完成后停止工作,但如果暴露,仍然有方法可以濫用它。
 
“根據我的觀察,用戶通常——也是錯誤地——將他們整個checkout目錄作為工件上傳,”Avital在他的報告中寫道,“該目錄包含存儲持久化GITHUB_TOKEN的隱藏.git文件夾,導致公開可訪問的工件中包含了GITHUB_TOKEN。”
 
Avital在工件中發現的另一個GitHub令牌是ACTIONS_RUNTIME_TOKEN,它在調用特定的GitHub Actions時存儲在環境變量中,例如actions/cache和actions/upload-artifact。與僅在工作流運行期間有效的GITHUB_TOKEN不同,ACTIONS_RUNTIME_TOKEN即使在工作流完成后仍然有效六小時,因此存在較大的濫用風險。
 
“我自動化了一個流程,可以下載工件,提取ACTIONS_RUNTIME_TOKEN,并使用它來替換該工件為惡意版本,”這位研究人員寫道,“后續的工作流作業通常依賴于之前上傳的工件,這類情況為遠程代碼執行(RCE)打開了大門,攻擊者可以在運行作業的Runner上執行惡意工件。如果開發人員下載并執行了惡意工件,也可能導致工作站被入侵。”
 
新的GITHUB_TOKEN競態條件
 
如前所述,GITHUB_TOKEN在工作流完成時失效,工件只有在工作流完成后才可用,然而,自今年二月起,情況發生了變化。
 
GitHub Actions Artifacts的第4版引入了在工作流運行期間通過用戶界面或API下載工件的功能,這是社區請求的一項功能,在許多情況下非常有用,例如在批準發布前審查工件,或在有許多作業的工作流中盡早獲取工件,以節省完成所有作業所需的時間。
 
但隨著Avital發現GITHUB_TOKEN經常在工件中暴露,這一新功能也引入了一個攻擊者可能利用的競態條件:如果攻擊者知道工作流何時開始,他們可以嘗試在工作流尚未完成時獲取工件并提取GITHUB_TOKEN,因為此時該令牌仍然有效。
 
成功率因工作流而異。在許多情況下,生成工件是作業執行的最后一步之一,因此下載工件、提取令牌并進行惡意操作的時間窗口非常小,然而,一些工作流在生成工件后還有更多步驟,因此只需找到這些工作流即可。正如Avital指出的那樣,已經切換到v4版本工件API的項目列表正在迅速增長,因為v3版本計劃在11月棄用。
 
為了擴大攻擊范圍和可以針對的工作流數量,這位研究人員通過創建一個惡意工作流顯著提高了攻擊的性能。該惡意工作流運行在GitHub的基礎設施上,并在目標庫中的某個工作流執行時觸發。惡意工作流每秒發送數十個API請求,以便立即檢測到工件生成并下載它。雖然工件是歸檔的,但研究人員創建了一個腳本,只提取包含令牌的git配置文件,而不是解壓整個工件,從而顯著提高了攻擊的效率。
 
緩解措施
 
為了幫助防御此類攻擊,這位研究人員創建了一個名為upload-secure-artifact的自定義GitHub操作,其他人可以將其包含在他們的工作流中,以掃描生成的工件中的機密信息,并在檢測到任何機密信息時阻止其上傳。
 
“GitHub棄用Artifacts V3應該促使使用該工件機制的組織重新評估他們的使用方式,”研究人員寫道,“根據最小權限原則減少runner令牌的工作流權限,并審查CI/CD管道中的工件創建過程。”
 
企業網D1net(hfnxjk.com):
 
國內主流的to B IT門戶,旗下運營國內最大的甲方CIO專家庫和智力輸出及社交平臺-信眾智(www.cioall.com)。旗下運營19個IT行業公眾號(微信搜索D1net即可關注)。
 
版權聲明:本文為企業網D1Net編譯,轉載需在文章開頭注明出處為:企業網D1Net,如果不注明出處,企業網D1Net將保留追究其法律責任的權利。

關鍵字:云服務

原創文章 企業網D1Net

x GitHub主要倉庫泄露訪問令牌,代碼與云環境面臨風險 掃一掃
分享本文到朋友圈
當前位置:云計算云安全 → 正文

GitHub主要倉庫泄露訪問令牌,代碼與云環境面臨風險

責任編輯:cres 作者:Lucian Constantin |來源:企業網D1Net  2024-08-16 10:59:32 原創文章 企業網D1Net

對一些大型公司的開源庫中GitHub Actions工作流生成的構建工件進行的分析顯示,這些工件中包含了對第三方云服務以及GitHub本身的敏感訪問令牌,此外,GitHub在今年對工件功能進行的一項改動引入了一種競爭條件,攻擊者可以利用這一點來濫用此前無法使用的GitHub令牌。
 
Palo Alto Networks的研究員Yaron Avital進行的調查發現,在數十個公共庫中存儲的工件中發現了機密信息,其中一些庫對應的項目由Google、Microsoft、Amazon AWS、Canonical、Red Hat、OWASP等大型組織維護,這些令牌提供了對各種云服務和基礎設施、音樂流媒體服務等的訪問權限。
 
“這使得惡意行為者能夠通過訪問這些工件,潛在地破壞這些機密信息所授予訪問權限的服務,”Avital在報告中寫道,“在我們此次研究中發現的大多數易受攻擊的項目中,最常見的泄露是GitHub令牌的泄露,這使得攻擊者能夠對觸發的GitHub庫采取行動,這可能導致惡意代碼的推送,通過CI/CD管道流入生產環境,或訪問存儲在GitHub庫和組織中的機密信息。”
 
機密信息如何被包含在工件中
 
GitHub Actions是一種CI/CD服務,允許用戶在GitHub或自己的基礎設施中設置工作流,以自動化代碼構建和測試,這些工作流在.yml文件中使用YAML語法定義,當庫中發生特定觸發器或事件時會自動執行。例如,新代碼提交可能會觸發一個操作來編譯和測試該代碼并生成報告。
 
Actions工作流通常會生成構建工件,這些工件可以是編譯后的二進制文件、測試報告、日志或其他執行工作流及其各個作業所產生的文件,這些工件會被存儲90天,并且可以被其他工作流或同一工作流的一部分所使用。在開源項目中,這些工件通常對所有人可見。
 
然而,在工作流執行過程中,常常會將訪問令牌臨時存儲在容器的環境變量或其他臨時文件中,以便作業能夠訪問完成所需的外部工具和服務。因此,必須格外小心,確保這些機密信息在工作流完成后不會離開該環境。
 
Avital發現的一個示例是,一個被許多項目使用的流行代碼靜態檢查工具生成了一個日志,該日志包括了環境變量;該日志隨后被保存為一個工件。代碼靜態檢查工具是靜態代碼分析工具,用于查找錯誤、漏洞和風格問題,以提高代碼質量。
 
更常見的是,通過使用actions/checkout命令創建庫的本地克隆,以執行作業時暴露了GitHub令牌。作為這一過程的一部分,會創建一個臨時的GITHUB_TOKEN并將其保存到本地.git文件夾中,以允許執行經過認證的git命令,該令牌應為臨時令牌,并在工作流完成后停止工作,但如果暴露,仍然有方法可以濫用它。
 
“根據我的觀察,用戶通常——也是錯誤地——將他們整個checkout目錄作為工件上傳,”Avital在他的報告中寫道,“該目錄包含存儲持久化GITHUB_TOKEN的隱藏.git文件夾,導致公開可訪問的工件中包含了GITHUB_TOKEN。”
 
Avital在工件中發現的另一個GitHub令牌是ACTIONS_RUNTIME_TOKEN,它在調用特定的GitHub Actions時存儲在環境變量中,例如actions/cache和actions/upload-artifact。與僅在工作流運行期間有效的GITHUB_TOKEN不同,ACTIONS_RUNTIME_TOKEN即使在工作流完成后仍然有效六小時,因此存在較大的濫用風險。
 
“我自動化了一個流程,可以下載工件,提取ACTIONS_RUNTIME_TOKEN,并使用它來替換該工件為惡意版本,”這位研究人員寫道,“后續的工作流作業通常依賴于之前上傳的工件,這類情況為遠程代碼執行(RCE)打開了大門,攻擊者可以在運行作業的Runner上執行惡意工件。如果開發人員下載并執行了惡意工件,也可能導致工作站被入侵。”
 
新的GITHUB_TOKEN競態條件
 
如前所述,GITHUB_TOKEN在工作流完成時失效,工件只有在工作流完成后才可用,然而,自今年二月起,情況發生了變化。
 
GitHub Actions Artifacts的第4版引入了在工作流運行期間通過用戶界面或API下載工件的功能,這是社區請求的一項功能,在許多情況下非常有用,例如在批準發布前審查工件,或在有許多作業的工作流中盡早獲取工件,以節省完成所有作業所需的時間。
 
但隨著Avital發現GITHUB_TOKEN經常在工件中暴露,這一新功能也引入了一個攻擊者可能利用的競態條件:如果攻擊者知道工作流何時開始,他們可以嘗試在工作流尚未完成時獲取工件并提取GITHUB_TOKEN,因為此時該令牌仍然有效。
 
成功率因工作流而異。在許多情況下,生成工件是作業執行的最后一步之一,因此下載工件、提取令牌并進行惡意操作的時間窗口非常小,然而,一些工作流在生成工件后還有更多步驟,因此只需找到這些工作流即可。正如Avital指出的那樣,已經切換到v4版本工件API的項目列表正在迅速增長,因為v3版本計劃在11月棄用。
 
為了擴大攻擊范圍和可以針對的工作流數量,這位研究人員通過創建一個惡意工作流顯著提高了攻擊的性能。該惡意工作流運行在GitHub的基礎設施上,并在目標庫中的某個工作流執行時觸發。惡意工作流每秒發送數十個API請求,以便立即檢測到工件生成并下載它。雖然工件是歸檔的,但研究人員創建了一個腳本,只提取包含令牌的git配置文件,而不是解壓整個工件,從而顯著提高了攻擊的效率。
 
緩解措施
 
為了幫助防御此類攻擊,這位研究人員創建了一個名為upload-secure-artifact的自定義GitHub操作,其他人可以將其包含在他們的工作流中,以掃描生成的工件中的機密信息,并在檢測到任何機密信息時阻止其上傳。
 
“GitHub棄用Artifacts V3應該促使使用該工件機制的組織重新評估他們的使用方式,”研究人員寫道,“根據最小權限原則減少runner令牌的工作流權限,并審查CI/CD管道中的工件創建過程。”
 
企業網D1net(hfnxjk.com):
 
國內主流的to B IT門戶,旗下運營國內最大的甲方CIO專家庫和智力輸出及社交平臺-信眾智(www.cioall.com)。旗下運營19個IT行業公眾號(微信搜索D1net即可關注)。
 
版權聲明:本文為企業網D1Net編譯,轉載需在文章開頭注明出處為:企業網D1Net,如果不注明出處,企業網D1Net將保留追究其法律責任的權利。

關鍵字:云服務

原創文章 企業網D1Net

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 西乌珠穆沁旗| 兴义市| 大城县| 海南省| 尼木县| 平阴县| 惠来县| 柳林县| 衡南县| 盐津县| 华亭县| 龙川县| 会昌县| 根河市| 虎林市| 宜宾县| 景宁| 吉隆县| 浠水县| 牡丹江市| 尖扎县| 通河县| 万安县| 手机| 尉氏县| 平安县| 育儿| 丰县| 灵宝市| 宁远县| 商河县| 苍山县| 虹口区| 满洲里市| 巍山| 巴塘县| 木兰县| 定南县| 永仁县| 青海省| 铜陵市|