270万个项目使用的node-netmask NPM包中存在漏洞

节点网络掩码 NPM 软件包每周下载量约为 3 万次,并被用作 GitHub 上超过 270 万个项目的依赖项,该软件包存在一个漏洞 (CVE-2021-28918),可使其绕过使用网络掩码的检查确定地址范围或过滤的出现。 该问题在 node-netmask 2.0.0 版本中已修复。

该漏洞使得可以将外部IP地址视为来自内部网络的地址,反之亦然,并通过一定的逻辑在应用程序中使用node-netmask模块进行SSRF(服务器端请求伪造)、RFI (远程文件包含)和 LFI(本地文件包含)攻击)访问内部网络上的资源并将外部或本地文件包含在执行链中。 问题在于,根据规范,以零开头的地址字符串值应解释为八进制数,但节点网络掩码模块没有考虑到这一点,而是将它们视为十进制数。

例如,攻击者可以通过指定值“0177.0.0.1”来请求本地资源,该值对应于“127.0.0.1”,但“node-netmask”模块将丢弃空值,并将“0177.0.0.1”视为“ 177.0.0.1”,在应用程序中评估访问规则时,将无法确定与“127.0.0.1”的身份。 同样,攻击者可以指定地址“0127.0.0.1”,该地址应与“87.0.0.1”相同,但在“node-netmask”模块中将被视为“127.0.0.1”。 同样,您可以通过指定“012.0.0.1”(相当于“10.0.0.1”,但在检查时将被处理为12.0.0.1)之类的值来欺骗对内网地址访问的检查。

发现该问题的研究人员称该问题是灾难性的,并提供了几种攻击场景,但大多数看起来都是推测性的。 例如,它谈到了攻击基于 Node.js 的应用程序的可能性,该应用程序根据输入请求的参数或数据建立外部连接以请求资源,但该应用程序没有具体命名或详细说明。 即使您发现基于输入的 IP 地址加载资源的应用程序,也不完全清楚如何在不连接到本地网络或不获得“镜像”IP 地址的控制的情况下实际利用该漏洞。

研究人员仅假设 87.0.0.1(意大利电信)和 0177.0.0.1(巴西电信)的所有者能够绕过 127.0.0.1 的访问限制。 更现实的场景是利用该漏洞绕过各种应用程序端阻止列表。 该问题还可以应用于在 NPM 模块“private-ip”中共享内网范围的定义。

来源: opennet.ru

添加评论