简介
ComfyUI是一款基于节点式工作流的Stable Diffusion专业图形界面,是开源AI绘画领域的核心项目之一。ComfyUI-Manager是ComfyUI的官方扩展管理器,负责管理自定义节点、模型和更新的安装。
在v3.38版本之前,ComfyUI-Manager的数据与配置目录存储在user/default/ComfyUI-Manager/下,该目录通过ComfyUI的/userdata/Web API暴露,没有任何访问限制。攻击者可以通过该API直接读取和覆写config.ini文件,将security_level设置为weak以禁用安全限制。结合/api/manager/reboot接口重启服务和/customnode/install/git_url接口安装恶意自定义节点,攻击者可以在服务器上实现远程代码执行。该漏洞已在ComfyUI-Manager v3.38版本中通过引入"系统用户保护API"得到修复,所有配置数据被迁移至受保护的__manager目录,该目录无法通过/userdata/API访问。
环境搭建
版本:3.37
cd vulhub/comfyui/CVE-2025-67303
docker-compose up -d
访问:http://ip:8188
复现
git http服务
需要evil-git-server.py开启一个git http服务,或者在GitHub上传文件
python evil-git-server.py
url:http://10.223.201.136:9999/evil-node-wc1tdl
覆盖config.ini
需要通过 /customnode/install/git_url接口安装自定义节点,安装过程中节点内的恶意代码会立即执行,完成RCE
但一般/customnode/install/git_url接口受安全限制保护,直接尝试安装自定义节点会返回403
此时绕过403需要将安全等级降到 weak,而攻击者可以直接通过 **/userdata/**路径读取 config.ini
/userdata/ComfyUI-Manager/config.ini路径中 **"/userdata/"**之后的斜杠 **"/"**需要url编码,即:/userdata/ComfyUI-Manager%2Fconfig.ini
否则返回404
在同样的路径下,使用POST方法覆盖掉原来的 config.ini,将配置中"security_level = normal"的"normal"修改为"weak"
重启配置生效
此时配置还未生效,需要重启
通过 /manager/reboot路径重启
没有任何回显,一经发送立即执行,等待到重启成功后再发送安装自定义节点数据包
安装自定义节点
通过 /customnode/install/git_url接口安装自定义节点
在开启的服务记录中可以看到安装记录
回到docker中验证
防御
临时防御
- 升级ComfyUI-Manager插件:立即升级到v3.40+版本
- 版本验证:确认当前使用的ComfyUI-Manager版本为非v3.37
修复
- 修复config.ini读取逻辑缺陷
- 删除weak级别无条件放行的漏洞逻辑
- 强化接口参数过滤机制
- 完善权限校验流程
长期防御
- 最小权限原则:ComfyUI服务应以最低必要权限运行
- 网络隔离:生产环境应限制ComfyUI实例的外网访问
- 定期更新:建立插件和核心组件的定期更新机制
- 安全审计:对自定义节点和插件进行安全代码审查