27万个项目使用的npm组件netmask遭爆含有重大漏洞

一群安全研究人员于上周披露,热门的npm组件netmask含有一个重大的安全漏洞CVE-2021-28918,可能衍生出服务器端请求伪造(Server-Side Request Forgery,SSRF),或引入外部恶意文件(Remote File Inclusion,RFI)等的攻击手法,而且全球有超过27万个项目采用了netmask。

Npm为Node.js组件管理工具,而netmask则可用来解析与理解IPv4无类别域间路由(Classless Inter-Domain Routing,CIDR)区块,以让它们能被利用或比较,例如它可在用户输入特定IP时,判断它是否位于用户所定义的区块中,或者是列出所有包含在某一区块中的IP。

CVE-2021-28918漏洞出现在netmask的private-ip功能中,这个漏洞很简单,它只是把应该视为8位元的IP地址第一节视为字符串,当作是10位元,例如于private-ip中输入0127.0.0.1时,它指的应该是87.0.0.1,但netmask却自动忽略了前面的0,将它视为127.0.0.1,该漏洞从netmask自9年前现身以来,便存在迄今。

研究人员指出,该漏洞看起来不起眼,却会造成巨大灾难。如果浏览器能够识别8进制文本,但Node.js应用程序不行,代表用户可提交任何看起来像是来自内部的网址,但事实上所访问的却是远程的恶意文件,或者是用户提交了看起来是公开的网址,但其实是私人域名,并因而衍生出SSRF或RFI攻击。

举例来说,用户在netmask中提交了012,该组件以为它属于12这类公共IP地址,但它其实是10,属于私用IP地址;或者用户提交了010,netmask把它视为10(私用IP地址),但它却是8(公共IP地址)。

研究人员警告,任何人都可以在netmask中提交一个看似是私人IP地址,实际上却连至公共IP地址而下载恶意文件。

迄今netmask的全球下载数量已超过312万次,在GitHub上有27.8万个项目采用netmask,相关项目是否受到CVE-2021-28918漏洞波及端看其应用方式,目前该漏洞已被修补,研究人员呼吁所有netmask用户都应尽快更新。