regex crate 安全公告 (CVE-2022-24713)

2022 年 3 月 8 日 · Rust 安全响应工作组 (WG)

这是 官方安全公告 的交叉发布。官方公告中也包含使用我们的 PGP 密钥签名的版本。

Rust 安全响应工作组 (WG) 收到通知,称 `regex` crate 未能正确限制其解析的正则表达式 (regex) 的复杂性。攻击者可以利用此安全问题,通过向接受不受信任 regex 的服务发送特制的 regex 来执行拒绝服务攻击。使用受信任的 regex 解析不受信任的输入时,不存在已知漏洞。

此问题已分配 CVE-2022-24713。当 `regex` crate 用于解析不受信任的 regex 时,此漏洞的严重性为“高”。`regex` crate 的其他用法不受此漏洞影响。

概览

`regex` crate 具有内置的缓解措施,以防止由不受信任的 regex 或由受信任的 regex 匹配的不受信任的输入引起的拒绝服务攻击。这些(可调)缓解措施已经提供了合理的默认设置来防止攻击。此保证已在文档中说明,并被视为 crate API 的一部分。

不幸的是,在旨在防止不受信任的 regex 在解析过程中占用任意长时间的缓解措施中发现了一个 bug,并且可以精心构造绕过此类缓解措施的 regex。这使得通过向接受用户控制的、不受信任的 regex 的服务发送特制 regex 来执行拒绝服务攻击成为可能。

受影响的版本

所有低于或等于 1.5.4 版本的 `regex` crate 都受此问题影响。修复程序包含在 `regex` 1.5.5 及更高版本中。

缓解措施

我们建议所有接受用户控制的 regex 的用户立即升级到最新版本的 `regex` crate。

不幸的是,没有固定的有问题 regex 集,因为实际上可以构造出无限多的 regex 来利用此漏洞。因此,我们不建议拒绝已知的有问题 regex。

致谢

我们要感谢 Addison Crump 根据Rust 安全政策负责任地向我们披露此问题,并协助审查修复程序。

我们还要感谢 Andrew Gallant 开发了修复程序,以及 Pietro Albini 协调了披露并撰写了此公告。