用哪種語言寫的應用漏洞最嚴重?六大主流語言代碼漏洞分析報告出爐

來源:機器之心

本文約1600字,建議閱讀5分鐘

靜態代碼分析安全公司 Veracode 近日發佈了一份應用程序分析報告,結果發現比起 JavaScript 和 Python 等語言,C++ 和 PHP 的安全漏洞要嚴重得多。

如果你是一位靠 .NET、C++、Java、JavaScript、PHP 或 Python 喫飯的開發者,那要注意了:一項新研究揭示了這些編程語言的主要安全漏洞。

靜態代碼分析安全公司 Veracode 近期發佈了這些語言的漏洞類型數據,這是該公司掃描了 13 萬應用程序的安全問題後得到的報告。

該公司調查了用 .NET、C++、Java、JavaScript、PHP 或 Python 編寫的應用程序的漏洞趨勢。這些數據整合在 Veracode 的《軟件安全狀態第 11 卷(State of Software Security Volume 11)》報告中:

https://www.veracode.com/sites/default/files/pdf/resources/ipapers/security-flaw-heatmap/index.html

Veracode 掃描 13 萬個應用程序後得到的漏洞類型數據

對於最常用的前端開發語言 JavaScript,Veracode 發現 31.5% 的應用至少有一個跨站腳本(XSS)漏洞,而用 PHP 寫的應用中有 74.6% 至少有一個 XSS 漏洞。此外,71% 的 PHP 應用存在加密問題。

對於用 .NET 寫的應用,最主要的問題是信息泄露——62.8% 的 .NET 應用存在該問題。C++ 應用最大的問題是錯誤處理,佔到了 66.5%。

至於 Java 應用,首要問題是 CRLF 注入(回車或換行注入),佔受調查應用的 64.4%。Python 應用中最嚴重的安全問題與加密相關,出現在 35% 的受調查應用中。

每種語言的漏洞嚴重性也存在很大差別。Veracode 發現用 C++ 寫的應用中有 59% 存在非常嚴重的漏洞;而對於 PHP,這一數字爲 52%。但是,用 JavaScript 寫的應用僅有 9.6% 有非常嚴重的漏洞,Java 應用的數據爲 24%。

Veracode 首席研究官 Chris Eng 解釋了不同語言漏洞趨勢不同的原因,以及如何修復它們以避免嚴重損失。

「從整體數據上看,我們這個行業過去十年來沒能消除任何一種漏洞類別。」Eng 說,「沒有任何問題完全消失。很多事情都在波動,但看看平均情況,你會發現相比於其它指標,這些數據更能反映語言選擇和語言流行程度的變化。我們看到 C++ 常見的緩存溢出問題有下降的趨勢,但這並不是因爲開發者處理這些問題的能力更強了,而是因爲使用 C++ 進行開發的人變少了。」

另一方面,影響 JavaScript 和 Python 的問題則有所增長,原因是這兩種語言現在非常流行。在企業層面上,Java 和 .NET 依然備受歡迎。

PHP 依然是網頁應用開發最常用的腳本語言之一,但 Eng 指出 PHP 漏洞數量更高的原因是該語言提供了大量不安全的原語以及大量錯誤開發的方式。

「有些語言會盡力避免開發者考慮不周而把事情搞砸,.NET 就是其中最早的語言之一。」Eng 解釋說,「相比於使用 PHP,使用 .NET 時,你會發現大量 API 都有更安全的默認設置,使得出現跨站腳本錯誤或 SQL 注入錯誤會困難得多。在 PHP 中,這些錯誤幾乎是默認的——除非你剛好在使用一種能爲你提供更多保護的更現代框架。使用 PHP 出錯的情況實在太多了。」

Veracode 在其分析的 JavaScript 應用中發現的漏洞遠遠更少,但即使 JavaScript 有更安全的默認設置,龐大的 npm 生態系統中的 JavaScript 和 node.js 開源軟件庫是潛在的薄弱環節。

「即使你能修復自己寫的代碼中的所有漏洞,你使用的第三方軟件庫仍會帶來諸多變數。」Eng 說,「打補丁實際上並不如你期望的那麼好。現在的趨勢是開發者在需要時纔會去下載這些軟件庫的最新版本,然後他們就再也不更新了,除非這個軟件庫又增加了什麼新功能。」

工程開發和產品團隊應該如何降低爲關鍵應用程序打補丁的麻煩和成本?Eng 的建議是保持更新並且清晰地跟蹤構建應用的技術和安全成本隨時間的變化情況。在某個時間,該應用將需要得到修復或打補丁,其中包括語言更新和關鍵軟件庫的補丁。

Eng 說:「如果我現在在使用 4.5 版,而 4.6 版已經出來了,我可以使用該補丁,同時幾乎不會產生功能方面的影響。開源軟件庫不會在小版本更新中對軟件庫進行重大修改。但如果你現在使用的是 2.0 版,那麼你就必須得更新到 4.6 版,這個過程會很痛苦」。

對於使用龐大 npm 生態系統的 JavaScript 來說,更新軟件庫這個問題可能會更嚴重一點,但 Java 和 Python 都有各自的大型生態系統:Maven 和 PyPI。

Eng 表示 JavaScript 應用平均有大約 400 個依賴關係。如果來看第 90 百分位數的 JavaScript 應用程序,它們的依賴關係數量可達 1000 或 2000 個。

應用安全公司 Snyk 曾解釋說影響 JavaScript、Ruby、Java、PHP 和 Python 的大多數安全漏洞都源自項目中加載的主要組件之間的間接依賴關係。

還有一點,某些 JavaScript 軟件庫非常受歡迎,多達 80%-90% 的 JavaScript 應用在使用它們。

Eng 說:「只要這些軟件包中某一個包裏有一個漏洞,你就繼承了該風險。而且這不只是安全風險。」

他指的是 JavaScript 軟件庫 left-pad 曾出現過的情況:2016 年的一場爭吵之後,一個開發者將該軟件庫移出了 npm。

「它從 GitHub 上消失了,然後突然之間,三分之二的互聯網崩潰了,因爲它們全都依賴這個幾行代碼的軟件庫來確定一個數是否在左側填充了零。」

原文鏈接:

https://www.zdnet.com/article/programming-language-security-these-are-the-worst-bugs-for-each-top-language/

編輯:黃繼彥

校對:汪雨晴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章