WordPress Core SQL×¢È멶´(CVE-2022¨C21661)·ÖÎö
Ðû²¼Ê±¼ä 2022-01-25©¶´¸ÅÊö
WordPressÊÇÄ¿Ç°È«ÇòÁ÷ÐеÄÈý´óÄÚÈݹÜÀíϵͳ֮һ£¬ÆäºËÐÄÄ£¿é£¨Core£©·ºÆ𩶴µÄÇé¿öÏà¶Ô½ÏÉÙ¡£½üÆÚ£¬WordPressºËÐÄÄ£¿é±»Åû¶´æÔÚÒ»´¦SQL×¢È멶´(CVE-2022¨C21661)¡£Õë¶Ô¸Ã¸ßΣ©¶´£¬¶«Éƽ̨ADLabÑо¿Ô±µÚһʱ¼ä½øÐÐÁËÏêϸ·ÖÎöºÍÑéÖ¤¡£
ÊÜÓ°Ïì°æ±¾
ÊÜÓ°Ïì°æ±¾£ºWordPress < 5.8.3
©¶´·ÖÎö
ͨ¹ý±ÈÁ¦githubÉϵÄÔ´´úÂ룬¿ÉÒÔ·¢ÏÖ©¶´µÄλÖÃÊÇclean_queryº¯Êý¡£ÔÚ5.8.2¼°Ö®Ç°µÄÀÏ°æ±¾ÖУ¬¸Ãº¯ÊýµÄÒªº¦´úÂëÈçÏ¡£
ÔÚclean_queryº¯ÊýÖУ¬µ±Í¨±¨½øÀ´µÄ$queryÂú×ãÒÔÏÂÁ½¸öÌõ¼þ£º
$query['taxonomy']Ϊ¿Õ£»
$query['filed']µÄÖµ¼´ÊÇterm_taxonomy_id¡£
WordPressµÄÖ´Ðоͻá½øÈë580ÐУ¬µ÷ÓÃtransform_queryº¯Êý¡£¸ú½ø¸Ãº¯Êý£¬Âú×ã602ÐУ¬²»×öÈκδëÊ©Ö±½Óreturn£¬±£³ÖÁËtermsµÄÖµ²»Êܸı䡣
È«¾ÖËÑË÷clean_query£¬Æä±»get_sql_for_clauseº¯Êýµ÷Óá£ÔĶÁ¸ÃÒªÁìµÄ´úÂë¿ÉÖª£¬ËüµÄ¹¦Ð§ÊÇΪsql²éѯÖеÄÌõ¼þ´´½¨×Ӿ䡣¾ßÌåÀ´Ëµ£¬ËüµÄÊÂÇéÊÇ´¦ÖýÓÊÕµ½µÄÊý¾Ý£¬½«ÕâЩÊý¾Ý×éºÏ³ÉSQL ²éѯÖеÄÌõ¼þ£¬È»ºó½«Æä·µ»Ø¸ø¸¸º¯Êý¡£ËùÒÔ£¬Èç¹û¿ÉÒÔ¿ØÖÆclean_queryµÄ·µ»ØÊý¾Ý£¬¾Í¿ÉÒÔ¿ØÖÆSQL²éѯ½øÐÐ×¢Èë¡£
ÔÚget_sql_for_clauseÖпÉÒÔÕÒµ½$terms±äÁ¿±»Æ´½Óµ½sqlÓï¾äÖС£
´Óget_sql_for_clauseÒªÁì¼ÌÐø»ØËÝ£¬µ÷ÓÃÕ»ÈçÏ£º
ÔÚget_posts()ÖпÉÒÔÕÒµ½¶ÔWQ_Tax_Query->get_sql()µÄµ÷Óá£
ͨ¹ý»ØËݵ÷ÓÃÕ»¿ÉÖª£¬Í¨¹ý¿ØÖÆWP_Query->__construct()ÖеÄÊôÐÔ£¬¾Í¿ÉÒÔÔì³Ésql×¢Èë¡£
©¶´¸´ÏÖ
ͨ¹ý·ÖÎöWordPressµÄÔ´Âë·¢ÏÖ£¬WordPressºËÐÄ´úÂëÖв»´æÔÚ¿ÉÒÔ´¥·¢¸Ã©¶´µÄµ÷Óõ㡣ΪÁËÑéÖ¤¸Ã©¶´£¬ÕâÀïʹÓÃÁËEle Custom Skin²å¼þ×ö©¶´¸´ÏÖ£¬ÕâÒ²ÊÇZDI¸ø³öµÄ´æÔÚ·¢Éú©¶´µ÷ÓõIJå¼þÑùÀý¡£
EleCustom Skin²å¼þ°²×°Á¿ÔÚ10ÍòÒÔÉÏ£¬ÇÒÆä´æÔڵĩ¶´µ÷ÓÃÊÇÎÞÐèµÇ¼µÄ¡£¸Ã²å¼þ´æÔÚÒªÁìget_document_data()£¬ÆäºËÐÄ´úÂëÈçÏ£º
È«¾ÖËÑË÷get_document_data£¬¸ÃÒªÁì±»×¢²áµÄactionÃû×ÖÈçÏ¡£
Òò´Ë£¬¸Ã©¶´ÔÚÕâ¸ö²å¼þÊÇ´æÔÚ´¥·¢Â·¾¶µÄ¡£¿ªÆôdebug¹¦Ð§ºó£¬½á¹¹±¨Îļ´¿ÉÀÖ³É×¢Èë³öÊý¾Ý¿âuser¡£
Á÷Ðвå¼þ·ÖÎö
ΪÁË·ÖÎö¸Ã©¶´µÄʵ¼ÊÓ°Ï죬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