WordPress Core SQL注入误差(CVE-2022–21661)剖析

宣布时间 2022-01-25

误差概述


WordPress是现在全球盛行的三大内容管理系统之一 ,其焦点�?椋–ore)泛起误差的情形相对较少。近期 ,WordPress焦点�?楸慌侗4嬉淮QL注入误差(CVE-2022–21661)。针对该高危误差 ,尊龙凯官网入口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