Bricks Builder是一款功能强大的WordPress主题编辑插件。近日,CDNetworks安全实验室在WordPress 1.9.6之前版本的默认配置中发现一个远程代码执行漏洞。该漏洞可让用户绕过权限检查,从而导致远程代码执行并授予其服务器级权限。
不幸的是,利用此漏洞非常简单,而且影响范围很广。建议企业和组织验证其 WordPress 版本、解决任何相关漏洞或实施 Web 保护解决方案,以防止利用此漏洞。
漏洞分析
在查看了公开的漏洞概述和概念验证 (PoC) 后,我们确定了 /bricks/v1/render_element 路由的全局位置。此 REST API 路由在 bricks/includes/api.php 文件中注册,其中定义了请求方法、回调函数 render_element 和权限检查回调函数 render_element_permissions_check。
我们在源码中设置断点,进行动态调试和进一步分析。当服务器接收到请求时,会首先调用权限检查回调函数。
顺着路径bricks/includes/api.php我们观察到权限检查回调函数render_element_permissions_check根据nonce值进行权限验证。
在“砖块”软件中,有效的nonce是包含在前端中的,通过刷新WordPress主页,可以在前端源代码全局找到nonce,这意味着权限检查回调函数完全失效,任何未经授权的用户都可以对该API进行操作。
在验证从前端提取的 nonce 值后,我们进入回调函数 render_element。在此函数中,调用 Ajax::render_element 函数,并传递来自请求主体的参数。
接下来我们进入bricks/includes/ajax.php中的render_element函数,在这个函数中,主要根据参数定位到Element_Code类,然后进行实例化。
实例化后,调用init()函数。
接下来,按照这个函数进入 bricks/includes/elements/base.php。
在此文件中,请注意 this->render() 函数。然后,进入 bricks/includes/elements/code.php。很明显,在对危险函数调用进行一些检查后,eval 函数在异常处理中用于执行用户从配置中提交的代码。在这种情况下,code 参数由用户控制,允许使用类似`。
最后从当前缓冲区的内容中获取代码执行的结果,通过回调一步步完成请求。
复制漏洞
使用 WordPress 6.4.3 + Bricks Builder 1.9.4 在本地进行设置。在 WordPress 主页上,查看源代码并对 nonce 的值进行全局搜索。
使用 BurpSuite 构建请求 http://127.0.0.1/wordpress/?rest_route=/bricks/v1/render_element 并通过POST请求提交如下数据,执行命令“python –version”,在返回结果中可以成功看到当前主机的Python版本。
受影响的资产
Fofa 上有超过 25,000 个相关资产。Fofa 查询:body=”/wp-content/themes/bricks/”
缓解策略
为了解决此漏洞:
- 更新到最新版本的 WordPress Bricks Builder 主题。
- 避免依赖随机数值进行权限检查回调函数认证。
- 确保所有用户提交的输入都经过严格的验证和过滤,以防止未经授权的访问和代码执行。
最大限度地减少漏洞:CDNetworks 的云安全 2.0
CDNetworks 的云 WAF 针对该漏洞利用,提供即时防护,并持续调查分析其他变种攻击手法及各类组件漏洞,及时部署防护规则,最大限度降低企业的“漏洞窗口”。
最近一个月,CDNetworks 将其云安全解决方案升级为 云安全 2.0,介绍WAF的几个主要特性:
- 内置规则集:超过 1,000 条针对 0-day/N-day 和 OWASP Top 10 攻击的规则集。
- 智能分析(Self-Tuning):人工智能驱动用户行为学习,自动生成规则例外以减少误报。
- 零日攻击虚拟补丁:持续监控漏洞,每小时生成新规则。
- 采用人工智能技术的托管保护模式:增强威胁检测和响应。
- 可扩展性和易于部署:可根据需要扩展并轻松部署。
通过整合这些功能,CDNetworks 旨在满足亚太地区企业不断变化的安全需求,确保组织在竞争激烈的市场中保持受到保护。