WordPress 的 Better Search Replace 插件中发现并修补了一个严重严重漏洞,该插件拥有超过 100 万个活跃网站安装。成功的攻击可能导致任意文件删除、敏感数据检索和代码执行。
漏洞的严重级别
漏洞的严重性按照评分系统进行评分,评级范围从低到严重:
- 低0.1-3.9
- 中4.0-6.9
- 高7.0-8.9
- 严重9.0-10.0
Better Search Replace 插件中发现的漏洞的严重性被评为“严重”,这是最高级别,在 1-10 的严重性等级中得分为 9.8。
插图由Wordfence提供
更好的搜索替换 WordPress 插件
该插件由 WP Engine 开发,但最初是由 WP Engine 收购的 Delicious Brains 开发公司创建的。Better Search Replace 是一款流行的 WordPress 工具,它简化并自动化了在 WordPress 网站数据库上运行搜索和替换任务的过程,这在站点或服务器迁移任务中非常有用。该插件有免费和付费专业版。
该插件网站列出了免费版本的以下功能:
- “对所有表的序列化支持
- 选择特定表的能力
- 能够运行“试运行”以查看将更新多少字段
- 除了正在运行的 WordPress 安装外,没有服务器要求
- WordPress 多站点支持”
付费专业版具有附加功能,例如跟踪更改内容的能力、在插件运行时备份和导入数据库的能力以及扩展支持。
该插件之所以受欢迎,是因为其易用性、实用性以及作为值得信赖的插件的历史。
PHP 对象注入漏洞
在 WordPress 上下文中,当用户提供的输入被不安全地反序列化时,就会出现 PHP 对象注入漏洞。反序列化是将对象的字符串表示形式转换回 PHP 对象的过程。
非盈利性开放全球应用程序安全项目 (OWASP) 提供了PHP 对象注入漏洞的一般描述:
“PHP 对象注入是一个应用程序级别的漏洞,可能允许攻击者根据上下文执行不同类型的恶意攻击,例如代码注入、SQL 注入、路径遍历和应用程序拒绝服务。
当用户提供的输入在传递给 unserialize() PHP 函数之前未经过正确清理时,就会出现此漏洞。由于 PHP 允许对象序列化,攻击者可以将临时序列化字符串传递给易受攻击的 unserialize() 调用,从而导致将任意 PHP 对象注入到应用程序范围中。
为了成功利用 PHP 对象注入漏洞,必须满足两个条件:
- 应用程序必须有一个实现 PHP 魔法方法(例如 __wakeup 或 __destruct)的类,该方法可用于执行恶意攻击或启动“POP 链”。
- 攻击期间使用的所有类都必须在调用易受攻击的 unserialize() 时声明,否则必须支持此类类的对象自动加载。”
如果攻击者可以上传(注入)输入以包含他们选择的序列化对象,他们就有可能执行任意代码或危及网站的安全。如上所述,此类漏洞通常是由于用户输入的清理不充分而引起的。清理是审查输入数据的标准过程,以便仅允许预期类型的输入,并拒绝和阻止不安全的输入。
对于 Better Search Replace 插件,该漏洞是在搜索和替换操作期间处理反序列化的方式中暴露的。这种情况下缺少的一个关键安全功能是 POP 链——一系列链接的类和函数,攻击者可以在对象反序列化时使用它们来触发恶意操作。
虽然 Better Search Replace 插件不包含这样的链,但风险仍然存在,如果同一网站上安装的另一个插件或主题包含 POP 链,则可能会允许攻击者发起攻击。
Wordfence 描述了该漏洞:
“WordPress 的 Better Search Replace 插件在 1.4.4 及之前的所有版本中都容易通过不可信输入的反序列化而受到 PHP 对象注入的攻击。这使得未经身份验证的攻击者可以注入 PHP 对象。
易受攻击的插件中不存在 POP 链。如果 POP 链是通过目标系统上安装的附加插件或主题存在的,它可能允许攻击者删除任意文件、检索敏感数据或执行代码。”
针对这一发现,WP Engine 立即解决了该问题。2024 年 1 月 18 日发布的 1.4.5 版本更新的变更日志条目强调了所采取的措施:
“安全性:在搜索和替换操作期间反序列化对象现在会传递 ‘allowed_classes’ => false,以避免实例化对象并可能运行存储在数据库中的恶意代码。”
此更新是在 Wordfence 于 2023 年 12 月 18 日负责任地披露该漏洞之后发布的,随后 WP Engine 开发并测试了该修复程序。
应对措施
我们敦促 Better Search Replace 插件的用户立即更新到最新版本,以保护他们的网站免受不需要的活动的影响。