跳到正文
原文
Wordfence 官方博客· Alex Thomas·· 8 天前精选编辑评分92

Wordfence Argus 发现 Duplicator 高危未认证 PHP 对象注入漏洞 CVE-2026-82814

Wordfence Argus Discovers High Severity Unauthenticated PHP Object Injection in Duplicator

编辑导读

Wordfence Threat Intelligence Team 发现 Duplicator 和 Duplicator Pro 存在高危未认证 PHP 对象注入漏洞 CVE-2026-82814,CVSS 3.1 评分为 8.8。

推荐理由

文章拆解了漏洞从匿名评论到管理员迁移触发的完整链路,并分别说明 Free 版命令执行与 Pro 版文件删除的利用条件及修复方式。

2026 年 8 月 30 日,Wordfence 威胁情报团队在内部研究过程中发现了 Duplicator 和 Duplicator Pro 中未经身份验证的 PHP 对象注入漏洞。Duplicator 拥有超过一百万个活跃安装。该漏洞编号为 CVE-2026-82814,CVSS 3.1 评分为 8.8(高危)。

这是一个二阶漏洞。未经身份验证的攻击者可以在普通的 WordPress 评论中植入恶意值,使其保持休眠状态。如果管理员随后创建包含该评论的 Duplicator 备份包,并使用该备份包迁移网站,独立安装程序会将存储的值视为 PHP 对象并激活它。

两个版本造成的后果有所不同。在 Duplicator Free 中,可以将受影响安装程序所包含的类组合起来,执行攻击者选定的操作系统命令。在 Duplicator Pro 中,另一个内置类可以删除攻击者选定的文件。我们证明,删除 wp-config.php 可以重新开启 WordPress 安装流程,并可能导致网站接管和 PHP 代码执行——前提是攻击者抢先进入安装流程,并提供其控制且可访问的数据库。

Wordfence 威胁情报团队在由 Alex Thomas 主导和验证的 WordPress 7.1 安全评估期间,借助我们的 AI 辅助安全研究系统 Wordfence Argus 发现了该漏洞。在团队的指导下,Argus 帮助追踪了攻击者可控的数据从存储该数据的请求之外进入后续由管理员触发的迁移流程,团队随后识别并验证了 Duplicator Free 和 Duplicator Pro 中存在的不同利用路径。

我们的使命是通过纵深防御保障 WordPress 安全,因此我们投资于高质量的漏洞研究,并与插件供应商密切合作,确保漏洞得到修复,避免遭到大规模利用。我们致力于通过检测和预防漏洞来提高 WordPress 生态系统的安全性,这是采用多层安全方法的关键环节。

我们于 2026 年 8 月 31 日通过 Wordfence 漏洞管理门户向 Duplicator 团队提供了完整的披露细节。开发者于 2026 年 9 月 2 日确认收到报告,并于 2026 年 9 月 8 日发布了 Duplicator 5.0.0。2026 年 9 月 25 日,开发者告知我们,5.0.0 版本已包含补丁。我们要表扬 Duplicator 团队修复了存在漏洞的迁移路径。

Wordfence 防火墙内置的通用对象注入防护功能已为所有 Wordfence 用户(包括使用 Wordfence 免费版本的用户)针对该漏洞提供了一定程度的保护。在补丁发布后的进一步分析中,我们发现有机会扩大这一覆盖范围。因此,我们于 2026 年 10 月 15 日向 Wordfence Premium、Wordfence Care 和 Wordfence Response 客户发布了一条额外的漏洞专用防火墙规则。使用 Wordfence 免费版本的网站将在 30 天后,也就是 2026 年 11 月 14 日获得这项额外保护。

我们敦促 Duplicator Free 和 Duplicator Pro 的用户尽快更新至 5.0.0 或更新版本。更新插件不会重建已经存在的软件包。旧版软件包不会仅仅因为被存储就激活此漏洞,但它会保留创建它的版本所提供的安装程序。在使用受影响版本创建的软件包进行标准迁移或导入之前,请在可行的情况下使用更新后的版本创建一个全新的软件包。下面将讨论经过测试的恢复行为。

来自 Wordfence Intelligence 的漏洞摘要

Duplicator <= 1.5.17 和 Duplicator Pro <= 4.6.10 - 未经验证的 PHP 对象注入

8.8

CVSS 评分
8.8(高危)

CVE-ID
CVE-2026-82814

补丁状态
已修补

受影响的软件

Duplicator – 备份与迁移插件 – 云备份、定时备份等 [duplicator]

Duplicator Pro [duplicator-pro]

研究人员

Alex Thomas

Wordfence Argus

