这是 官方安全公告 的一篇交叉发布。官方公告还包含我们 PGP 密钥的签名版本。
Rust 安全响应工作组收到通知,regex
crate 未能正确限制它解析的正则表达式(regex)的复杂性。攻击者可以使用此安全问题来执行拒绝服务攻击,方法是向接受不受信任正则表达式的服务发送特制的正则表达式。当使用受信任的正则表达式解析不受信任的输入时,不存在已知的漏洞。
此问题已分配 CVE-2022-24713。当 regex
crate 用于解析不受信任的正则表达式时,此漏洞的严重性为“高”。 regex
crate 的其他用途不受此漏洞的影响。
概述
regex
crate 具有内置的缓解措施,以防止由不受信任的正则表达式或受信任的正则表达式匹配的不受信任的输入引起的拒绝服务攻击。这些(可调整的)缓解措施已经提供了合理的默认值来防止攻击。此保证已记录在案,并被认为是 crate API 的一部分。
不幸的是,在旨在防止不受信任的正则表达式在解析期间花费任意时间的缓解措施中发现了一个错误,并且可以制作绕过此类缓解措施的正则表达式。这使得可以通过向接受用户控制的、不受信任的正则表达式的服务发送特制正则表达式来执行拒绝服务攻击。
受影响的版本
1.5.4 或更早的所有 regex
crate 版本都受此问题影响。修复程序包含在 regex
1.5.5 及更高版本中。
缓解措施
我们建议所有接受用户控制的正则表达式的人员立即升级到最新版本的 regex
crate。
不幸的是,没有固定的问题正则表达式集,因为实际上可以制作无限个可以利用此漏洞的正则表达式。因此,我们不建议拒绝已知的问题正则表达式。
致谢
我们要感谢 Addison Crump 按照 Rust 安全策略 将此问题负责任地披露给我们,并感谢他帮助审查修复程序。
我们还要感谢 Andrew Gallant 开发此修复程序,以及 Pietro Albini 协调披露并撰写此公告。