一、漏洞简介¶
1.1 漏洞背景¶
ares_inet_net_pton() 是 c-ares 提供的用于将 IP 地址字符串转换为网络地址结构的函数。该函数在处理特定格式的 IPv6 地址时存在缓冲区下溢漏洞。
1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)¶
| 项目 | 内容 |
|---|---|
| 漏洞编号 | CVE-2020-7769 |
| 危害等级 | HIGH / 8.6 |
| 漏洞类型 | c-ares 缓冲区下溢 |
| 披露时间 | 2020-11-12 |
| 影响组件 | gRPC |
| 属性 | 值 |
|---|---|
| CVE 编号 | CVE-2020-7769 |
| 危害等级 | 中危 (Medium) |
| CVSS 评分 | 5.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |
| CWE 编号 | CWE-787 (Out-of-bounds Write), CWE-125 (Out-of-bounds Read) |
| 影响组件 | c-ares |
| GHSA 编号 | GHSA-x6mf-cxr9-8q6v |
补充核验信息:公开时间:2020-11-12;NVD 评分:8.6(HIGH);CWE:CWE-88。
二、影响范围¶
2.1 受影响的版本¶
- c-ares < 1.19.1
2.2 不受影响的版本¶
- c-ares >= 1.19.1
2.3 触发条件(如特定模块、特定配置、特定运行环境等)¶
- 管理员通过
ares_set_sortlist()配置了特定格式的 IPv6 地址 - 或者应用程序直接调用
ares_inet_net_pton()处理恶意输入
三、漏洞详情与原理解析¶
3.1 漏洞触发机制¶
漏洞存在于 ares_inet_net_pton() 函数处理 IPv6 地址时的边界检查不足:
- 触发输入:特定格式的 IPv6 地址,如
"0::00:00:00/2" - 缓冲区下溢:函数在计算地址偏移时未正确验证边界
- 内存访问:导致读取或写入缓冲区之前的内存区域
3.2 源码层面的根因分析(结合源码与补丁对比)¶
漏洞代码位置:src/lib/ares_inet_net_pton.c
问题代码片段(简化版):
static int ares_inet_pton6(const char *src, unsigned char *dst) {
// 处理 IPv6 地址
// ...
// 边界检查不足
if (tp < colonp) { // 可能 tp < dst,导致下溢
// ...
}
// ...
}
修复补丁关键点:
// 添加边界检查
if (colonp != NULL) {
if (tp < colonp) {
// 验证指针不会低于缓冲区起始位置
if (tp < dst) {
return 0; // 返回错误
}
// 安全地移动内存
}
}
四、漏洞复现(可选)¶
4.1 环境搭建¶
// test_cve_2020_7769.c
#include <ares.h>
#include <stdio.h>
int main() {
struct in6_addr addr;
const char *malicious = "0::00:00:00/2";
int result = ares_inet_net_pton(AF_INET6, malicious, &addr, sizeof(addr));
printf("Result: %d\n", result);
return 0;
}
4.2 PoC 演示与测试过程¶
# 编译测试程序
gcc -o test_cve test_cve_2020_7769.c -lcares
# 使用 AddressSanitizer 检测
gcc -fsanitize=address -o test_cve_asan test_cve_2020_7769.c -lcares
./test_cve_asan
五、修复建议与缓解措施¶
5.1 官方版本升级建议¶
- 升级 c-ares 至 >= 1.19.1
5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)¶
-
输入验证:在调用
ares_inet_net_pton()前验证 IP 地址格式c // 添加输入验证 if (strstr(ip_str, "::") != NULL && strstr(ip_str, "/") != NULL) { // 可能是恶意输入,进行更严格的验证 } -
避免直接暴露:不要让用户直接控制传给
ares_set_sortlist()的参数
六、参考信息 / 参考链接¶
6.1 官方安全通告¶
<hr />6.2 其他技术参考资料¶
- NVD:https://nvd.nist.gov/vuln/detail/CVE-2020-7769
- CVE:https://www.cve.org/CVERecord?id=CVE-2020-7769
- https://github.com/nodemailer/nodemailer/commit/ba31c64c910d884579875c52d57ac45acc47aa54
- https://snyk.io/vuln/SNYK-JAVA-ORGWEBJARSNPM-1039742
- https://snyk.io/vuln/SNYK-JS-NODEMAILER-1038834
- https://github.com/nodemailer/nodemailer/blob/33b62e2ea6bc9215c99a9bb4bfba94e2fb27ebd0/lib/sendmail-transport/index.js%23L75
- https://github.com/c-ares/c-ares/security/advisories/GHSA-x6mf-cxr9-8q6v
- https://nvd.nist.gov/vuln/detail/CVE-2020-7769