regex 仓库的安全公告 (CVE-2022-24713)

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

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

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

此问题已分配 CVE-2022-24713。当 regex 仓库用于解析不受信任的正则表达式时,此漏洞的严重程度为“高”。regex 仓库的其他用途不受此漏洞影响。

概述

regex 仓库具有内置的缓解措施,以防止由不受信任的正则表达式或受信任的正则表达式匹配的受信任输入引起的拒绝服务攻击。这些(可调)缓解措施已经提供了合理的默认值来防止攻击。此保证已记录在案,并被视为该仓库 API 的一部分。

不幸的是,在旨在防止不受信任的正则表达式在解析期间花费任意时间量的缓解措施中发现了一个错误,并且可以制作绕过此类缓解措施的正则表达式。这使得可以通过向接受用户控制的、不受信任的正则表达式的服务发送特制正则表达式来执行拒绝服务攻击。

受影响的版本

regex 仓库的所有版本(包括 1.5.4 及更早版本)都受到此问题的影响。从 regex 1.5.5 开始包含修复程序。

缓解措施

我们建议所有接受用户控制的正则表达式的用户立即升级到 regex 仓库的最新版本。

不幸的是,没有一组固定的问题正则表达式,因为实际上可以制作无限数量的正则表达式来利用此漏洞。因此,我们不建议拒绝已知的问题正则表达式。

致谢

我们要感谢 Addison Crump 按照 Rust 安全策略 负责任地向我们披露此事,并帮助审查修复程序。

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