DEF CON 21:IP地址验证漏洞影响Go和Rust语言
2021-08-14 11:20:00 Author: www.4hou.com(查看原文) 阅读量:46 收藏

net库爆混合格式的IP地址验证漏洞,影响Go和Rust语言。

"net"库是Go和Rust语言中常用的库函数。近日,Cheng Xu等研究人员在DEF CON大会介绍了Go和Rust语言中的net模块安全漏洞。漏洞CVE编号分别为CVE-2021-29922 (Rust)和CVE-2021-29923 (Golang),漏洞产生的原因是net处理混合格式的IP地址方式上存在问题,即当数字IPv4地址中以0开头时会触发漏洞。该漏洞影响Go和Rust语言。依赖net库的应用可能会受到服务器端请求伪造(SSRF)和远程文件包含(RFI)攻击。

研究人员在GitHub上搜索关键字"import net",发现依赖该net库的GO语言程序就有超过400万个。

IP地址可以以多种形式来表示,其中包括十六进制数和整数,不过一般我们看到的IPv4地址都是整数格式的,比如104.20.59.209。如果标称八进制就是0150.0024.0073.0321。

image.png

Chrome自动补全0开头的IP地址

在net库中,所有IP地址开头的0都会被移除和丢弃。根据IETF的原始说明,如果IPv4地址的前缀有0,那么可以理解为是八进制。但是Go和rust语言的net模块都忽略了这一点,并将其作为十进制数来处理。

因此,如果开发者使用net库来验证IP地址是否属于某个特定的范围,比如访问控制列表ACL中的IP列表,结果可能就会出现错误。

image.png

Rust net模块将混合格式的IP地址以十进制处理的PoC代码

这一错误处理可能会引发应用中服务器端请求伪造(SSRF)和远程文件包含(RFI)攻击。

受影响的应用和语言

Go和Rust并不是唯二受该漏洞影响的语言。该混合格式IP地址验证漏洞之前就影响了Python的ipaddress库(CVE-2021-29921)、netmask实现(CVE-2021-28918、CVE-2021-29418)和其他库函数。

目前,golang的net模块已经在v 1.17版本中发布了该漏洞的安全补丁。Rust也在v 1.53.0版本中包含了该漏洞的安全补丁。

image.png

Rust语言补丁

本文翻译自:https://www.bleepingcomputer.com/news/security/go-rust-net-library-affected-by-critical-ip-address-validation-vulnerability/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/MNLP
如有侵权请联系:admin#unsafe.sh