关注公众号回复“漏洞”获取研究环境或工具
最近一直在看WordPress核心框架及主流插件一些好玩的漏洞,今天继续给小伙伴们分享一个主流SEO插件的RCE漏洞。
All in One SEO Pack是2007年开始的原始WordPress SEO插件。超过300万智能网站所有者使用AIOSEO正确设置WordPress SEO,因此他们的网站可以在搜索引擎中排名更高。
All in One SEO Pack v4.1.0.1及以下版本存在PHP反序列化漏洞,编号为CVE-2021-24307,漏洞信息如下:
CVE-2021-24307
https://wpscan.com/vulnerability/ab2c94d2-f6c4-418b-bd14-711ed164bcf1?__cf_chl_f_tk=1wUrhkwBGjH0Xvgz5ZYlha_0lFnfe9WDRSB9L9jmAto-1642330887-0-gaNycGzNBxE
反序列化触发分析
下载插件:
all-in-one-seo-pack v4.1.0.1
https://downloads.wordpress.org/plugin/all-in-one-seo-pack.4.1.0.1.zip
安装并激活:
环境搭建完毕后,我们就可以开始愉快的漏洞分析之旅。
All in One SEO Pack插件自定义了一套Restful API接口(`AIOSEOPluginCommonApi`):
接口前缀规则是`aioseo/v1`,`$routers`定义了一组路由规则:
关注其中的一个POST请求规则`setting/import`:
'settings/import'=> [ 'callback' => [ 'Settings', 'importSettings' ], 'access' => 'aioseo_tools_settings' ]
处理代码位于`AIOSEOPluginCommonApiSettings#importSettings`函数:
这是一个处理文件上传请求的接口。当`Content-Type`类型为`application/octet-stream`时,处理代码如下:
进入`importIniData`函数:
通过`rn`等分割处理请求数据包并对格式进行整理,经过一系列处理后,将通过`foreach`循环调用`convertAndSanitize`:
这里存在反序列化处理过程,进入函数`maybe_unserialize`:
回顾上面参数的处理过程,通过调试我们可以构造如下请求,可控参数最终进入了`unserialize`函数:
完整调用栈如下:
上面的请求对应的用户操作界面如下所示:
从上面分析可知,触发反系列化处理的数据是完全可控的。下面要做的事情就是寻找一条反序列化Gadget链。
Gadget构造
WordPress核心框架不存在可以直接使用的利用链,所以我们将注意力主要放在插件本身的代码上面:
All in One SEO Pack插件集成了Monolog,可以借鉴PHPGGC工具构造gadget:
这里需要注意的是All in One SEO Pack中的Monolog通过PSR-4定义了自己的自加载方式:
因此我们构造恶意类时,需要修改namespace:
生成载荷的代码如下:
如果有小伙伴对完整生成命令执行载荷的代码感兴趣,请关注公众号后私聊本人进行交流。最终成功触发RCE:
修复方式
将`maybe_unserialize`函数替换成了`maybeUnserialize`:
public function maybeUnserialize( $string ) {
if ( ! is_string( $string ) ) {
return $string;
}
$string = trim( $string );
if ( is_serialized( $string ) && false === $this->stringContains( $string, 'O:' ) ) {
// We want to add extra hardening for PHP versions greater than 5.6.
return version_compare( PHP_VERSION, '7.0', '<' )
? @unserialize( $string )
: @unserialize( $string, [ 'allowed_classes' => false ] ); // phpcs:disable PHPCompatibility.FunctionUse.NewFunctionParameters.unserialize_optionsFound
}
return $string;
}
对序列化字符串加强了检查。
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
关注公众号回复“漏洞”获取研究环境或工具
原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论