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