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

添加評論