一次失败的登录,一条完整的 RCE 链
2026 年 8 月 6 日,WordPress 7.0.3 紧急发布,官方致谢名单第一个名字是 pwn.ai。这条漏洞链后来被命名为 XSS2Shell(CVE-2026-64638),影响 WordPress 的所有版本——据 pwn.ai 自述,它存在于这个软件诞生之初,被每一轮安全审计漏过,大约覆盖 5 亿个站点。
链条的起点小得近乎荒谬:一个空格。攻击者在登录页的用户名字段里提交 < area id=ajaxurl href=…> 这样的字符串。WordPress 有两道过滤器,它们对同一段输入给出了矛盾判决。PHP 的 strip_tags() 只把 < 后紧跟字母的序列当标签,< area 中间有个空格,于是它认为这是普通文本,放行。而 KSES(WordPress 自带的 HTML 消毒引擎)有独立的 tokenizer,它把 < area 解析成允许列表中的 <area> 元素,也放行。两道门都开了,攻击者的 DOM 元素活着进入了登录页。
接下来的机关更精巧。登录页因为密码重置流程需要密码生成器,整个页面都加载了 user-profile.js——一个为后台个人资料页写的脚本。它的就绪处理器会自动点击 .wp-generate-pw 按钮;点击冒泡到 #color-picker 的委托处理器,触发一次 $.post()。攻击者注入的 <div id=color-picker class=reset-pass-submit> 正是这个脚本寻找的元素。而 ajaxurl 变量在登录页不存在,JavaScript 会沿着作用域链找到 window 上的命名属性——HTML 规范规定任何带 id 的元素都能成为 window.<id>。注入的 <area id=ajaxurl href=…> 被 jQuery 当 URL 用,toString() 返回它的 href,一次同源 POST 就这样被 WordPress 自己的脚本、攻击者注入的 DOM 和浏览器的规范三者合力生成,全程零用户交互。
POST 指向 REST API 的 JSONP 端点(_method=GET、_jsonp=callback),回调名正则允许属性链,于是 window.opener.approve.click 被拼出来:攻击者开一个子窗口提交登录表单,子窗口变成 WordPress origin 后,JSONP 回调跨窗口点击了父窗口中应用授权页的批准按钮。管理员的一次点击授权,换来一个泄露到攻击者回调页的 Application Password。凭此调用 REST API 发布带脚本的页面、抓取上传插件的 nonce、上传含 PHP 的 ZIP——插件无需激活,目录里的 PHP 文件直接可访问。PoC 里最后一行是 system('whoami') 返回 www-data。
必须说明:以上链路细节全部来自 pwn.ai 的公开文章,我逐段核对了代码引用的逻辑自洽性,但未验证其复现。链条的起点还挂着一个旧账:2022 年 Paulos Yibelo 发表的 WordPress Same Origin Method Execution 技术(Top Web Hacking Techniques 2022 提名)——pwn.ai 承认这是他们 agent 的出发点。
pwn.ai 是谁:把黑客方法论教给机器
pwn.ai 是 Octagon Networks(2019 年成立,自称 50+ 公开 CVE)的 agentic 渗透测试产品,slogan 是 POC || GTFO——给不出可用 exploit 就不报。他们的时间线相当紧凑:2025 年 12 月公布 CVE-2025-54322(Xspeeder SXZOS 固件的未认证 root RCE,影响数万台边缘路由器),并称这是首个由 agent 发现、可远程利用并公开发布的 0day RCE,文章附了带时间戳的 agent trace 日志;2026 年 3 月,agent 花了近五天自主审计 ImageMagick,找到从任意文件读到任意文件写、再到绕过 open/limited/secure 三层安全策略的完整链——包括用 EPT 魔数伪装成 .jpg、以及 GhostScript 被编译进 ImageMagick(gslib)后 delegate 策略直接失效;2026 年 4 月他们发表了一篇更像宣言的文章,主张自动化发现'尚未被文档化的攻击向量'是通往 AGI 的路径之一。XSS2Shell 是这条路上的第三站。
pwn.ai 声称 XSS2Shell 是'使用开源模型和复杂的 multi-agent 工作流、近 4 天'完成的。这里有一个值得注意的表述模糊:agent trace 日志读起来像剧本('pwn.ai thought →'),'4 天'是 agent 纯自主还是人机混合,开源模型具体是哪些,文章都没有交代。这是我标记为待核验的部分。
冷场:无人问津的 5 亿站点级漏洞
与漏洞的严重性形成鲜明反差的是社区反应。XSS2Shell 的 Hacker News 帖子获得 1 分、0 条评论;CVE-2025-54322 的帖子 2 分、0 评论;ImageMagick 研究 1 分、0 评论。作为对照,另一家安全公司(depthfirst.com)2025 年 10 月发表'我们的 AI agent 发现 Netty 0day'的帖子拿到 11 分和 4 条讨论。pwn.ai 的高调营销('BUILT TO BREACH'、'94% PORTSWIGGER')在 HN 的怀疑主义氛围里似乎触发了免疫反应——但这本身也值得记住:当 AI 发现漏洞变成公司 PR 的一部分,技术社区的默认反应可能是沉默,而不是鼓掌。
留给后续的问题:WordPress 是如何修复这条链的(KSES 的 allowlist 收窄还是登录错误消息转义)?pwn.ai 的 trace 是真实日志还是事后编排?'首个 agent 发现的 0day'这个头衔有没有遭到业内反驳?在一个 43% 互联网靠它运转的平台上,下一个 parser differential 又会出现在哪道过滤器之间。