JavaScript、PHP、Python等主流程式語言爆安全漏洞

程式碼灣發表於2017-12-13

沒有不漏的鍋,如果底層的程式語言如果出現問題,頂層的應用程式還能倖免於難嗎?

這周在 Black Hat Europe 2017 安全會議上,一名安全研究員公開了幾款目前非常流行的解釋型程式語言中出現的漏洞。這些程式語言上存在的問題,可能讓運用這些語言開發的應用程式因此也很容易遭受攻擊。

這項研究的作者是 IOActive 的高階安全顧問 Fernando Arnaboldi。這位專家表示他使用了自動化的模糊測試工具在直譯器中對五種程式語言進行了測試:Java,Perl,PHP,Python和Ruby。在對預設庫和內建函式進行模糊測試之後,他在研究中公佈了每種語言存在的一些問題。

圖0:JavaScript、PHP、Python等主流程式語言爆安全漏洞

使用 XDiFF 對 5 款語言進行模糊測試

使用模糊測試工具,對軟體進行測試通常需要檢測到不尋常的行為,以及對記憶體崩潰以及溢位進行檢測。目前比較流行的測試工具(如AFL和Peach)通常需要在尋找漏洞的時候的時候採用相同的邏輯,而這些工具無法儲存執行過的測試用例的資訊。

在這位研究員的研究過程中,他自定義了自己的模糊測試工具 XDiFF(擴充套件差分模糊測試框架),以此適應這幾款不同的程式語言。在測試過程中,他將每種程式語言都分解成了最基本的功能,然後使用XDiFF來提供各種payload輸入來進行測試。

圖1:JavaScript、PHP、Python等主流程式語言爆安全漏洞

在這次測試中,我們的的輸入中主要使用了不到 30 種的原始資料型別,但也有一些特別的payload。這些特別的payload 是用於測試程式獲取外部資料資源時是否會出現問題。

以上這些測試都是用於分析測試目標——是否會出現“暴露本地檔案、未授權的程式碼注入、未授權的系統程式碼執行操作”等安全問題。

測試結果:均暴露出問題

而從他的測試結果來看,我們確實可以看到Java、PHP、Ruby、Perl、Python分別在經歷了多項測試之後,暴露出來了哪些問題。

Python中存在可用於OS命令執行的未記錄方法和本地環境變數。

Perl 中有一種可執行如 eval() 的 typemap 函式。

NodeJS 中輸出的錯誤資訊會洩露部分檔案內容。

JRuby 可以載入和執行並非設計為遠端程式碼執行的程式碼

PHP中常量的名字可以用來執行遠端命令。

最安全的應用層序也會因此“倒下”

Arnaboldi 表示攻擊者可以利用這些程式語言上的漏洞來“放倒”最安全的應用程式。

一些軟體開發者可能會在沒有意識到的情況下將程式碼包含在應用程式中,而這些程式碼可能導致的後果卻是開發者沒有考慮到的。

即便是按照安全指南來進行開發的最安全的應用程式也可能會因此出現“安全隱患”。

即便開發者沒有惡意企圖,但這些漏洞也可能因為開發者無意識或試圖簡化開發而引入進來。

圖2:JavaScript、PHP、Python等主流程式語言爆安全漏洞

目前XDiFF已經作為開源專案公佈在GitHub上。

更具體的演講和演示內容也可以在Arnaboldi的論文中瞭解。

參考資料:

http://securityaffairs.co/

https://www.bleepingcomputer.com/

*本文作者Elaine

相關文章