CVE复现|CVE-2026-64638复现

admin 2026-09-15 05:00:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文复现了WordPress核心预认证XSS转RCE漏洞CVE-2026-64638,源于strip_tags与KSES解析差异导致DOM注入,可窃取管理员ApplicationPassword并上传恶意插件实现远程代码执行,影响6.4至7.0.2版本。文章提供完整复现步骤,并建议用户尽快升级内核、限制登录入口暴露面、启用双因素认证并警惕插件上传。 综合评分: 85 文章分类: 漏洞分析,WEB安全,漏洞POC


CVE复现 | CVE-2026-64638复现

原创

LRT凌日 LRT凌日

凌日网络与信息安全团队LapR1skT

2026年9月12日 08:00 重庆

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

漏洞描述

近日,奇安信CERT监测到官方修复WordPress Core XSS2Shell 预认证 XSS 远程代码执行漏洞(CVE -2026-64638),该漏洞源于登录失败流程中 strip_tags() 与 KSES 对用户名的解析差异:strip_tags() 对 < 后带空格不识别为标签而放行,KSES 却将其重解析为合法 HTML,导致 DOM 注入。攻击者注入的 DOM 被登录页加载的 user-profile.js 自动交互,通过 DOM Clobbering 劫持 ajaxurl 并借助 REST JSONP 执行任意 JS。若管理员已登录,可进一步利用SOME 技术窃取 Application Password,最终上传恶意插件实现 RCE。目前该漏洞PoC和技术细节已公开。鉴于该漏洞影响范围较大,建议客户尽快做好自查及防护。

利用条件

反射型 XSS(第一阶段):无需认证,无需账户,目标 WordPress 登录页面可通过网络访问;

远程代码执行(完整链):需已登录的单站点管理员会话和攻击者能诱导管理员访问恶意页面。

影响版本

6.4<=WordPressCore<=7.0.2

漏洞复现

创建本地实验目录并进入目录,随后准备 docker-compose.yml

接着拉取 mariadb 11 与 WordPress 7.0.2 镜像

启动 Docker 靶场

执行 docker-compose up -d 启动容器,并使用 docker-compose ps 检查运行状态。最终 cve64638-db 与 cve64638-wp 均处于运行状态,WordPress 映射到 8081 端口

之后去初始化WordPress,通过访问127.0.0.1:8081,进入 WordPress 初始化页面并设置站点信息及管理员账户,并安装WordPress

安装完成后 WordPress 显示成功页面,并确认实验管理员账户 wpadmin 已创建

在容器内加载 WordPress,并检查环境类型与 Application Password 功能状态。实验中通过 WORDPRESS_CONFIG_EXTRA 设置 WP_ENVIRONMENT_TYPE=local,最终确认 Application Password 功能可用

验证命令:

1. docker&nbsp;exec&nbsp;cve64638-wp php&nbsp;-r&nbsp;'require "/var/www/html/wp-load.php"; var_dump(wp_get_environment_type()); var_dump(wp_is_application_passwords_available());'

随后初始环境中 rest_get_url_prefix() 返回 wp-json,但笔者REST API 路由有问题,固定链接结构为空,导致访问 /wp-json/ 时返回 HTML 而非 REST JSON。随后更新 permalink_structure 为 /%postname%/ 并执行 flush_rewrite_rules(),重启容器后再次验证 /wp-json/,最终得到 application/json 响应并确认存在 wp/v2 命名空间

修复命令:

1. docker&nbsp;exec&nbsp;cve64638-wp php&nbsp;-r&nbsp;'require "/var/www/html/wp-load.php"; update_option("permalink_structure","/%postname%/"); flush_rewrite_rules(); echo "done\n";'

后面修复成功后,在 WordPress 登录页面对输入处理进行测试,输入 并提交错误认证信息,观察输入是否进入错误提示区域

通过开发者工具 Elements 面板观察页面结构,可以看到输入被解析为实际的 area 元素,并出现 area#test 节点

于是去进一步在控制台检查 window.ajaxurl,观察到其被解析为页面中的 area 元素,从而验证 DOM 对 JavaScript 全局属性访问产生影响

随后对 REST API 的 JSONP 请求进行测试,Network 面板中可以观察到对应请求返回 200,并以 JavaScript 内容类型返回

而后,浏览器进一步执行 JSONP callback,页面出现 alert 结果,作为前置 JavaScript 执行行为的验证证据

接着就是对Application Password 的授权链去进行复现

管理员登录 WordPress 后访问

1. /wp-admin/authorize-application.php?app_name=CVE64638-Lab

进入 Application Password 授权页面

在开发者工具 Elements 中确认存在 id=approve 的 submit input,其 value 为“ Yes, I approve of this connection ”该元素就是后续本地测试中被定位并触发的授权按钮

从授权页面创建测试窗口:

1. window.open('/?cve64638_test=opener2','CVE64638_Test_2','width=800,height=600')

在新窗口执行 window.opener.location.href,得到授权页面 URL,说明新窗口的 opener 指向授权页面

在测试窗口执行

1. window.opener.document.querySelector('#approve').click()

Console 返回 undefined 属于 click() 无返回值的正常表现;随后授权页面生成新的 Application Password

触发授权后,WordPress 页面显示新的 Application Password

之后使用生成的 Application Password 调用 WordPress REST API:

1. curl&nbsp;-i&nbsp;-u&nbsp;'wpadmin:<Application Password>'&nbsp;http://127.0.0.1:8081/wp-json/wp/v2/users/me/

最终响应为 HTTP/1.1 200 OK,Content-Type 为 application/json;JSON 中确认 id=1、name=wpadmin,证明生成的 Application Password 已被 WordPress 接受,并能够用于 wp/v2 REST API 身份认证

综上

CVE-2026-64638 再次给整个开源生态敲响了警钟。一个存在了数个主要版本、藏在核心代码深处的解析差异,竟能在被忽视多年后,演变成影响数亿站点的攻击链。对于站长来说,除了紧盯官方补丁、第一时间升级内核之外,限制登录入口的暴露面、为管理员账号启用双因素认证、对插件上传保持高度警惕,都是眼下切实可行的加固措施。在补丁全面铺开之前,没有任何一个 WordPress 安装可以被理所当然地视为安全。

参考文章

https://pwn.ai/blog/xss2shell

免责声明:由于传播、利用本公众号凌日网络与信息安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号凌日网络与信息安全团队及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

文案|孟凡杰

排版|孟凡杰

校正|李昕洋

审核|林炳辰


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:凌日网络与信息安全团队LapR1skT LRT凌日 LRT凌日《CVE复现 | CVE-2026-64638复现》

评论:0   参与:  0