CVE-2026-46727: 基于 pthread 的 getaddrinfo 超时处理中存在释放后使用(Use-after-free)漏洞
由 hsbt 发表于 2026-05-20
翻译: GAO Jun
我们发现 Ruby 中基于 pthread 的 getaddrinfo 在超时处理中存在释放后使用(Use-after-free)漏洞。
此漏洞的 CVE 标号为 CVE-2026-46727。Ruby 4.0.5 已经修复了此漏洞。我们建议您升级 Ruby。
详情
rb_getaddrinfo 的超时取消逻辑中存在竞争条件,该函数被 Addrinfo.getaddrinfo(..., timeout:) 和 Socket.tcp(..., resolv_timeout:) 调用。
如果远程攻击者可以延迟 DNS 响应到指定超时时间附近,可能会导致 Ruby 进程引用已释放的内存并崩溃。
推荐操作
请将 Ruby 升级到 4.0.5 或更高版本。
变通方案
如果您无法立即升级,请避免向 Addrinfo.getaddrinfo 传递 timeout: 参数,避免向 Socket.tcp 传递 resolv_timeout: 参数。
受影响版本
- Ruby 4.0.0 至 4.0.4
- 在此修复之前的 Ruby 4.1.0-dev (master)
Ruby 3.4 系列及更早版本不受影响。
致谢
感谢 cantina-security 发现此漏洞。同样感谢 shioimm 修补了此漏洞。
历史
- 最初发布于 2026-05-20 00:00:00 (UTC)
最新消息
Ruby 4.0.5 已发布
Ruby 4.0.5 已发布。
由 k0kubun 发表于 2026-05-20
Ruby 4.0.4 已发布
Ruby 4.0.4 已发布。
由 k0kubun 发表于 2026-05-11
Ruby 4.0.3 已发布
Ruby 4.0.3 已发布。
由 k0kubun 发表于 2026-04-21
Ruby 3.2.11 已发布
Ruby 3.2.11 已发布。 此版本包括了 处理 CVE-2026-27820 的 zlib gem 更新。
由 hsbt 发表于 2026-03-27