幾天前 發布了一個令人驚訝的簡單方法,該方法允許攻擊應用程序中的依賴項 使用內部軟件包存儲庫開發的。 發現問題的研究人員 他們能夠運行您的代碼 在包括PayPal,Microsoft,Apple,Netflix,Uber,Tesla和Shopify在內的35家公司的內部服務器上運行。
黑客是在與受攻擊的公司配合下進行的Bug賞金計劃的一部分,這些攻擊者已經獲得了130.000萬美元的獎金來識別漏洞。
該方法基於以下事實: 許多公司在其內部應用程序中使用NPM,PyPI和RubyGems的標準存儲庫依賴項以及未公開分發或從其自己的存儲庫下載的內部依賴項。
問題是包管理器 像npm,pip和gem 他們甚至試圖從公共存儲庫下載公司的內部依賴項。 為了進攻 只需定義具有內部依賴關係的軟件包的名稱,然後使用相同的名稱創建自己的軟件包 在NPM,PyPI和RubyGems的公共存儲庫中。
該問題不僅針對NPM,PyPI和RubyGems,而且還出現在其他系統上,例如NuGet,Maven和Yarn。
在研究人員無意中註意到在GitHub上發布的公開代碼中, 許多公司沒有從清單文件中刪除對其他依賴項的提及 用於內部項目或實現擴展功能時。 在Web服務的JavaScript代碼以及許多公司的Node.JS,Python和Ruby項目中也發現了類似的痕跡。
主要洩漏與內容的嵌入有關 在構建過程中從可公開獲取的JavaScript代碼中的package.json文件中獲取數據,以及在require()調用中使用實際的路徑元素,這些可用於判斷依賴項名稱。
掃描了數百萬個公司域,發現了數千個JavaScript程序包名稱 不在NPM存儲庫中。 在編譯了內部程序包名稱的數據庫之後,研究人員決定進行一項實驗,以破解參與Bug賞金計劃的公司的基礎架構。 結果出乎意料地有效 研究人員得以在負責基於連續集成系統進行構建或測試的許多開發計算機和服務器上運行其代碼。
在下載依賴項時,軟件包管理器npm,pip和gem主要從主要公共存儲庫NPM,PyPI和RubyGems中安裝了軟件包,這些軟件包被認為具有更高的優先級。
在私人公司的存儲庫中存在具有相同名稱的類似軟件包的情況會被忽略,而不會顯示任何警告或導致崩潰 可能會引起管理員的注意。 在PyPI中,下載優先級受版本號影響(無論存儲庫如何,都下載了軟件包的最新版本)。 在NPM和RubyGems中,優先級僅取決於存儲庫。
研究人員已將軟件包放置在與找到的內部依賴項名稱相交的NPM,PyPI和RubyGems存儲庫中,向安裝前運行的腳本(預先安裝在NPM中)添加了代碼,以收集有關係統的信息並提交信息接收到外部主機。
為了傳達有關黑客攻擊成功的信息,請繞過阻止外部流量的防火牆,這是一種通過DNS協議組織秘密通道通信的方法。 運行的代碼在攻擊域的控制下解析了攻擊域中的主機,這使得有可能收集有關DNS服務器上成功操作的信息。 傳遞了有關主機,用戶名和當前路徑的信息。
所有記錄的代碼執行中有75%與NPM軟件包下載相關,這主要是因為JavaScript中的內部模塊名稱比Python和Ruby中的依賴項名稱要多得多。