超過 75% 的開源軟件安全漏洞存在于間接依賴中
JavaScript、Ruby 和 Java 是間接依賴中存在缺陷最多的生態系統。
開源項目中的絕大多數安全漏洞都存在于間接依賴關系中,而不是存在于直接加載的組件之中。
“匯總所有生態系統的數字后,我們發現間接依賴中存在的漏洞數量是直接依賴的三倍以上。”Snyk 的應用安全顧問 Alyssa Miller 在接受討論 Snyk 的《 2020 年開源安全狀況報告 》的采訪時說。
該報告研究了漏洞如何影響 JavaScript(npm)、Ruby(RubyGems)、Java(MavenCentral)、PHP(Packagist)和Python(PyPI)生態系統。
Snyk 表示,項目內部加載的主要組件所依賴的依賴庫,受到了 86% 的 JavaScript 安全漏洞、81% 的 Ruby 漏洞和 74% 的 Java 漏洞的影響。

Snyk 認為,公司在掃描他們的主要依賴項是否存在安全問題時,如果不能探索其完整依賴樹的多個層次,會導致發布或最終運行容易受到不可預見的缺陷影響的產品。
但是,雖然安全缺陷在 JavaScript、Ruby 和 Java 中普遍存在,但在 PHP 和 Python 中卻不是這樣,絕大多數缺陷都存在于直接依賴關系(主要組件)中。當然,這是有原因的。
“老實說,我發現這更多取決于生態系統內部本身的開發方法。”Miller 說。“尤其是 Java 和 Node.js 項目,似乎比其他生態系統更重地利用了依賴性。特別是,當你看到 Node.js 生態系統的龐大規模時,從其他包構建或利用關鍵功能的包是非常正常的。”
“詢問任何 Node.js 開發人員,他們都可能會遇到這樣的事,即在 npm 試圖拉取所有必要的依賴關系時,等待很長時間才能打開一個項目,”Miller 補充說。“我們最喜歡的一個例子是一個 80 行的 Java 應用程序,指定了 7 個依賴關系。然而,當你走完整個依賴樹時,你會發現有 59 個子依賴,突然間,80 行代碼變成了 74 萬行。”
“正如我們喜歡給它起的綽號,這種‘陌生人的危險’,是一些重大安全漏洞的根本原因,也是造成軟件供應鏈安全復雜化的關鍵原因,”Miller說。
少量的缺陷會造成了巨大的影響
但 Snyk 團隊并不只是看這些缺陷在開源生態系統中的位置,還看它們是什么類型的缺陷。
另一個有趣的發現是,2019 年發現的大部分新安全漏洞都是跨站腳本(XSS)缺陷,盡管數量很多,但這些缺陷只影響了一小部分實際運行的項目。
相反,在去年發現的所有缺陷中,有二十幾個原型污染缺陷的影響最大,影響了超過 11.5 萬個不同的開源項目,可能還有更多的私有項目也受影響。其中,jQuery 和 LoDash 的原型污染缺陷影響最大,因為這些框架是目前應用最廣泛的 JavaScript 開發工具集。

但是,Snyk 團隊在報告中還指出了另一個不尋常的地方,即“惡意軟件包”被列為他們去年在項目中發現的第二大最常見的安全問題類型。這指的是故意出于惡意創建的開放源代碼庫,或者是開發人員帳戶被黑并且代碼中毒的庫。
根據 Snyk 的說法,去年,被黑的或惡意的軟件包是開源生態系統中第二大最常見的安全問題來源。“這些絕大多數(超過 87%)來自 npm (JavaScript)軟件包,” Miller 說。
去年的安全問題不那么嚴重,但也不值得慶祝
此外,Snyk 還指出,他們在所掃描的所有五個生態系統中發現的缺陷數量下降了 20%。

“很難確定(它們因為什么下降),”Miller 說。“以我這種永久安全懷疑論者來說,這可能只是自然的退潮和流動的一部分。然而,在樂觀的一面,我們確實看到了社區的一些關鍵變化,這可能意味著這不僅僅是這一年的異常值。”
“例如,我們看到所報告的跨站點腳本(XSS)漏洞比任何其他漏洞類型都多,它們只影響了我們當年掃描的總項目中的一小部分。這表明,XSS 可能不會影響到使用率更高因而更成熟的項目,這意味著人們可能更多關注安全編碼技術方面。”
“此外,我們的調查顯示,整個社區的態度開始將軟件安全視為開發團隊和安全團隊(甚至在某種程度上是運營團隊)之間的共同責任,”Miller 說。
“這種合作的改善無疑可以幫助推動圍繞安全代碼和安全使用開源包的更好的意識和戰術措施。”
“我在安全領域工作了 15 年,我當然還沒有準備好宣布某一年是事情出現轉機的標志,但你可以認為這是一個趨勢,我們將繼續觀察,看看未來幾個月和整個 2020 年的情況如何。”