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。
Chrome全自动补齐0开始的IP地址
在net库文件,全部IP地址开始的0都是会被清除和丢掉。依据IETF的初始表明,假如IPv4详细地址的作为前缀有0,那麼可以解释为是八进制。可是Go和rust语言的net控制模块都忽视了这一点,并将其做为十进制数来解决。
因而,假如开发人员应用net库来验证IP地址是不是归属于某一特殊的范畴,例如访问控制列表ACL中的IP目录,結果很有可能便会发生不正确。
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版本号中包括了该漏洞的安全更新。
Rust语言补丁包
文中翻譯自:https://www.bleepingcomputer.com/news/security/go-rust-net-library-affected-by-critical-ip-address-validation-vulnerability/倘若转截,请标明全文详细地址。