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,并且应该相当安全,尽管应该将停用和删除所有未使用的插件视为最佳做法。
披露时间表
2020年3月12日 –最初发现并分析了漏洞。为Wordfence Premium用户发布的防火墙规则。最初与插件供应商的联系。
2020年3月20日 –我们与WordPress插件小组联系,并向他们提供完整的披露信息。
2020年4月11日 –免费使用Wordfence的用户会收到防火墙规则。
2020年4月13日 –我们跟进WordPress插件小组,该插件已从WordPress存储库中删除。
2020年4月15日 – 30天后漏洞被披露,插件供应商未对此做出回应。
结论
在今天的帖子中,我们在Widget Settings Importer / Exporter WordPress插件中详细描述了一个存储的跨站点脚本(XSS)漏洞。这些缺陷尚未修复,因此我们建议用户立即停用并删除此插件,直到提供补丁为止。自2020年3月12日以来,运行Wordfence Premium的站点已受到保护,免受此漏洞的攻击。运行免费版Wordfence的站点在2020年4月11日收到了防火墙规则更新。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"www.yuankufang.com",如遇到无法解压的请联系管理员!
源库坊 » 窗口小部件设置导入器/导出器插件中的未修补的高严重性漏洞
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 源库坊