程式碼安全測試第七期:不安全的反射漏洞缺陷

zktq2021發表於2021-05-26

1、 什麼是不安全的反射漏洞?

反射這一概念最早由程式設計開發人員Smith在1982年提出,主要指應用程式訪問、檢測、修改自身狀態與行為的能力。這一概念的提出立刻吸引了程式設計界的極大關注,各種研究工作隨之展開,隨之而來引發程式設計革命,出現了多種支援反射機制的物件導向程式語言。

在Java程式語言中,Java反射機制主要提供了以下功能:

·在執行時判斷任意一個物件所屬的類;

·在執行時構造任意一個類的物件;

·在執行時判斷任意一個類所具有的成員變數和方法;

·在執行時呼叫任意一個物件的方法;

·生成動態代理。

不安全的反射是指應用程式使用具有反射功能的外部輸入來選擇要使用的類或程式碼,可能被攻擊者利用而輸入或選擇不正確的類或程式碼。如果發生這種情況,那麼攻擊者可能會建立開發人員不想要的邏輯路徑。這些路徑可能會繞過身份驗證或訪問控制檢查,或者導致應用程式異常執行。執行未經授權的程式碼或命令、改變執行邏輯、崩潰、退出或重啟,讀取應用程式資料等。

2、不安全的反射漏洞的構成條件有哪些?

①不可靠的外部輸入進入程式;

②程式使用外部輸入進行例項化類並執行。

3、不安全的反射漏洞會造成哪些後果?

攻擊者可能能夠執行攻擊者無法直接訪問的程式碼;

攻擊者可以在錯誤的位置或錯誤的時間呼叫其它程式碼,這可能會更改關鍵的系統狀態。

③攻擊者能夠使用反射來呼叫錯誤的程式碼,使用違反API的意外引數,這可能導致應用程式退出或掛起。透過導致呼叫錯誤的程式碼,攻擊者可能能夠觸發執行時錯誤,從而洩露錯誤訊息中的敏感資訊。

4、如何防範修補不安全的反射漏洞?

重構程式碼以避免使用反射;

儘量避免使用使用者控制的輸入來選擇和載入類或程式碼。

5、不安全的反射漏洞樣例:

用靜態程式碼檢測分析上述程式程式碼,則可以發現程式碼中存在著不安全的反射 安全漏洞,如下圖:

不安全反射在CWE中被編號為CWE-470:Use of Externally-Controlled Input to Select Classes or Code('Unsafe Reflection'),中文意思是:使用外部控制的輸入來選擇類或程式碼(不安全反射)。


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

相關文章