程式碼安全測試第十八期:呼叫System.exit()存在安全漏洞

zktq2021發表於2021-06-11

一、為什麼呼叫System.exit()存在安全漏洞?

J2EE應用程式呼叫System.exit(),會關閉其容器。

System.exit()其實是Java中結束程式的方法,呼叫它將關閉當前的JVM虛擬機器。對於web應用程式來說,嘗試關閉應用程式容器絕不是一個值得推薦的方法,因為呼叫可以關閉應用程式的函式可以作為拒絕服務(DoS)攻擊的一種途徑。

二、呼叫System.exit()漏洞構成條件有哪些?

滿足以下條件,就構成了一個該型別的安全漏洞:

J2EE伺服器程式存在某個功能呼叫System.exit()。

三、呼叫System.exit()漏洞會造成哪些後果?

關鍵詞:DoS;崩潰、退出或重新啟動;

攻擊者訪問具有System.exit()的功能,可能會導致程式崩潰、退出或重啟,實現Dos攻擊。

四、呼叫System.exit()漏洞的防範和修補方法有哪些?

1、特權分離:具有關閉程式的功能應該是特權功能,只有具有授權的管理使用者才能使用。

2、Web應用不應該呼叫如System.exit()這樣可以導致虛擬機器退出的方法。

3、Web應用程式不應該將任何異常丟擲到伺服器,這可能會產生負面影響。

4、非Web應用程式可能具有含有System.exit()的main()方法,但不應該在其他位置呼叫。

五、呼叫System.exit()漏洞樣例:

用悟空 靜態程式碼檢測工具分析上述程式程式碼,則可以發現程式碼中存在著“呼叫System.exit()” 導致的 程式碼缺陷,如下圖:

呼叫System.exit()在CWE中被編號為CWE-382: J2EE Bad Practices: Use of System.exit()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2776504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章