Java代码审计-flink-streaming-platform-web
字数 1812 2025-08-05 08:19:58
Flink-Streaming-Platform-Web 安全审计报告
项目概述
Flink-Streaming-Platform-Web 是一个将 Flink 封装的可视化、轻量级 Flink Web 客户端系统,用户只需在 Web 界面进行 SQL 配置就能完成流计算任务。
项目结构:
- flink-streaming-common: Flink 流计算相关公共类
- flink-streaming-core: Flink 流计算核心模块
- flink-streaming-valication: SQL 校验模块
- flink-streaming-web: Web 平台模块(用户管理、日志管理、系统配置等)
- flink-streaming-web-alarm: Web 平台报警接口
- flink-streaming-web-common: Web 平台模块公共类
- flink-streaming-web-config: Web 平台配置类
环境搭建
- 使用 Linux 系统(Flink 对 Linux 支持更好)
- 创建数据库
flink_web - 执行
docs目录下的flink_web.sql文件初始化数据库
安全漏洞分析
1. 权限绕过漏洞
漏洞位置:LoginInterceptor 类
漏洞原理:
- 拦截器首先判断请求路径是否为
/,如果是则重定向到登录页面 - 然后从 session 中取出对应值
- 判断是否为 AJAX 请求(检查请求头中是否包含
X-Requested-With且值为XMLHttpRequest) - 如果是 AJAX 请求则进行权限校验,否则跳过权限校验
利用方式:
构造非 AJAX 请求(不包含 X-Requested-With: XMLHttpRequest 头)可以绕过权限校验
PoC:
POST /api/addUser HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
name=test3&fullname=test&pwd1=test321&pwd2=test321
2. 远程命令执行漏洞
漏洞位置:CommandRpcClinetAdapterImpl#submitJob()
漏洞原理:
- 系统通过 Java 原生的
Runtime调用 Flink - 在
JobBaseServiceAOImpl的submitJobForStandalone和submitJobForYarn方法中调用了submitJob - 在
JobStandaloneServerAOImpl#start()中调用了aSyncExecJob - 最终在
CommandRpcClinetAdapterImpl#submitJob()中拼接并执行命令
关键点:
- 命令拼接过程中,
org.example.Main类名参数可控 - 系统配置中的 Flink 路径、项目配置路径等信息被写入返回值
- 需要系统已配置 Flink 相关信息才能利用此漏洞
利用前提:
- 攻击者需要有权限创建和启动任务
- 系统必须已配置 Flink 相关信息
利用方式:
- 通过权限绕过漏洞创建管理员账户
- 上传恶意 jar 包(通过第三方 jar 包管理功能)
- 创建任务时指定恶意类名(如命令注入 payload)
- 启动任务触发命令执行
命令执行流程:
/javaTocms/flink-1.9.0/bin/flink run -d -c [恶意类名] /javaTocms/tmp/udf_jar/evaljAR.jar
3. SSRF 漏洞
漏洞位置:downJar(jobRunParamDTO, jobConfigDTO) 方法
漏洞原理:
- 在下载远程 jar 包时未对 URL 进行有效校验
- 可能导致服务器向任意地址发起请求
危害:
- 探测内网服务
- 攻击内网脆弱服务
修复建议
-
权限绕过修复:
- 修改
LoginInterceptor,无论是否为 AJAX 请求都应进行权限校验 - 添加基于角色的访问控制(RBAC)
- 修改
-
命令执行修复:
- 对用户输入的类名进行严格校验(白名单机制)
- 避免直接拼接命令,使用参数化方式调用 Flink
- 限制 jar 包上传来源和内容
-
SSRF 修复:
- 限制 jar 包下载 URL 的协议和域名
- 实现 URL 白名单机制
-
其他安全措施:
- 实现完善的日志审计
- 添加输入验证和输出编码
- 定期进行安全审计和渗透测试
总结
Flink-Streaming-Platform-Web 存在多个高危安全漏洞,攻击者可利用权限绕过漏洞获取系统控制权,进而通过命令执行漏洞在服务器上执行任意命令。建议开发者立即修复这些漏洞,并在生产环境中实施严格的安全配置。