Jenkins插件漏洞分析
- 2019 年 10 月 7 日
- 筆記
Jenkins是一個廣泛使用的開源自動化伺服器,它允許DevOps開發人員高效、可靠地構建、測試和部署軟體。
為了充分利用Jenkins的模組化架構,開發人員利用插件來擴展其核心功能。截至目前,Jenkins的插件索引中有1600多個社區貢獻的插件。其中一些插件存儲未加密的純文本憑據。在數據泄露的情況下,網路犯罪分子可以在用戶不知情的情況下訪問這些資訊。
我們將專門討論以下資訊泄露漏洞以及受影響的相應插件:

在撰寫本文時,Port Allocator、testlink和caliper-ci插件中的漏洞尚未修復。當前版本的eggplant插件已棄用。
訪問存儲的憑據
可以利用Jenkins插件漏洞獲取用戶憑據。當具有擴展讀取許可權或訪問主文件系統的用戶憑據泄漏時,攻擊者也可訪問其他集成服務,尤其是當用戶對不同平台或服務使用相同的密碼時。
插件配置通常以XML文件的形式存儲在$enkins_home/job s/new job/config.xml。如果憑證是插件配置的一部分,那麼它們應該以加密的形式存儲,而對於Gogs, Port Allocator, Caliper CI, TestLink, and eggPlant插件則不是這樣。
憑證存儲在未加密的純文本中:
存儲憑據的正確方法是將其委託給第三方憑據提供程式,然後由配置文件中的CredentialSid引用該插件。
如果用戶能夠讀取配置文件,則只能查看CredentialSid引用,實際憑證存儲在引用中。

包含在默認建議插件列表中的憑據插件用於存儲加密的憑據。以下描述了憑據存儲的詳細資訊。

此插件將加密的憑據存儲在$jenkins_home/credentials.xml中。

在上面的示例中,密碼存儲以base64為編碼。通過使用base64解碼器,我們可以觀察到某些不可列印的字元被編碼。

事實上,加密的密碼和加密元數據是使用base64編碼的。
用於解密的密鑰是在Jenkins中硬編碼的。Jenkins的不同安裝會導致不同的key。密鑰被加密存儲在$jenkins_home/secrets/hudson.util.secret文件中。hudson.util.secret文件是通過aes使用從主密鑰派生的密鑰加密的,這在每個jenkins安裝中也有所不同。
這意味著,保護$jenkins_home/secrets目錄對於防止泄露存儲的憑證至關重要。在master上執行作業或構建可能會影響Jenkins的整體安全性,例如安裝插件、創建新作業、讀取和刪除憑據以及其他私有數據。在master上運行的作業還可以授予較低訪問許可權,並允許其使用shell命令列印數據。
安全建議
以純文本形式存儲的憑證可能構成直接威脅。但是,管理員還應該記住,有權訪問$enkinsu home/hudson.util.secret和$jenkinsu home/secrets/master.key是用於解密保存的密碼的文件,它們的暴露會使攻擊者對存儲的密碼進行解密。
像所有DevOps工具一樣,Jenkins應該考慮到安全性。在其默認設置中,Jenkins不執行安全檢查。因此,Jenkins建議用戶執行最佳實踐,包括對用戶進行身份驗證、強制訪問控制,而不是在大型系統的主節點上構建。
如果作業必須在主節點上運行,Jenkins建議使用作業限制插件,該插件可以基於用戶許可權限制作業執行或節點配置。