Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
---
layout: news_post
title: "安全公告:CVE-2026-80212 与 CVE-2026-80213"
author: "hsbt"
translator: "GAO Jun"
date: 2026-08-27 00:00:00 +0000
tags: security
lang: zh_cn
---

在 Ruby 捆绑的 `resolv` gem 中发现了两个漏洞,[CVE-2026-80212](https://www.cve.org/CVERecord?id=CVE-2026-80212) 和 [CVE-2026-80213](https://www.cve.org/CVERecord?id=CVE-2026-80213)。我们建议您更新 `resolv` gem。

## CVE-2026-80212:恶意 DNS 响应导致的内存耗尽

如果攻击者能够控制应用程序解析的域名(例如 webhook 目标或用户提供的 URL),就能使应用无限制消耗内存。
攻击者可以在域名服务器中,将域名解析的响应永久存入 `resolv` 库的内存中。反复的查找会导致进程耗用的内存持续增长,并最终耗尽内存导致服务终止。

## CVE-2026-80213:域名验证绕过

对于使用白名单或 SSRF 过滤器的应用程序,其域名校验和实际访问的域名可能不同。即通过校验的域名和实际访问的域名可能不同,这会导致应用访问了一个本不应该访问的域名。
触发此问题需要域名的长度超过 DNS 的长度限制,所以,如果校验逻辑拒绝超过 256 字节的域名或超过 63 字节的标签就不会受此影响。

## 受影响版本

* `resolv` gem 0.4.0 至 0.7.1
* `resolv` gem 0.3.1 及之前版本

Ruby 捆绑的版本因系列而异:Ruby 4.0 捆绑了 0.7.0,Ruby 3.4 绑定了 0.7.1,Ruby 3.3 绑定了 0.3.1。

## 检查内容

只有通过此 gem 进行域名解析的代码会受到影响。普通 socket 连接(如 `Net::HTTP` 和 `TCPSocket`)使用操作系统的域名解析器,不会受到影响。
`Net::HTTP` 虽然会加载此 gem,但仅用于 IP 地址的正则表达式。所以,仅仅加载此 gem 并不意味着一定存在安全风险。

应用程序可能会因为下列原因受到此漏洞的影响:调用 `Resolv` 本身,或加载 `resolv-replace`(这会让所有的 socket 域名解析通过此 gem 进行),
或引用了使用以上方法进行域名解析的 gem。所以,您不仅需要检查自己的代码,还需要检查依赖项。

## 建议操作

更新 `resolv` gem 到 0.7.2。对于 Ruby 3.3 系列,更新到 0.3.2。

对于 Ruby 3.2 系列捆绑的 `resolv` 0.2.x 系列版本,由于 3.2 系列已结束生命周期,所以不再发布新版本。请安装 `resolve` 0.7.2。

## 致谢

感谢 [dalifit](https://hackerone.com/dalifit) 发现这些问题。

## 历史

* 最初发布于 2026-08-27 00:00:00 (UTC)