适用于 WordPress 的 Duplicator 和 Duplicator Pro 插件分别存在最高至 1.5.17 和 4.6.10(含)所有版本中的 PHP 对象注入漏洞,其利用方式是在迁移期间通过 DUPX_UpdateEngine::unserializeTest() 反序列化不受信任的数据库内容。这使得未经验证的攻击者可以在管理员构建软件包之前,将一个序列化对象存入公开网站内容中,之后管理员再执行迁移或导入并运行数据库搜索和替换。Duplicator Free 捆绑了 Requests 1.7 POP 链,允许攻击者选择回调,从而直接执行操作系统命令。Duplicator Pro 捆绑了 IndexList 析构函数 gadget;当安装程序 PHP 进程对其所在目录具有写入权限时,该 gadget 允许删除攻击者选择的现有文件。删除 wp-config.php 可能暴露安装向导;如果攻击者先一步访问该向导并提供其控制的、可以访问的数据库,则可能导致网站接管和代码执行。软件包必须在载荷存入之后创建,并且之后需要管理员执行迁移操作。

更多详情 >

技术分析

Duplicator 是一款备份和迁移插件。它创建的软件包包含网站的文件和数据库,以及一个独立安装程序,后者可以在新位置重建网站。在标准迁移过程中,安装程序会更新旧网站 URL 和文件系统路径等值,使其与目标位置匹配。

当数据库值包含 PHP 序列化数据时,这些替换会变得更加复杂。序列化值不仅记录其数据,还记录字符串长度和类名等信息。如果在不修正这些长度的情况下修改其中的 URL,可能会破坏该值,因此 Duplicator 的迁移引擎会在处理数据库时尝试识别并修复序列化数据。

此漏洞之所以存在,是因为受影响版本并不只是检查可能存在的序列化值。DUPX_UpdateEngine::unserializeTest() 函数会将该值传递给 PHP 原生的 unserialize() 函数,同时不限制可以创建哪些类:

try {
    LogHandler::setMode(LogHandler::MODE_OFF);
    $unserialize_ret = @unserialize($data);
    LogHandler::setMode();
    return ($unserialize_ret !== false);
}

调用 unserialize() 可以构造以数据命名的对象,并自动运行特殊方法,例如 __wakeup() 和 __destruct()。如果应用程序包含一组有用的此类方法(称为 gadget chain),攻击者控制的数据就可能触发开发者从未打算执行的操作。

迁移引擎会扫描类文本数据库列,同时识别完全采用 base64 编码的值。它会解码这些值,并对解码后的内容执行相同的序列化数据检查。这意味着,攻击者可以存储一条看起来像编码文本的评论,同时在迁移期间向 unserialize() 传递 PHP 对象。

为何有效载荷可以来自匿名评论

攻击者可以通过 WordPress 的公开 wp-comments-post.php 端点提交评论,无需账户、Cookie 或 nonce。评论正文可以包含 base64 编码的对象。无需审核,因为待审核评论仍会存储在 WordPress 数据库中,并在管理员创建 Duplicator 备份包时被纳入其中。

提交评论时不会发生任何危险操作,创建备份包时只会复制已存储的值。有效载荷会在之后才生效:当管理员使用新创建的备份包进行标准迁移或导入,并且安装程序执行 Update Data 搜索和替换操作时。

攻击顺序如下:

  1. 未经身份验证的攻击者以 WordPress 评论的形式提交经过编码的 PHP 对象。
  2. 即使评论仍处于待审核状态,WordPress 也会存储该评论。
  3. 管理员创建一个包含该评论的新 Duplicator 备份包。
  4. 管理员使用该备份包进行标准迁移或导入。
  5. Duplicator 在更新数据库时解码并反序列化已存储的对象。

Duplicator Free:直接执行命令

Duplicator Free 1.5.17 在生成的安装程序中包含旧版本的 Requests 库。团队使用 Wordfence Argus,将 Duplicator 的 DbUserMode 类与 Requests_Utility_FilteredIterator 结合起来。当 PHP 重建 DbUserMode 时,其 __wakeup() 方法会遍历攻击者控制的数据。随后,Requests 迭代器调用存储在该数据中的回调:

public function current() {
    $value = parent::current();
    $value = call_user_func($this->callback, $value);
    return $value;
}

由于回调及其参数都来自序列化后的评论,攻击者可以选择 PHP 函数(例如 system()),并提供该函数应执行的命令。我们确认,在真实迁移过程中,可以直接以 Web 服务器用户的身份执行操作系统命令。我们还独立使用同一条链删除了任意文件。

Duplicator Pro:删除文件并接管站点

Duplicator Pro 4.6.10 包含较新版本的 Requests 库,因此无法使用 Free 版本中的回调链。不过,它在每个生成的安装程序中都包含另一个可用类:Duplicator\Libs\Index\IndexList。其析构函数会删除存储在对象 path 属性中的路径:

