【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造

admin 2022年1月17日00:34:11安全漏洞评论110 views2079字阅读6分55秒阅读模式

关注公众号回复“漏洞”获取研究环境或工具


最近一直在看WordPress核心框架及主流插件一些好玩的漏洞,今天继续给小伙伴们分享一个主流SEO插件的RCE漏洞。




漏洞信息


All in One SEO Pack是2007年开始的原始WordPress SEO插件。超过300万智能网站所有者使用AIOSEO正确设置WordPress SEO,因此他们的网站可以在搜索引擎中排名更高。


【最新漏洞预警】CVE-2021-24307 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


安装并激活:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


环境搭建完毕后,我们就可以开始愉快的漏洞分析之旅。


All in One SEO Pack插件自定义了一套Restful API接口(`AIOSEOPluginCommonApi`):


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


接口前缀规则是`aioseo/v1`,`$routers`定义了一组路由规则:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


关注其中的一个POST请求规则`setting/import`:


'settings/import'=> [ 'callback' => [ 'Settings', 'importSettings' ], 'access' => 'aioseo_tools_settings' ]


处理代码位于`AIOSEOPluginCommonApiSettings#importSettings`函数:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


这是一个处理文件上传请求的接口。当`Content-Type`类型为`application/octet-stream`时,处理代码如下:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


进入`importIniData`函数:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


通过`rn`等分割处理请求数据包并对格式进行整理,经过一系列处理后,将通过`foreach`循环调用`convertAndSanitize`:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


这里存在反序列化处理过程,进入函数`maybe_unserialize`:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


回顾上面参数的处理过程,通过调试我们可以构造如下请求,可控参数最终进入了`unserialize`函数:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


完整调用栈如下:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


上面的请求对应的用户操作界面如下所示:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


从上面分析可知,触发反系列化处理的数据是完全可控的。下面要做的事情就是寻找一条反序列化Gadget链。




Gadget构造


WordPress核心框架不存在可以直接使用的利用链,所以我们将注意力主要放在插件本身的代码上面:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


All in One SEO Pack插件集成了Monolog,可以借鉴PHPGGC工具构造gadget:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


这里需要注意的是All in One SEO Pack中的Monolog通过PSR-4定义了自己的自加载方式:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


因此我们构造恶意类时,需要修改namespace:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


生成载荷的代码如下:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


如果有小伙伴对完整生成命令执行载荷的代码感兴趣,请关注公众号后私聊本人进行交流。最终成功触发RCE:


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造




修复方式


【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造


将`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插件反序列化漏洞分析与利用链构造

关注公众号回复“漏洞”获取研究环境或工具

原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月17日00:34:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【最新漏洞预警】CVE-2021-24307 WordPress主流SEO插件反序列化漏洞分析与利用链构造 https://cn-sec.com/archives/739887.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: