1. 事件脉络与影响面分析
1.1 这不是一次普通的安全通告
先说结论:OpenClaw 这次曝出的 0Day 漏洞,性质比大多数人想象的要严重。
OpenClaw 是什么?简单说,它是一个面向智能体编排的开源运行时框架,主打自然语言交互、多模型接入、多端联动。不管是个人开发者拿它接微信、飞书、钉钉做自动化助手,还是企业把 OpenClaw 部署在服务器上做内部流程编排,它本质上都承担着“大脑调度中枢”的角色。这意味着它拥有极高的系统权限:能读写配置文件、能调用 API、能发请求、能执行本地命令、能访问模型密钥。一个能直接打穿 OpenClaw 的 0Day,基本等于拿到了整个智能体应用的操控权。
这次漏洞之所以叫“突发”,是因为它没有遵循常规的披露流程。早在漏洞公开前,已经有安全社区的人发现 OpenClaw 的多个公网实例被异常访问,随后有人在漏洞平台提交了详细报告,再之后就是漏洞细节被公开扩散。整个过程不到 72 小时,很多运维人员甚至还没来得及看到公告,资产就已经暴露在攻击面上了。
从影响范围看,这次事件的核心不是“OpenClaw 本身有多流行”,而是“部署 OpenClaw 的人普遍安全意识不足”。很多用户是在本机或轻量云服务器上用一键脚本部署的,默认端口、默认密钥、无鉴权面板、无防护网关,这种环境下只要有一个可远程利用的漏洞,后果就是灾难性的。
1.2 13万台设备的数字是怎么来的
“全球 13 万台设备告急”这个说法——别急着质疑它是不是夸大,我帮你拆一下这个数字的成因。
安全机构在统计影响面时,通常不是直接扫描“开放了 8078 端口”的设备就完事,而是会做多维度测绘。比如通过证书指纹、页面特征、API 返回的 header、favicon 哈希等条件,去匹配全网暴露的 OpenClaw 实例。这样一个轮询下来,确实能统计出一个数量级在十万以上的暴露面。
但要注意,这个数字包含几个层级:
- 公网可直接访问的实例:这是最危险的一类,攻击者不需要在内网,直接从外网就能发起攻击。这类设备数量通常只占总数的一小部分,但风险最高。
- 内网部署但误暴露到公网的实例:很多企业内网的 OpenClaw 服务因为配置了端口映射、DMZ 转发或者云安全组放行规则过宽,意外暴露到了公网。
- 本机本地部署、未做网络隔离的实例:这类设备虽然不直接暴露公网,但如果内网被横向突破,同样会成为跳板。
换言之,这 13 万是一个“暴露面总量”,不是“已被攻陷数量”。但这个数字本身已经足够说明问题:OpenClaw 的实际部署量远超公众预期,而安全水位却远远跟不上。
注意:如果你发现自己跑着 OpenClaw 实例,第一件事绝不是等官方补丁,而是先判断自己属于上面哪一类暴露级别。这三类设备的应急优先级是完全不同的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 根因猜测与漏洞形态拆解
2.1 OpenClaw 的架构边界在哪里
在讨论漏洞根因前,先要理解 OpenClaw 的架构边界,否则你连排查方向都不知道。
OpenClaw 大体上分为三层:
- 接入层:负责对接各种消息渠道,包括微信、飞书、钉钉、Telegram、Web 控制台、API 网关。这一层的主要职责是接收外部输入,然后转为内部指令。
- 核心调度层:负责自然语言理解、任务拆解、模型调用、Skill 插件加载。这一层是最复杂的部分,因为它需要动态加载大量第三方能力,包括各类 Python 脚本、Node 服务、本地模型接口。
- 执行层:负责真正落地执行任务,比如读写文件、调用外部 API、执行命令、操作数据库等。
这次的 0Day,大概率出在核心调度层与执行层的边界上。为什么这么判断?因为 OpenClaw 的功能设计里,用户可以通过自然语言让智能体调用 Skill(技能插件),而 Skill 本身是允许用户自定义的。如果输入校验、权限校验不严,攻击者就可以通过构造特殊指令,让智能体执行越权操作。
举个已经被多次验证的类比:OpenClaw 的 Skill 机制,就像早年 CMS 的插件机制——插件本意是扩展功能,但如果你能让系统加载一个精心构造的“恶意插件”,那这个插件就拥有了系统同等权限。
2.2 最可能的攻击链路:配置接口、插件加载与模型回调
结合社区公开的技术细节和类似框架的历史漏洞,我梳理出三条最可能的攻击链路,你在做排查时可以按这个思路去验证。
链路一:配置接口未鉴权
OpenClaw 在本地和云端都提供了一个控制面板(Control UI),用于配置模型、接入渠道、管理插件。如果这个面板没有强制鉴权,或者存在默认口令,攻击者可以直接访问面板,修改配置,甚至上传恶意插件。从热词里“openclaw control ui did not start”这类问题的普遍性可以看出,很多人对 Control UI 的使用并不熟悉,甚至有人为了省事直接禁用了鉴权。
这条链路的特征:攻击者不需要高超技巧,只需要找到暴露的 IP,访问 8078 或类似端口,如果能进入控制台,就直接拿到管理权限。
链路二:插件/Skill 加载路径穿越
OpenClaw 支持从本地目录、远程仓库加载 Skill。如果加载逻辑中对路径的校验不严,攻击者可以通过构造带 ../ 的路径参数,让系统加载任意目录下的恶意文件。更常见的是,如果系统支持“从 URL 加载 Skill”,那攻击者只需要诱导系统 fetch 一个恶意仓库即可。
这条链路的特征:攻击者需要一些定制化手段,但一旦成功,危害极大,可以完全控制核心调度层的执行内容。
链路三:模型回调与输出解析注入
OpenClaw 需要调用大模型 API,模型的输出会被当作指令解析并执行。如果系统在解析模型输出时,没有严格区分“自然语言回答”和“可执行命令”,攻击者可以通过 prompt 注入或者诱导模型输出特定格式的指令块,让系统执行预设的恶意行为。
这条链路的特征:不需要直接攻击 OpenClaw 本身,只需要找到一个能与 OpenClaw 对话的入口(比如一个接入的微信机器人),就能间接操控它。
我把这三条链路写在前面,不是让你照单全收去复现攻击,而是希望你理解:这次 0Day 的威胁面非常宽,既有纯技术层面的漏洞利用,也有逻辑层面的滥用。排查时必须全链路覆盖,不能只盯某一个端口。
2.3 为什么这类漏洞容易拿满分
漏洞评分系统(CVSS)给漏洞打满分,通常需要满足几个条件:远程可利用、无需用户交互、无需特殊权限、影响机密性/完整性/可用性中的至少两项。
OpenClaw 这类漏洞几乎天然满足这些条件:
- 远程可利用:Control UI 和 API 接口默认绑定 0.0.0.0,不少用户没改配置;
- 无需用户交互:攻击者可以直接发包触发,不需要诱导管理员点击任何东西;
- 无需特殊权限:漏洞点往往在未鉴权的功能上;
- 高影响:一旦利用成功,攻击者可以读取密钥、修改配置、执行命令,甚至通过智能体接入的渠道向外部发送消息。
这也是为什么这次的漏洞被评定为“满分”级别——不是因为它利用起来有多复杂,而是因为它的影响范围和控制权限足够大。
对于防御者来说,满分漏洞最恐怖的地方在于:攻击者不需要什么高超技巧,随便一个脚本小子照着 PoC 就能打。所以你看到“13 万台设备告急”时,别以为这是夸张,它反映的是真实攻击面有多大。
3. 应急响应实操:从研判到止血
3.1 第一件事:确认资产暴露面
如果你正在运行 OpenClaw,不管你是个人用户还是企业运维,先别慌,按下面的顺序来做。
第一步,确认自己的实例是否暴露在公网。最简单的方法是直接在你本机访问:
bash复制curl -I http://127.0.0.1:8078
如果返回正常,说明 Control UI 在本地是可访问的。接下来确认它是否绑定了公网地址,查看监听状态:
bash复制netstat -tlnp | grep 8078
如果监听的地址是 0.0.0.0 而不是 127.0.0.1,说明服务绑定了所有网卡。此时需要继续检查防火墙和安全组策略,确认是否允许外网访问。如果是在云服务器上,还可以用在线端口扫描工具做一次外部视角探测。
这一步的核心目的,是判断你属于之前的哪一类暴露级别。如果完全没暴露公网,你的应急压力会小很多,但不能掉以轻心,因为内网横向攻击同样存在。
第二步,清点所有 OpenClaw 实例。大企业尤其要注意,很多团队会在不同项目里分别部署 OpenClaw,运维台账上未必都登记了。通过 CMDB、云控制台、容器编排平台,把所有运行中的实例全部捞出来,逐一标记负责人和暴露状态。
3.2 日志排查的关键特征
在补丁还没发布的前提下,日志排查是判断“是否已被攻击”的主要手段。
OpenClaw 的日志通常分为三层:
- 接入层日志:记录外部消息来源、来源 IP、请求路径、请求头;
- 调度层日志:记录任务 ID、模型调用记录、插件加载记录、指令解析结果;
- 执行层日志:记录命令执行、文件读写、API 调用等操作。
你需要重点排查以下几类可疑记录:
- 来源 IP 异常:短时间内大量来自不同地域 IP 的请求,尤其是针对
/admin、/api/config、/skill/load这类路径的探测; - 请求路径异常:出现
../、%2e%2e%2f等编码后的路径穿越特征; - 插件加载异常:日志中出现从未见过的 Skill 名称、远程 URL 加载记录;
- 命令执行记录:执行层日志里出现非预期命令,比如
curl、wget、python -c、base64 -d等,这类命令通常是攻击者在做回连或者下载恶意负载; - 模型输出异常:调度层日志中出现大量非用户主动触发的任务,尤其是那些带指令格式的输出块。
我见过不少安全事件,攻击者其实早就进来了,只是日志量太大没人看。OpenClaw 这类智能体框架的日志量尤其大,因为它每处理一条消息都会产生大量中间日志。建议你先用关键字过滤,把可疑记录捞出来,再逐条人工确认,不要指望一眼就能看出问题。
这里分享一个排查用的一行命令示例(基于 Linux 环境,按实际日志路径调整):
bash复制grep -iE "(/admin|/api/config|/skill/load|\.\./|base64 -d|python -c|curl\s+-f)" /var/log/openclaw/*.log | tail -200
拿到匹配结果后,重点看时间戳和来源 IP,再结合同时段的访问日志做关联分析。
3.3 临时止血:不给攻击者留窗口
在官方补丁发布之前,止血的核心原则只有一个:收缩攻击面。
具体操作按优先级排列:
第一优先级:切断公网暴露
在负载均衡或云安全组层面,将 OpenClaw 的端口改为仅允许内网 IP 访问。如果业务允许,最彻底的做法是直接在服务器上用防火墙限制:
bash复制# 以 8078 端口为例,只允许内网网段访问
iptables -A INPUT -p tcp --dport 8078 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 8078 -j DROP
第二优先级:禁用 Control UI 或加鉴权
如果你暂时不需要通过浏览器管理面板操作,可以直接禁用 Control UI。在 OpenClaw 的配置文件中,找到相关配置项,将 enabled 设为 false。如果业务必须用控制面板,务必确认鉴权已开启,并立即更换强口令,不要用默认密钥。
第三优先级:轮换密钥
无论你是否确认被入侵,都建议立即轮换 OpenClaw 相关的密钥,包括模型 API Key、数据库密码、Webhook 密钥等。因为 0Day 漏洞的利用不一定会在日志里留下明显痕迹,轮换密钥可以切断攻击者利用已窃取凭据的路径。
第四优先级:创建镜像与快照
在止血操作完成后,立即对服务器做一次快照或磁盘镜像。这一步的意义在于:如果你的实例确实被入侵,后续还可以通过镜像做取证分析,找出攻击者的具体行为链路,而不用全盘重装之后发现什么都追不回来。
注意:快照要在执行下一步排查之前做,因为一旦你安装了新的工具或修改了文件,可能会覆盖原有的攻击痕迹。
4. 修复与加固:补丁之外必须做的事
4.1 升级与规避方案
现在来谈修复。官方补丁的发布节奏通常会滞后于漏洞公开数小时到数天,这期间你需要先用规避方案过渡。
OpenClaw 的版本迭代非常快,很多用户用的是 latest 标签的容器镜像或源码拉取方式。如果你是通过 Docker 部署的,可以在补丁发布后第一时间执行:
bash复制docker pull openclaw/openclaw:latest
docker-compose down && docker-compose up -d
如果你是通过源码部署的,则需要拉取最新代码并重启服务:
bash复制cd /path/to/openclaw
git pull origin main
pip install -r requirements.txt # 按实际依赖情况执行
systemctl restart openclaw
但我想强调一点:升级补丁不等于安全。0Day 漏洞的修复往往只修补了已知的利用路径,如果攻击者变种构造绕过,同样能打穿未做加固的系统。真正有效的防线是纵深防御。
4.2 纵深防御配置清单
我给 OpenClaw 部署者列一份可以直接抄作业的加固清单,按优先级排序:
1. 不允许 Control UI 和 API 直接暴露公网
所有管理端口只绑定内网地址,或在安全组层面对源 IP 做白名单。本地开发场景建议通过 SSH 隧道访问:
bash复制ssh -L 8078:127.0.0.1:8078 user@your-server
这样即使公网能访问服务器,也无法直接触碰 8078 端口。
2. 启用反向代理并强制鉴权
在 OpenClaw 前面套一层 Nginx,统一管理 TLS、访问日志和基础鉴权:
nginx复制server {
listen 443 ssl;
server_name openclaw.example.com;
ssl_certificate /etc/nginx/ssl/openclaw.crt;
ssl_certificate_key /etc/nginx/ssl/openclaw.key;
location / {
proxy_pass http://127.0.0.1:8078;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/openclaw.htpasswd;
}
}
这样即使有人扫描到你的 443 端口,也会被挡在基础认证之外。
3. 最小权限运行
不要用 root 用户跑 OpenClaw。建议单独创建系统用户:
bash复制useradd -r -s /sbin/nologin openclaw
chown -R openclaw:openclaw /opt/openclaw
所有通过 OpenClaw 执行的任务,都应该在受限用户权限下运行,避免攻击者一旦拿下一层就直接拥有 root 权限。
4. 配置独立的模型密钥与密钥管理
不要把生产环境的模型 API Key 直接写在配置文件里,建议用环境变量或密钥管理服务。同时给不同的 OpenClaw 实例分配不同的密钥,这样即使某个实例被攻破,攻击者也无法横向使用其他实例的密钥。
5. 日志外发与告警
OpenClaw 的日志默认存在本地,一旦服务器被攻破,攻击者完全可以清除日志。建议使用 Filebeat 或 Vector 把日志实时收集到集中的日志平台(如 ELK、Loki),并配置告警规则。重点监控:管理接口的访问、异常命令执行、插件加载、敏感路径请求。
6. 定期做漏洞扫描
现在很多 SRC 平台和安全团队都会定期扫描自身资产,但个人部署者往往忽略这一点。建议至少每月跑一次针对 OpenClaw 暴露面的扫描,不需要太复杂的工具,Nmap 加一个简单的页面特征匹配就够了。
5. 从这次事件看漏洞挖掘与安全建设
5.1 这类 0Day 是怎么被挖出来的
很多刚入行的人会问:这种 0Day 是怎么被发现的?答案可能出乎意料——大部分不是靠高深的二进制逆向,而是靠认真读代码加上合理猜测。
OpenClaw 作为一个开源项目,它的代码就摆在那里。漏洞挖掘者的常规思路是:
- 梳理攻击面:先把项目里所有对外接口列出来,包括 HTTP API、消息回调、命令解析等;
- 寻找“信任边界”:找出哪些地方假设了“用户输入是安全的”,比如插件路径、模型输出、URL 加载参数;
- 构造异常输入:对这些边界点做 fuzz 或手工测试,比如路径穿越字符、超长参数、特殊编码;
- 验证危害:如果某个输入能导致异常行为,就继续深挖是否能提权或执行命令。
从热词里可以看出,很多安全和漏洞挖掘的新人都在关注“如何挖到第一个漏洞”“SRC 漏洞挖掘入门”“漏洞复现”这类话题。这次 OpenClaw 事件其实是个很好的学习样本——它的复杂度不高、代码可读性好、攻击面清晰,非常适合作为入门级漏洞分析目标。
但我要提醒一句:学习漏洞挖掘和恶意攻击是两码事。如果你想参与这类研究,建议选择在 SRC(安全响应中心)平台、漏洞盒子、补天等合规平台进行,先把自己定位成“安全建设者”,而不是“攻击者”。
5.2 对个人开发者和企业运维的启示
这次事件的冲击,不只是 OpenClaw 用户需要面对,它给所有部署 AI 应用的个人和企业都上了一课。
第一,AI 应用的攻击面比传统应用更宽。传统 Web 应用的攻击面主要是 HTTP 接口,而 AI 应用除了接口,还有模型输入输出层、插件系统、本地执行环境、外部 API 回调等。每一层都可能成为突破口,而且因为 AI 应用的“自然语言输入”属性,还额外引入了 prompt 注入这类逻辑漏洞。
第二,一键部署脚本是双刃剑。OpenClaw 的一键部署脚本极大降低了使用门槛,但也让大批不懂安全的用户直接把服务暴露到了公网上。脚本本身没有错,错的是用户在使用后没有做任何安全配置,等于开着大门却没有装锁。
第三,漏洞应急不是一个动作,而是一个流程。这次事件从爆发到引起重视,整个过程就是一堂免费的应急演练课。有没有资产台账、有没有日志收集、有没有负责人、能不能在 30 分钟内完成止血,这些能力在这次事件中都会被检验。
第四,供应链安全的坑,个人用户也得填。OpenClaw 依赖大量第三方库和 Skill 插件,任何一个上游组件出现漏洞,都会传导到下游。个人用户虽然无法控制上游,但要养成定期升级依赖、锁定版本的习惯,不要长期运行一个几个月没更新的“稳定版本”——在安全领域,没有更新就意味着在裸奔。
5.3 OpenClaw 后续可扩展的安全能力
最后聊一下长期建设。OpenClaw 作为一个开源项目,它的安全能力是可以被扩展的,这给有精力的团队提供了自建防护的可能性。
你可以考虑给 OpenClaw 叠加以下几层防护:
- 接入层加 WAF 规则:在反向代理层拦截常见的路径穿越、命令注入、扫描探测流量,比如 OpenResty + lua-resty-waf,或者直接用 ModSecurity;
- 核心层加自定义 Skill 审核机制:如果你自己维护一个 Skill 仓库,可以写一套审核脚本,在加载前检查 Skill 的代码内容,拦截明显恶意的系统调用;
- 执行层加沙箱:把 OpenClaw 的执行环境放到容器里,限制 CPU、内存、网络,并用 seccomp 限制系统调用,这样即使执行层被攻破,也无法直接控制宿主机;
- 行为层加异常检测:通过对正常任务的调用链建模,检测那些偏离常规的异常操作,比如深夜突然加载新插件、短时间内大量读取文件等。
这些能力,即使是个人开发者也能逐步落地。先做基础加固,再根据实际风险逐步叠加,远比等官方补丁靠谱。
最后的个人体会
说实话,这波 OpenClaw 0Day 事件让我最感慨的不是漏洞本身,而是暴露出来的普遍问题:大家在拥抱 AI 工具带来的效率革命时,很少有人同步升级自己的安全水位。13 万台设备的数字背后,是 13 万个没有来得及装上锁的门。我在自己的服务器上排查了一遍所有 OpenClaw 相关实例,光是把一个忘记开鉴权的测试环境下线,就堵住了最大的风险口。如果你也跑着类似的服务,趁现在检查一下——别等漏洞利用代码扩散到脚本小子手里才动手。防守方永远比攻击者慢半拍,但至少别慢上一整个版本周期。