public function __destruct()
{
    if (is_resource($this->handle)) {
        fclose($this->handle);
    }

    if (file_exists($this->path)) {
        unlink($this->path);
    }
}

受影响的迁移引擎允许通过序列化后的评论选择该路径。我们首先通过删除测试文件验证了这一行为。在使用 Wordfence Argus 进一步测试期间,团队在一次性 WordPress 安装上删除了 wp-config.php。

当 WordPress 找不到 wp-config.php 时,会显示其常规安装流程。率先进入该流程的攻击者可以将站点连接到自己控制的数据库、创建新的管理员账户,并使用 WordPress 的常规插件安装功能执行 PHP 代码。我们完成了整个流程,并使用概念验证插件验证了代码执行。

这条 Pro 路径不会暴露原站点的数据库或其凭据。演示的接管使用的是攻击者控制的独立数据库。它仍会让攻击者控制受影响域名及文件系统上运行的 WordPress。

重要先决条件和限制

攻击者不需要账户,但有效载荷不会立即执行。必须先存储该载荷,然后管理员才能创建数据包,且管理员之后必须执行标准的迁移或导入操作,从而运行 Duplicator 数据库的 Update Data 搜索和替换流程。

仅创建备份不会触发该漏洞。我们也没有通过 Duplicator 的恢复或救援模式演示这条攻击链,因为这些模式不使用相同的替换引擎。经确认的触发方式是标准迁移或导入。

评论审核无法阻止这条攻击链,因为未经批准的评论仍会被存储,并可被复制到数据包中。禁用公开评论会移除我们所演示的载体,但这不能替代更新,因为其他由攻击者控制的数据库内容也可能到达存在漏洞的迁移引擎。

对于 Pro 文件删除路径,目标文件必须存在,并且运行安装程序的 PHP 进程必须有权修改其所在目录。要将删除 wp-config.php 进一步转化为网站接管,攻击者还必须抢在网站所有者之前进入设置流程,并提供一个可访问且由其控制的数据库。

补丁

Duplicator 团队已在 5.0.0 版本中修复了存在漏洞的迁移路径。更新后的引擎会调用 SnapUtil::safeUnserialize(),要求 PHP 不要实例化序列化数据中指定的类:

public static function safeUnserialize($data, &$value = null): bool
{
    $value = null;

    if (!is_scalar($data) && $data !== null) {
        return false;
    }

    $data = (string) $data;
    if ($data === 'b:0;') {
        // Legitimately serialized boolean false: unserialize() also returns false here.
        $value = false;
        return true;
    }

    try {
        $result = @unserialize($data, ['allowed_classes' => false]);
    } catch (Throwable $e) {
        return false;
    }

    if ($result === false) {
        return false;
    }

    $value = $result;
    return true;
}

在这个已披露的迁移调用方中,返回值仅用于判断输入是否有效,随后便会被丢弃。这可以防止攻击者提供的类在存在漏洞的位置被实例化。Duplicator Free 5.0.0 也已不再使用直接命令执行攻击链所依赖的旧版 Requests 组件。

我们直接验证了 Duplicator Free 5.0.0 中的修复。我们还审查了 Duplicator Pro 5.0.5,并确认其相关安全文件与已修复的 Free 实现完全相同。厂商确认 Duplicator Pro 5.0.0 也采用了相同修复。

存储的数据包不会激活此漏洞,但其原始安装程序保持不变。

使用 Duplicator Free 1.5.17 或更早版本,或 Duplicator Pro 4.6.10 或更早版本创建的数据包,包含的是相应受影响版本提供的安装程序。在后续测试中,Duplicator Pro 5.0.5 的常规导入流程运行了由 Pro 4.6.10 创建的数据包中的旧版安装程序,并触发了存在漏洞的路径。Pro 5.0.5 的自动恢复流程则强制进入恢复模式,跳过存在漏洞的搜索和替换操作,未触发该漏洞。Duplicator Free 5.0.0 拒绝自动恢复由 Free 1.5.17 创建的数据包,并指示管理员下载该数据包,然后手动运行其安装程序。如果数据包中含有恶意存储值,将受影响数据包自带的安装程序作为标准迁移来运行,仍可能触及存在漏洞的代码。网站所有者可以保留旧版数据包用于恢复,但如条件允许,应在迁移或导入前使用更新版本创建新的数据包。不再需要的、可公开访问的独立安装程序文件应当删除。

Wordfence 防火墙

Wordfence Firewall 内置的通用对象注入保护已经为所有 Wordfence 用户提供了针对此漏洞的一定程度 protection。在补丁发布后的进一步分析中,我们发现了扩大保护范围的机会,并开发了一条额外的、专门针对此漏洞的防火墙规则。Wordfence Premium、Wordfence Care 和 Wordfence Response 客户已于 2026 年 10 月 15 日收到这条额外规则。使用免费版 Wordfence 的网站将于 2026 年 11 月 14 日收到该规则。

