ComfyUI-Manager高危漏洞CVE-2026-22777:CRLF注入引发的AI绘画平台供应链攻击与防御
1. 项目概述一次由插件管理器引发的AI绘画平台安全风暴最近在AI绘画和Stable Diffusion社群里一个消息炸开了锅大量部署在公网上的ComfyUI服务被植入了挖矿木马导致服务器CPU/GPU资源被疯狂占用甚至被攻击者完全控制。这一切的源头都指向了一个编号为CVE-2026-22777的高危漏洞。这个漏洞并非存在于ComfyUI核心而是其最受欢迎的扩展管理器——ComfyUI-Manager。作为一名长期关注AI应用安全的研究者我第一时间对这次事件进行了深入的跟踪和分析。这次攻击的影响范围之广、利用手法之隐蔽、后续对抗之复杂都堪称近年来AI工具供应链安全领域的一个典型样本。它不仅暴露了开源AI工具在快速迭代中可能忽视的安全盲区也给所有在公网部署类似服务的开发者、研究者和爱好者敲响了警钟。本文将带你深入拆解CVE-2026-22777漏洞的成因、攻击者的完整利用链以及我们该如何有效防御和排查。2. 漏洞核心成因CRLF注入与安全配置的失守2.1 ComfyUI-Manager的角色与风险入口要理解这个漏洞首先得明白ComfyUI-Manager是干什么的。ComfyUI本身是一个基于节点工作流的Stable Diffusion图形界面其强大之处在于高度可定制化。用户可以通过安装各种“自定义节点”来扩展功能比如加载特定的模型、实现复杂的图像处理流程等。而ComfyUI-Manager就是这个生态的“应用商店”和“管家”。它提供了一个Web界面让用户可以方便地浏览、安装、更新和删除这些节点和模型。问题就出在这个“方便”上。为了提供远程管理能力ComfyUI-Manager默认会通过Web API暴露一些配置修改接口。想象一下你有一个管理后台可以通过发送特定的HTTP请求来修改系统的设置。这个设计初衷是为了便捷但却在实现上埋下了巨大的隐患。2.2 CRLF注入被忽视的“换行符攻击”漏洞的技术核心是CRLF注入。CRLF是“回车换行”Carriage Return Line Feed的缩写在HTTP协议和配置文件中\r\n这两个字符通常用来表示一行的结束和新一行的开始。在ComfyUI-Manager的某个配置修改接口中攻击者可以提交一个包含security_level参数的请求将其值设置为weak从而降低系统的安全等级。这本应是一个受控的操作。然而该接口在处理用户输入时没有对\r\n这类特殊字符进行严格的过滤和转义。攻击者可以构造一个恶意的请求在security_levelweak这个值的后面偷偷插入\r\n字符。在服务器解析这个请求并写入配置文件如config.ini时\r\n会被解释为换行符。这意味着攻击者可以在同一行内“注入”一个新的配置行。例如一个正常的配置写入可能是security_levelnormal而经过注入的恶意请求写入后可能变成security_levelweak malicious_settingenable_from_anywhere第二行malicious_setting就是攻击者通过CRLF注入凭空创造出来的新配置项。通过这种方式攻击者能够绕过正常的数据校验逻辑向配置文件中写入任意内容。2.3 安全等级的降级千里之堤的蚁穴ComfyUI-Manager设计了一个安全等级机制大概分为strict严格、normal正常、weak弱等几档用于控制用户可以执行的操作范围。例如在strict模式下可能只允许安装来自官方认证仓库的节点而在weak模式下则可能允许从任何Git仓库地址安装节点甚至允许执行pip install来安装任意的Python包。这个设计逻辑本身没有问题问题在于切换这个“开关”的权限控制过于薄弱。通过上述的CRLF注入漏洞攻击者可以远程、无需任何认证地将security_level修改为weak。一旦安全等级被降级整个ComfyUI-Manager就向攻击者敞开了大门。他们可以指示管理器从攻击者控制的恶意Git仓库安装所谓的“自定义节点”而这个节点在安装过程中就能执行任意Python代码从而实现远程代码执行RCE完全控制服务器。注意这里的关键在于“无需用户交互”。很多漏洞需要用户点击某个链接或打开某个文件而这个漏洞的攻击者只需要向暴露在公网的ComfyUI服务的特定API地址发送一个精心构造的HTTP请求即可服务器在后台就会默默执行所有恶意操作用户毫无感知。3. 攻击链全景拆解从漏洞利用到持久化控制攻击者利用CVE-2026-22777漏洞远不止于执行一次命令那么简单他们构建了一条高度自动化、层层递进且具备持久化能力的完整攻击链。我们以被称为“HitlerMiner”的挖矿木马家族为例来还原整个攻击过程。3.1 第一阶段漏洞利用与恶意节点植入攻击者首先会在公网进行大规模扫描寻找开放了8188端口ComfyUI默认端口或使用了--listen 0.0.0.0参数启动的服务。一旦发现目标便发送利用CRLF注入漏洞的请求将目标的security_level降级为weak。紧接着攻击者会通过ComfyUI-Manager的安装接口指示其从一个恶意仓库例如http://fbyavpt7.requestrepo[.]com/asdfsdfpoc.git安装一个名为asdfsdfpoc的“自定义节点”。这个节点的结构非常狡猾即时执行的安装脚本该节点包含__init__.py和install.py在本次攻击中实际文件名为injector.py。根据ComfyUI的自定义节点机制install.py会在节点安装过程中立即自动执行。这就意味着漏洞利用成功后恶意代码的执行是瞬间触发的没有给防御留下任何时间窗口。自我清理以对抗分析更隐蔽的是在install.py执行完毕后攻击者的脚本会删除该节点目录下除.git文件夹外的所有Python源文件。这样当ComfyUI服务重启时会因为找不到__init__.py而无法加载这个节点在管理界面中它看起来就像一个“安装失败”的无效节点极大地干扰了安全人员的排查。然而这并不影响已经由injector.py植入系统的后门和挖矿脚本继续运行。3.2 第二阶段核心文件注入与后门部署injector.py是这个攻击链的核心“注入器”它执行了一系列精心策划的操作环境探测与备份首先定位ComfyUI的根目录找到关键的execution.py和server.py文件并对原始文件进行备份为后续的“打补丁”做准备。依赖安装静默安装攻击所需的第三方Python包。下载后门模块从攻击者服务器下载session_utils.py这是一个功能强大的Web后门。劫持合法节点实现持久化这是非常高明的一步。攻击者会检查或创建custom_nodes/srl-nodes目录。srl-nodes本身是一个社区中存在的、允许执行任意代码的合法节点这本身也说明了这类高权限节点的风险。injector.py会下载一个恶意的init.py文件覆盖或创建srl-nodes的__init__.py。这个恶意__init__.py的内容就是加载并执行injector.py本身的代码通常以#FUCK_PUTIN这样的标记开头。由于srl-nodes是一个已安装的节点ComfyUI每次启动都会加载它从而实现了攻击代码的持久化。即使用户修复了漏洞、删除了最初的恶意节点asdfsdfpoc只要srl-nodes还在攻击代码就会在ComfyUI重启时再次被激活。Patch核心文件修改execution.py和server.py。execution.py注入挖矿管理代码。攻击者在文件末尾添加了一个manage_miner()函数并在文件顶层import时即执行调用它。这个函数会从miner_manager.py中读取挖矿配置并启动挖矿进程。server.py注入后门路由。在PromptServer类的add_routes方法尾部添加一行代码session_utils.setup_routes(self.app)。这行代码将session_utils.py中定义的后门API路由注册到ComfyUI的Web服务器中。部署守护进程下载并运行一个名为watch_dog的ELF二进制守护程序。3.3 第三阶段后门驻留与资源劫持完成注入后ComfyUI的核心文件已经被“污染”。每次服务启动都会自动执行挖矿逻辑并开启后门。Web后门 (session_utils.py)这个脚本为ComfyUI添加了一个基于Cookie认证的后门控制面板。攻击者使用一个硬编码的密钥如“hitler1488”生成认证Cookie之后便可以通过特殊的HTTP请求在Web界面上完全控制服务器包括执行任意Shell命令、上传下载文件等。这相当于给攻击者留下了一个随时可以进出的“暗门”。挖矿管理器 (miner_manager.py)负责下载和运行具体的挖矿程序。它会根据配置下载XMRigCPU挖矿针对门罗币、LolMiner或TrexMinerGPU挖矿针对Tari币等矿工并连接到攻击者指定的矿池将挖到的加密货币转入攻击者的钱包。进程守护者 (watch_dog)这是一个编译好的ELF可执行文件扮演“看门狗”和“清道夫”的角色。它的核心功能是资源保护监控系统资源持续监控CPU和GPU的使用率。白名单机制它维护一个进程白名单包括系统关键进程PID100、它自身、Docker/K8s相关进程、Python解释器路径、包含“ComfyUI”字符串的进程以及最重要的——它自己部署的矿工进程的绝对路径。清理竞争进程任何不在白名单内且消耗大量CPU/GPU资源的进程都会被watch_dog无情地终止kill。这样做的目的是确保服务器的大部分算力都用于为攻击者挖矿同时清除其他可能存在的挖矿木马竞争币种独占资源。3.4 攻击者的对抗技巧整个攻击链体现了攻击者强烈的对抗意识输出重定向injector.py将关键的错误和日志输出重定向到内存缓冲区而非标准输出避免在ComfyUI的控制台留下明显痕迹。路径随机化后期变种中矿工和配置文件路径使用Base64编码并在运行时解密同时生成随机化的绝对路径增加静态查杀的难度。痕迹清理除了删除恶意节点源文件攻击还可能尝试清理系统日志。安装远控工具在部分案例中攻击者还会下载安装tmate一个终端共享工具为自己建立一条独立的SSH隧道作为Web后门之外的备用控制通道。4. 影响评估与紧急排查指南4.1 漏洞影响范围根据网络空间测绘数据全球有数万台ComfyUI服务暴露在公网上其中运行受影响版本ComfyUI-Manager的设备均可能被攻击。由于利用简单POC已公开漏洞危害被评定为高危。受影响版本明确为ComfyUI-Manager 版本 3.39.2ComfyUI-Manager 版本 4.0.3 且 4.0.5如果你不确定自己的版本应立即进行检查。4.2 服务器入侵排查步骤如果你的ComfyUI服务暴露在公网并且近期出现无缘无故的CPU/GPU满载、风扇狂转、系统卡顿应立刻按以下步骤排查检查ComfyUI-Manager版本 进入ComfyUI的安装目录找到custom_nodes/ComfyUI-Manager文件夹查看其中的pyproject.toml或__init__.py文件确认版本号是否在受影响范围内。检查关键文件是否被篡改ComfyUI/execution.py打开文件滚动到最底部检查是否存在陌生的函数定义如manage_miner或在文件顶层有奇怪的函数调用。对比官方仓库的原始文件是最直接的方法。ComfyUI/server.py搜索session_utils这个关键词检查在add_routes方法末尾是否被添加了session_utils.setup_routes(self.app)这行代码。custom_nodes/srl-nodes/__init__.py检查该文件内容。如果该节点不是你主动安装的或者其__init__.py内容看起来是乱码、包含明显恶意代码如#FUCK_PUTIN开头或直接执行外部脚本则极有可能已被劫持。检查陌生文件在ComfyUI根目录及custom_nodes目录下查找是否存在session_utils.py、miner_manager.py、injector.py等文件。检查系统进程使用top、htop或nvidia-smi命令查看是否有未知进程长期占用大量CPU或GPU资源。常见的挖矿进程名可能被伪装但xmrig、lolMiner、trex等是典型名称。使用ps aux | grep -E ‘(watch_dog|miner)’查找可疑的守护进程和矿工程序。检查/tmp、/dev/shm或用户主目录下是否有可疑的、名称随机的可执行文件。检查网络连接使用netstat -tunlp或ss -tunlp命令查看异常的外网连接特别是连接到非常用端口如矿池常用的3333、5555、7777等端口的连接。检查是否有未知的tmate进程或相关的网络会话。查看ComfyUI日志 检查ComfyUI的输出日志看是否有关于安装未知节点、下载奇怪文件或报错srl-nodes加载失败的记录。4.3 应急响应与修复方案一旦确认被入侵应立即采取以下措施立即隔离断开受影响服务器的公网访问或直接关机防止进一步损害和数据泄露。清除恶意文件删除被篡改的execution.py和server.py从官方仓库或备份中恢复干净版本。彻底删除custom_nodes/srl-nodes目录除非你明确需要并信任该节点。删除session_utils.py、miner_manager.py、injector.py等所有已识别的恶意文件。使用kill -9命令终止所有已发现的挖矿进程和watch_dog进程并删除其对应的磁盘文件。升级与修复将ComfyUI-Manager升级到安全版本3.39.2 或 4.0.5 及以上。升级整个ComfyUI到最新版本确保其他潜在漏洞也被修复。全面排查由于攻击者可能通过后门安装了其他恶意软件或留下了其他后门建议对系统进行全盘杀毒扫描并审查所有近期新增的用户、计划任务crontab、系统服务等。重置密钥如果服务器上存有任何敏感信息或密钥如API Keys应视为已泄露立即进行轮换。5. 防御加固与安全实践建议亡羊补牢不如未雨绸缪。对于所有部署AI服务的个人和团队尤其是将服务暴露在公网的情况下必须建立基本的安全防线。5.1 基础安全配置最小化网络暴露这是最重要的原则。绝对不要使用--listen 0.0.0.0参数启动ComfyUI除非你完全清楚后果并有其他防护措施。仅在本地使用--listen 127.0.0.1或通过SSH隧道访问。修改默认端口将默认的8188端口改为其他不常见的端口可以规避大部分自动化扫描工具的探测。使用反向代理与认证如果必须提供公网访问务必使用Nginx或Apache等反向代理。将ComfyUI服务运行在本地如127.0.0.1:8188然后通过反向代理将某个域名或路径映射过去。在反向代理层配置强制HTTPS。在反向代理层配置HTTP基础认证Basic Auth或集成更强大的认证方式如OAuth为你的ComfyUI服务加上一把“门锁”。网络层访问控制如果可能在云服务器安全组或本地防火墙中将ComfyUI服务的端口访问权限限制在特定的、可信的IP地址段。5.2 软件与依赖管理保持更新定期关注ComfyUI及其常用插件尤其是Manager这类高权限插件的安全公告和更新日志及时应用安全补丁。可以订阅项目的GitHub仓库Release通知。审慎安装插件只从官方仓库或极度信任的开发者处安装自定义节点。仔细阅读节点的代码特别是install.py和__init__.py了解它究竟会执行什么操作。使用虚拟环境在Python虚拟环境venv, conda中安装和运行ComfyUI可以隔离依赖避免污染系统Python环境也便于在出问题时整体清理。最小权限原则不要使用root用户运行ComfyUI。创建一个专用的、低权限的系统用户来运行服务可以限制漏洞利用成功后攻击者能造成的破坏。5.3 主动监控与审计资源监控设置简单的监控当服务器CPU/GPU使用率在非工作时间段持续异常偏高时发出告警。文件完整性检查对ComfyUI的核心文件如execution.py,server.py计算哈希值如SHA256并定期校验或使用文件完整性监控FIM工具。日志审计启用并定期检查ComfyUI的日志关注任何异常的安装、下载或错误信息。定期安全扫描使用杀毒软件或ClamAV等工具对服务器进行定期扫描。这次CVE-2026-22777漏洞事件给热火朝天的AI应用开发泼了一盆现实的冷水。它清晰地告诉我们在追求功能强大和便捷的同时安全永远是悬在头顶的达摩克利斯之剑。对于个人开发者这意味着需要提升安全意识改变“一键部署、开箱即用”的粗放习惯对于开源项目维护者则需要在代码设计、权限控制和漏洞响应机制上投入更多精力。AI工具的普及降低了技术门槛但与之相伴的安全责任需要我们每一个参与者共同承担。