WordPress Popup Builder插件多个安全漏洞,影响超过10万网站
3月4日,Wordfence研究人员在WordPress Popup Builder插件中发现2个安全漏洞,该插件安装超过10万网站。2个安全漏洞CVE编号为CVE-2020-10195和CVE-2020-10196。
研究人员将漏洞披露给了插件开发人员,开发人员也对插件进行了更新,研究人员建议用户更新到最新的3.64.1版本。
CVE-2020-10195
CVE-2020-10195漏洞是一个非认证的存储型XSS漏洞,影响3.63及更低版本,CVSS评分为8.3。Popup Builder插件允许在WordPress站点上创建不同的弹窗,其中包括弹窗加载时运行定制的JS。插件会注册一个AJAX hook——wp_ajax_nopriv_sgpb_autosave,来自动保存草稿弹窗。
add_action('wp_ajax_nopriv_sgpb_autosave', array($this, 'sgpbAutosave'));
但是该hook对非特权用户是不可用的,而且调用的函数没有进行随机数检查和功能检查。也就是说非认证的攻击者也可以发送一个含有‘allPopupData’参数的POST请求到wp-admin/admin-ajax.php,allPopupData参数中含有包含弹窗ID和恶意JS payload的key-value对,会保存在弹窗的设置中,并当访问者访问页面、弹窗展示时执行。
由于函数中没有进行随机数和权限检查。函数会尝试避免将这些变化以publish状态保存在popup中。如果没有‘post_ID’参数,检查就会被绕过,‘allPopupData’参数中的post id就会被更新。
攻击者可以使用类似的漏洞来重定向网站访问者到恶意广告站点,从浏览器处窃取敏感信息,如果管理员访问或预览含有受感染弹窗的页面时,站点就会被攻击者接管。
CVE-2020-10196
CVE-2020-10196漏洞是一个认证设置修改、配置泄露和用户数据导出漏洞,CVSS评分为6.3。除了存储XSS漏洞外,Popup Builder还有一些其他的漏洞可以低权限的用户被利用。有漏洞的action包括:
add_action('admin_post_csv_file', array($this, 'getSubscribersCsvFile')); add_action('admin_post_sgpb_system_info', array($this, 'getSystemInfoFile')); add_action('admin_post_sgpbSaveSettings', array($this, 'saveSettings'), 10, 1);
通过发送一个‘action’参数为‘sgpbSaveSettings’、 sgpb-user-roles[]参数为‘subscriber’的$_POST请求到admin-post.php,攻击者可以给与所有订阅者用户大量与插件功能相关的权限。除了给予创建和管理种类和新闻的权限外,攻击者还可以使用其他用随机数保护但是没有进行功能检查的AJAX函数,因为使用的随机数会在页面中显示。
有漏洞的函数代码如下所示:
此外,action参数为‘csv_file’的$_POST请求会发送给admin-post.php,使得导出新闻订阅用户列表成为可能。因此,攻击者可以获取敏感的新闻订阅用户信息并用于社会工程攻击中。
有漏洞的函数代码如下所示:
如果‘action’参数修改为‘sgpb_system_info’就可能会泄露一些敏感的系统配置信息,包括所有安装的插件和激活状态。攻击者可以用这些数据来伪造一个针对目标网站的复杂攻击。如果站点上还安装了一个有漏洞的插件,攻击者就会发现该漏洞,并利用该漏洞来进行提取攻击。
有漏洞的函数代码如下所示:
总结
本文介绍了两个影响Popup Builder插件的安全漏洞,其中包括存储XSS、设置修改、配置泄露和用户数据导出。截止目前,漏洞已经在最新的3.64.1版本中修复,研究人员建议用户尽快更新到最新版本。