google code pretty

顯示具有 Fortify 標籤的文章。 顯示所有文章
顯示具有 Fortify 標籤的文章。 顯示所有文章

2016-06-30

Fortify 說明 - Dynamic Code Evaluation: Unsafe Deserialization

問題種類:Dynamic Code Evaluation: Unsafe Deserialization

問題說明:
在執行階段,使用使用者控制的物件串流可能會讓攻擊者在伺服器上執行任意程式碼、濫用應用程式邏輯或造成 Denial of Service。

Java序列化就是把 object 轉換成字節流,便于保存在 memory、文件、database 中,Java中的ObjectOutputStream?的writeObject()方法可以實現序列化。
Java反序列化即逆過程,由字節流還原成 object。ObjectInputStream?的readObject()方法用于反序列化。

ref: OWASP 網站 https://www.owasp.org/index.php/Deserialization_of_untrusted_data

建議處理:
升級執行環境 JDK 版本 (雖然 fortify 還是會掃出來)
JDK 有持續出新版修正問題 8u65 有修正 CVE-2015-4805 弱點 「https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-4805」,此弱點即為 Serialization 相關弱點

8u65 修正內容 http://www.oracle.com/technetwork/topics/security/cpuoct2015-2367953.html8u65 release note http://www.oracle.com/technetwork/java/javase/8u65-relnotes-2687063.html

2016-05-30

Fortify 說明 - Log Forging

問題種類:Log Forging

問題說明:
Log中存入由不可信任來源傳入之字串,導致 Log 之正確性存在有風險。

建議處理:
在記錄 Log 時,儘可能使用由伺服器所控制的值,而非使用者所提供的資料,若要使用使用者所提供的資料,至少要過濾 \n 與 \r這些符號 (但即使過濾了,仍有風險存在也會被認列弱點)。

可用已知 Library 進行斷行與特殊字元過濾
例如:
import org.apache.commons.lang3.StringEscapeUtils; 

String escapedToken = input.replace("\n", "").replace("\r", ""); //必要過濾條件
escapedToken = StringEscapeUtils.escapeJava(escapedToken); //次要過濾條件

2016-05-19

Fortify 說明 - XML External Entity Injection

問題種類:XML External Entity Injection
問題發生原因:XML解析器不會阻止及限制外部實體解析,如此可導致解析器遭受XML外部實體攻擊。

弱點解決辦法:
增加下面紅字兩行屬性,應以安全方式設定 XML 解析器,讓其不允許將外部實體包含在傳入的 XML 文件中。
documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);documentBuilder = documentBuilderFactory.newDocumentBuilder();
document = documentBuilder.parse(filepath);

2016-04-21

Fortify 說明 - Portability Flaw: Locale Dependent Comparison

問題種類:Portability Flaw: Locale Dependent Comparison
問題說明 : 字串處理或轉換大小寫時,需要指定語系

錯誤程式範例:
if(args[0].toUpperCase().equals("abcd")){
}

修正的程式範例:
if(args[0].toUpperCase(Locale.TAIWAN).equals("abcd")){
}

或
Locale.setDefault(Locale.TRADITIONAL_CHINESE);