这条额外规则通过在 WordPress 于 Duplicator 迁移过程中存储恶意输入以便后续处理之前检测到恶意输入,为利用链提供了更有针对性的保护。

下图展示了利用顺序以及 Wordfence Firewall 阻断该利用流程的位置。

Diagram showing an unauthenticated attacker submitting a PHP object payload in a WordPress comment and the Wordfence Firewall blocking the request before later processing by a Duplicator migration.

披露时间线

2026-08-30

Wordfence 威胁情报团队发现了该漏洞

在使用 Wordfence Argus 进行内部研究时,我们的团队发现了迁移时对象注入,并将 Pro 版本的文件删除原语发展为经验证的网站接管和 PHP 执行,测试目标为一次性目标站点。

2026-08-31

我们验证了这些发现,并向厂商披露

我们的团队完成了验证,并通过 Wordfence Vulnerability Management Portal 向 Duplicator 团队发送了技术细节。

2026-09-02

厂商确认收到报告

Duplicator 团队确认收到漏洞报告。

2026-09-08

厂商发布 5.0.0 版本 补丁

开发者发布了 5.0.0 版本,其中包含已修复的迁移时反序列化路径。

2026-09-25

厂商确认 5.0.0 版本包含该补丁

Duplicator 团队告知我们,9 月 8 日发布的版本已解决所报告的迁移时反序列化问题。

2026-10-09

Wordfence 完成补丁审查

我们独立验证了 Free 版本的修复,并确认可供审查的 Pro 版本中采用了相同的修复实现。

2026-10-15

Wordfence 发布扩展的防火墙保护 防火墙

在补丁发布后的进一步分析中,Wordfence Premium、Wordfence Care 和 Wordfence Response 客户收到了一条专门针对此漏洞的规则,扩大了现有通用保护所提供的保护范围。

2026-11-14

Wordfence Free 用户可获得额外的防火墙保护 防火墙

使用免费版 Wordfence 的网站将收到这条专门针对此漏洞的额外防火墙规则。

Wordfence 行动
厂商/外部行动

结论

在这篇博文中,我们详细介绍了 Duplicator Free 1.5.17 及以下版本和 Duplicator Pro 4.6.10 及以下版本中的一个高危未认证 PHP 对象注入漏洞。未认证攻击者可以在 WordPress 评论中放置恶意对象,然后等待管理员将其包含在备份包中,并使用该备份包执行标准迁移。

两者共有的缺陷是迁移期间的不安全反序列化,但两个版本所产生影响的路径不同。Duplicator Free 通过其捆绑的 Requests 库实现对操作系统命令的直接执行。Duplicator Pro 则允许任意删除文件,在上述条件下可进一步发展为网站接管和 PHP 执行。

用户应将 Duplicator Free 和 Duplicator Pro 更新至 5.0.0 或更高版本。仅因为旧软件包是使用受影响的版本创建的,并不需要将其删除:该压缩包在存储状态下不会激活此漏洞。然而,其中仍包含原始安装程序,而标准迁移或导入操作可能会访问到旧版易受攻击的代码。实际操作中,如条件允许,应在迁移或导入前使用更新后的版本创建全新软件包,并删除不再需要且可公开访问的独立安装程序文件。

Wordfence Firewall 内置的通用对象注入防护为所有 Wordfence 用户提供了针对此漏洞的一定保护。在补丁发布后进行进一步分析时,我们制定了一条额外的、专门针对此漏洞的规则,以扩大保护范围。Wordfence Premium、Wordfence Care 和 Wordfence Response 客户已于 2026 年 10 月 15 日收到这条附加规则。使用免费版 Wordfence 的网站将于 2026 年 11 月 14 日收到该规则。

这一发现展示了 Wordfence 威胁情报团队如何使用 Wordfence Argus 追踪完整应用工作流中的数据。攻击者的请求到达时看起来无害。安全影响直到之后才会显现,即在管理员执行合法迁移期间才会出现——这种关系很容易被逐个端点测试所遗漏。

如果您认识在自己的网站上使用 Duplicator 的人,我们建议您与他们分享此安全公告,以帮助确保其网站保持安全。

《Wordfence Argus 发现 Duplicator 中高危未认证 PHP 对象注入漏洞》一文最早发布于 Wordfence。

来源:Wordfence 官方博客 · https://www.wordfence.com/blog/2026/10/wordfence-argus-discovers-high-severity-unauthenticated-php-object-injection-in-duplicator/

部分链接为推广/关联链接。