51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

窗口小部件设置导入器/导出器插件中的未修补的高严重性漏洞

2020年3月12日,我们的威胁情报团队在Widget Settings Importer / Exporter(一个安装了40,000多个WordPress插件)中发现了一个存储的跨站脚本(XSS)漏洞。此缺陷使经过身份验证的攻击者具有最小的订户级别权限,可以将包含任意JavaScript的自定义窗口小部件导入并激活到安装了插件的网站中。

我们在2020年3月12日当天与插件供应商联系,但尚未收到回复。2020年3月20日,我们与WordPress插件小组联系,并向他们发送了漏洞的全部披露信息,在2020年4月13日与他们进行跟进后,该插件已从WordPress存储库中删除。由于目前没有可用的补丁程序,我们强烈建议停用并删除此插件。

Wordfence Premium用户于2020年3月12日收到一条新的防火墙规则,以防止针对这些漏洞的攻击。免费Wordfence用户于2020年4月11日收到此规则。


说明 :受认证的存储的跨站点脚本(XSS)
受影响的插件 :窗口小部件设置导入器/导出器
插件段 :窗口小部件设置-importexport
受影响的版本 :<= 1.5.3
CVE ID :待处理的
CVSS得分 :7.4(高)
CVSS矢量CVSS :3.0 / AV:N / AC:L / PR:L / UI:N / S:C / C:L / I:L / A:L
完整版本 :N / A

窗口小部件设置导入器/导出器是一个WordPress插件,提供了导入和导出WordPress窗口小部件的功能-- WordPress功能可为网站的页眉,侧边栏和页脚添加功能。该插件注册了用于执行窗口小部件导入的AJAX操作:

add_action( 'wp_ajax_import_widget_data', array( __CLASS__, 'ajax_import_widget_data' ) );

与许多类似漏洞一样,AJAX操作调用的函数无法使用功能检查或随机数检查。这意味着任何经过身份验证的用户,无论其权限如何,都可以使用它将小部件导入网站,包括包含恶意JavaScript的小部件,这些小部件将在该网站的任何访问者的浏览器中执行。

具体来说,该ajax_import_widget_data函数通过调用file_get_contents提供的import_file参数来获取要导入的小部件数据。大多数站点都配置有设置,该设置allow_url_fopen允许该功能获取远程托管文件的内容。这样,攻击者可以通过向发送$_POST请求wp-admin/admin-ajax.php,将action参数设置为import_widget_data,将import_file参数设置为精心制作的远程托管JSON文件的URL并将widgets参数设置为描述小部件的请求,从而将恶意小部件导入网站。被导入。

如果clear_current设置了该参数,则站点上任何当前活动的窗口小部件也将被删除。如果导入的窗口小部件包含恶意JavaScript,则可以将其用于将网站访问者重定向到恶意网站,甚至窃取管理员的会话,有可能导致网站接管。

脆弱的功能:

   public static function ajax_import_widget_data() {
       $response = array(
           'what' => 'widget_import_export',
           'action' => 'import_submit'
       );

       $widgets = isset( $_POST['widgets'] ) ? $_POST['widgets'] : false;
       $import_file = isset( $_POST['import_file'] ) ? $_POST['import_file'] : false;

       if( empty($widgets) || empty($import_file) ){
           $response['id'] = new WP_Error('import_widget_data', 'No widget data posted to import');
           $response = new WP_Ajax_Response( $response );
           $response->send();
       }

       $clear_current = isset( $_POST['clear_current'] );

       if ( $clear_current )
           self::clear_widgets();

       $json_data = file_get_contents( $import_file );
       $json_data = json_decode( $json_data, true );
       $sidebar_data = $json_data[0];
       $widget_data = $json_data[1];
       foreach ( $sidebar_data as $title => $sidebar ) {
           $count = count( $sidebar );
           for ( $i = 0; $i < $count; $i++ ) {
               $widget = array( );
               $widget['type'] = trim( substr( $sidebar[$i], 0, strrpos( $sidebar[$i], '-' ) ) );
               $widget['type-index'] = trim( substr( $sidebar[$i], strrpos( $sidebar[$i], '-' ) + 1 ) );
               if ( !isset( $widgets[$widget['type']][$widget['type-index']] ) ) {
                   unset( $sidebar_data[$title][$i] );
               }
           }
           $sidebar_data[$title] = array_values( $sidebar_data[$title] );
       }

       foreach ( $widgets as $widget_title => $widget_value ) {
           foreach ( $widget_value as $widget_key => $widget_value ) {
               $widgets[$widget_title][$widget_key] = $widget_data[$widget_title][$widget_key];
           }
       }

       $sidebar_data = array( array_filter( $sidebar_data ), $widgets );
       $response['id'] = ( self::parse_import_data( $sidebar_data ) ) ? true : new WP_Error( 'widget_import_submit', 'Unknown Error' );

       $response = new WP_Ajax_Response( $response );
       $response->send();
   }

我该怎么办?

该插件可能不会被打补丁,因此我们强烈建议您停用此插件并将其从您的站点中删除。可以使用具有类似功能的插件,例如Widget Importer&Exporter,并且应该相当安全,尽管应该将停用和删除所有未使用的插件视为最佳做法。

披露时间表

20203月12日 --最初发现并分析了漏洞。为Wordfence Premium用户发布的防火墙规则。最初与插件供应商的联系。
20203月20日 --我们与WordPress插件小组联系,并向他们提供完整的披露信息。
20204月11日 --免费使用Wordfence的用户会收到防火墙规则。
20204月13日 --我们跟进WordPress插件小组,该插件已从WordPress存储库中删除。
20204月15日 -- 30天后漏洞被披露,插件供应商未对此做出回应。

结论

在今天的帖子中,我们在Widget Settings Importer / Exporter WordPress插件中详细描述了一个存储的跨站点脚本(XSS)漏洞。这些缺陷尚未修复,因此我们建议用户立即停用并删除此插件,直到提供补丁为止。自2020年3月12日以来,运行Wordfence Premium的站点已受到保护,免受此漏洞的攻击。运行免费版Wordfence的站点在2020年4月11日收到了防火墙规则更新。

赞(0)
未经允许不得转载:工具盒子 » 窗口小部件设置导入器/导出器插件中的未修补的高严重性漏洞