WordPress Core SQL注入缝隙(CVE-2022–21661)分析

颁布功夫 2022-01-25

缝隙概述


WordPress是目前全球盛行的三大内容治理系统之一,,,,,,,其主题�?????椋–ore)出现缝隙的情况相对较少。。。。。。近期,,,,,,,WordPress主题�?????楸慌洞嬖谝淮QL注入缝隙(CVE-2022–21661)。。。。。。针对该高危缝隙,,,,,,,8827太阳集团ADLab钻研员第一功夫进行了具体分析和验证。。。。。。


受影响版本


受影响版本:WordPress < 5.8.3


缝隙分析


通过比力github上的源代码,,,,,,,能够发现缝隙的地位是clean_query函数。。。。。。在5.8.2及之前的老版本中,,,,,,,该函数的关键代码如下。。。。。。


代码如下.png


在clean_query函数中,,,,,,,当传递进来的$query满足以下两个前提:

$query['taxonomy']为空;;;; ;

$query['filed']的值蹬宗term_taxonomy_id。。。。。。


WordPress的执行就会进入580行,,,,,,,挪用transform_query函数。。。。。。跟进该函数,,,,,,,满足602行,,,,,,,不做任何措施直接return,,,,,,,维持了terms的值不受扭转。。。。。。


代码如下.png


全局搜索clean_query,,,,,,,其被get_sql_for_clause函数挪用。。。。。。阅读该步骤的代码可知,,,,,,,它的职能是为sql查问中的前提创建子句。。。。。。具体来说,,,,,,,它的工作是处置接管到的数据,,,,,,,将这些数据组合成SQL 查问中的前提,,,,,,,而后将其返回给父函数。。。。。。所以,,,,,,,若是能够节造clean_query的返回数据,,,,,,,就能够节造SQL查问进行注入。。。。。。


在get_sql_for_clause中能够找到$terms变量被拼接到sql语句中。。。。。。


代码如下.png


从get_sql_for_clause步骤持续回溯,,,,,,,挪用栈如下:


代码如下.png


在get_posts()中能够找到对WQ_Tax_Query->get_sql()的挪用。。。。。。


代码如下.png


通过回溯挪用栈可知,,,,,,,通过节造WP_Query->__construct()中的属性,,,,,,,就能够造成sql注入。。。。。。


缝隙复现


通过度析WordPress的源码发现,,,,,,,WordPress主题代码中不存在能够触发该缝隙的挪用点。。。。。。为了验证该缝隙,,,,,,,这里使用了Ele Custom Skin插件做缝隙复现,,,,,,,这也是ZDI给出的存在产生缝隙挪用的插件样例。。。。。。


EleCustom Skin插件装置量在10万以上,,,,,,,且其存在的缝隙挪用是无需登录的。。。。。。该插件存在步骤get_document_data(),,,,,,,其主题代码如下:


代码如下.png

代码如下.png 

全局搜索get_document_data,,,,,,,该步骤被注册的action名字如下。。。。。。


代码如下.png


因而,,,,,,,该缝隙在这个插件是存在触发蹊径的。。。。。�?????鬱ebug职能后,,,,,,,机关报文即可成功注入出数据库user。。。。。。


代码如下.png


盛行插件分析


为了分析该缝隙的现实影响,,,,,,,ADLab钻研员还对WordPress前100个盛行插件进行了分析,,,,,,,发显熹中2个插件也存在该缝隙。。。。。。


开启debug,,,,,,,机关报文即可成功注入出数据库user。。。。。。


建复规划


目前WordPress已颁布升级补丁以建复缝隙,,,,,,,补丁获取链接如下:


https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-6676-cqfm-gw84


参考链接:

https://www.zerodayinitiative.com/blog/2022/1/18/cve-2021-21661-exposing-database-info-via-wordpress-sql-injection