Npm Netmask SSRF绕过漏洞(CVE-2021-28918)

发布时间 2021-03-29

0x00 漏洞概述

CVE  ID

CVE-2021-28918

时    间

2021-03-29

类   型


等    级

高危

远程利用

影响范围

Netmask <= v1.1.0

PoC/EXP

已公开

在野利用


 

0x01 漏洞详情

image.png

 

Netmask是npm库中的一个软件包,它被成千上万的应用程序用来解析或比较IPv4地址和CIDR块。该软件包的每周下载量超过300万次,截至目前,netmask已经累计有超过2.38亿的总下载量。此外,大约有278,000个GitHub存储库依赖netmask。

2021年03月28日,netmask被披露存在一个可导致SSRF或RFI的安全漏洞(CVE-2021-28918)。在解析IP地址时带有前导零的情况下,由于未正确进行验证,网络掩码将会解析为不同的IP。该漏洞将导致成千上万的项目容易受到SSRF绕过的攻击,目前该漏洞的PoC已在GitHub上公开。

IP地址可以用多种格式表示,包括十六进制和整数,但最常见的IPv4地址以十进制格式表示。比如,IPv4地址以十进制格式表示为104.20.59.209,但是八进制格式表示为0150.0024.0073.0321。

在Chrome浏览器的地址栏中输入0127.0.0.1/,浏览器会将其视为八进制格式的IP。实际上,当按下Enter或Return键后,IP会更改为十进制等效值87.0.0.1。这是因为大多数网络浏览器(如Chrome),会自动补偿混合格式的IP。这就是大多数应用程序处理此类模棱两可的IP地址的方式。

image.png

 

需要注意的是,127.0.0.1并非公共IP地址,而是一个环回地址,但是,通过模棱两可的表示将其更改为公共IP地址,从而导致解析为另一台主机。

但是,对于npm netmask,任何前导零都会被简单地剥离和丢弃。根据IETF的原始规范,IPv4地址的部分如果前缀为 0,可以被解析为八进制。但是netmask忽略了这一点,它始终将IP视为十进制,这意味着在您尝试验证IP属于某个范围时,使用基于八进制的IPv4地址表示将是错误的。

如果攻击者能够影响应用程序解析的IP地址,则该问题可能会导致各种漏洞,从服务器端请求伪造(SSRF)绕过到远程文件包含(RFI)。

攻击者在运行节点服务器来清理入站请求或查询参数,该请求或查询参数可能是用于进一步连接的URI,或使用较早的0前缀JavaScript表示形式,以基于八进制的部分或全部八位字节来制作IP。这可能导致SSRF,例如,通过传递0177.0.0.01来强制服务器连接到127.0.0.1(177是十进制127的八进制数)。一个很好的例子是,一个暴露webhooks并通过netmask检查验证用户URL的系统容易受到SSRF攻击。

image.png

而这个bug也可以被利用来进行远程文件包含(RFI),如果攻击者制作一个对netmask来说看起来是私有的IP地址,因为netmask将所有IPv4部分(八位数)转换为十进制格式的方式,被其它组件评估为公共格式。

各种网络基础架构和安全产品(例如 Web应用防火墙)都依赖于网络掩码来过滤出阻止列表和允许列表中的IP。这还意味着,如果不加以检查,则可能会导致此类缺陷,从而导致严重bug。

2018年,流行的软件项目 curl中也发现具有相同类型的漏洞,它将八进制IPv4地址解析为十进制,比如,运行“ curl -v 0177.0.0.1”curl连接到177.0.0.1,而不是环回地址127.0.0.1。此前,Sick Codes、Jackson和Sahler曾在private-ip软件包中发现了一个类似的漏洞(CVSS评分9.8),该软件包每周有17.5万左右的下载量。

 

0x02 处置建议

目前此漏洞已经修复,建议及时更新至netmask版本2.0.0。

下载链接:

https://www.npmjs.com/package/netmask

 

0x03 参考链接

https://www.npmjs.com/package/netmask

https://github.com/sickcodes/security/blob/master/advisories/SICK-2021-011.md

https://www.bleepingcomputer.com/news/security/critical-netmask-networking-bug-impacts-thousands-of-applications/

https://sick.codes/universal-netmask-npm-package-used-by-270000-projects-vulnerable-to-octal-input-data-server-side-request-forgery-remote-file-inclusion-local-file-inclusion-and-more-cve-2021-28918/

 

0x04 时间线

2021-03-28  Sick codes披露漏洞

2021-03-29  VSRC发布安全通告

 

0x05 附录

 

CVSS评分标准官网:http://www.first.org/cvss/

image.png