Rust 修复隐秘的ReDoS 漏洞

admin 2022年3月23日08:56:54评论4 views字数 1086阅读3分37秒阅读模式

Rust 修复隐秘的ReDoS 漏洞聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

Rust 修复隐秘的ReDoS 漏洞
Rust 安全团队修复了位于 Regex crate 中的一个漏洞,可导致应用程序遭拒绝服务攻击。如正则表达式字符串太复杂而不易解析,则会消耗资源并拖慢应用服务器。攻击者利用这一特征在应用特性如搜索页面和API中发动正则表达式拒绝服务 (ReDoS) 攻击。
Rust 修复隐秘的ReDoS 漏洞
Rust 修复隐秘的ReDoS 漏洞
正则表达式编译的复杂度

ReDoS 攻击为人熟知。

多数计算机语言包括Rust在内都具有防御措施来限制正则表达式字符串的复杂度并阻止 ReDoS 攻击。但Rust 正则表达式库中的漏洞耗尽了服务器资源,而耗尽方式并未在默认防御措施中提供。

安全研究员 Addison Crump 报告了该漏洞并指出,“多数 ReDoS 攻击发生在攻击者控制了正则表达式输入时且能够加载填充内存或耗费长时间执行/编译的时候。Rust_lang/regex 具有缓解措施,因此开发人员可允许不受信任的正则表达式并能保证线性时间复杂度以阻止拒绝服务和最大化的内存开销。”

Crump 还指出,“我发现的输入可使正则表达式编译过程增加复杂度,从而违反了crate的安全保证。”

从补丁来看,空的正则表达式子表达式具有大量重复,从而避免触发任何和内存使用而非编译时间相关的现有缓解措施。因此,仔细构造正则表达式可导致正则表达式编译器尝试生成呈指数增长的空子表达式数量。

从受影响库的 Git 历史来看,该漏洞至少存在于2018年,当时regex-syntax 被重写。Crump 指出,“当’regex’ crate 用于解析不可信的正则表达式时,该漏洞的严重程度为‘高危’。”

Rust 修复隐秘的ReDoS 漏洞
结构fuzzing

Crump 是在模糊测试 cargo-fuzz crate 时发现了该漏洞。

Crump 指出,“我所做的是使用 Arbitrary 生成结构性输入,仅生成有效的正则表达式(至少仅生成正则表达式ASTs),之后在执行时转向字符串形式。”该方法不同于传统的模糊测试方法,后者会生成很多随即输出,其中大部分是无用的噪音。

Crump 表示,“我开始注意到执行时间中的奇怪差异前,运行了大约20秒钟的模糊测试器。我在每次测试案例中都会设置时间,并弹出可用于执行拒绝服务攻击的其中一个正则表达式变体。”

Crump 建议Rust 开发人员使用结构模糊测试发现代码中的潜在内存损坏和逻辑漏洞。他表示,“仅仅因为你使用的语言是内存安全,并不意味着不会发生因为未思考所有可能的案例而造成的崩溃或数据损坏,而模糊测试就是找到这类情况的好方法。结构模糊测试将使你识别出代码中的深层问题,以便让你找到作为人类从未思考到的极端案例。”

原文始发于微信公众号(代码卫士):Rust 修复隐秘的ReDoS 漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月23日08:56:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Rust 修复隐秘的ReDoS 漏洞https://cn-sec.com/archives/837204.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息