Dynamic Code Evaluation:Unsafe Deserialization 動態代碼評估:不安全反序列化

 
Abstract:
 
在運行時對用戶控制的對象流進行反序列化,會讓攻擊者有機會在服務器上執行任意代碼、濫用應用程序邏輯和/或致使 Denial of Service。
 
 
Explanation:
 
Java 序列化會將對象圖轉換爲字節流(包含對象自己和必要的元數據),以便經過字節流進行重構。開發人員能夠建立自定義代碼,以協助 Java 對象反序列化過程,在此期間,他們甚至可使用其餘對象或代理替代反序列化對象。在對象重構過程當中,並在對象返回至應用程序並轉換爲預期的類型以前,會執行自定義反序列化過程。到開發人員嘗試強制執行預期的類型時,代碼可能已被執行。
 
在必須存在於運行時類路徑中且沒法由攻擊者注入的可序列化類中,會自定義反序列化例程,因此這些攻擊的可利用性取決於應用程序環境中的可用類。使人遺憾的是,經常使用的第三方類,甚至 JDK 類均可以被濫用,致使 JVM 資源耗盡、部署惡意文件或運行任意代碼。
 
某些 Spring 服務導出工具會在傳輸層後臺使用 Java 序列化。這些服務的示例包括 RMI、JMSInvoker 和 HTTPInvoker。
 
例 1: RMIServiceExporter 暴露 TestService 方法。
 
<bean id="testService" class="example.TestServiceImpl"/>
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="serviceName" value="TestService"/>
    <property name="service" ref="testService"/>
    <property name="serviceInterface" value="example.TestService"/>
    <property name="registryPort" value="1199"/>
</bean>
 
 
例 2: JMSInvokerServiceExporter 暴露 TestService 方法。
 
<bean id="testService" class="example.TestServiceImpl"/>
<bean class="org.springframework.jms.remoting.JmsInvokerServiceExporter">
        <property name="serviceInterface" value="example.TestService"/>
        <property name="service" ref="testService"/>
</bean>
 
 
例 3: HTTPInvokerServiceExporter 暴露 TestService 方法。
 
<bean id="testService" class="example.TestServiceImpl"/>
<bean class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="serviceInterface" value="example.TestService"/>
        <property name="service" ref="testService"/>
</bean>
 
 
 
 
Instance ID: 33720C3BC89BFC973841923D44225B8D
 
Priority Metadata Values:
 
            IMPACT: 5.0
 
            LIKELIHOOD: 3.2
 
Legacy Priority Metadata Values:
 
            SEVERITY: 5.0
 
            CONFIDENCE: 5.0
 
 
Remediation Effort: 4.0
 
 

 
Recommendations:
 
若是可能,在沒有驗證對象流的內容的狀況下,請勿對不可信數據進行反序列化。爲了驗證要進行反序列化的類,應使用前瞻反序列化模式。
 
對象流首先將包含類描述元數據,而後包含其成員字段的序列化字節。Java 序列化過程容許開發人員讀取類描述,並肯定是繼續進行對象的反序列化仍是停止對象的反序列化。爲此,須要在應執行類驗證和確認的位置,子類化 java.io.ObjectInputStream 並提供 resolveClass(ObjectStreamClass desc) 方法的自定義實現。
 
在這種狀況下,理想的方法是將預期的類加入白名單,但在某些狀況下,此方法不必定可行。對於複雜的對象圖結構,黑名單方法更適合。請謹記,儘管用於執行代碼的某些類已公開,可是還可能存在其餘未知或未公開的類,所以,白名單方法始終都是首選方法。爲避免 Denial of Service,建議您覆蓋 resolveObject(Object obj) 方法,以便計算要進行反序列化的對象數量,並在超過閾值時停止反序列化。
 
在庫或框架(例如,使用 JMX、RMI、JMS、HTTP Invoker 時)中執行反序列化時,上述建議並不適用,由於它超出了開發人員的控制範圍。在這些狀況下,您可能須要確保這些協議知足如下要求:
 
- 未公開披露。
- 使用身份驗證。
- 使用完整性檢查。
- 使用加密。
 
此外,每當應用程序經過 ObjectInputStream 執行反序列化時,HPE Security Fortify Runtime(HPE Security Fortify 運行時)都會提供要強制執行的安全控制,以此同時保護應用程序代碼以及庫和框架代碼,防止遭到此類攻擊。
 
 
References:
 
 
 
[3] IBM, Look-ahead Java deserialization, http://www.ibm.com/developerworks/library/se-lookahead
 
[4] OWASP, Deserialization of untrusted data, https://www.owasp.org/index.php/Deserialization_of_untrusted_data
 
[5] Standards Mapping - Common Weakness Enumeration, CWE ID 502
 
[6] Standards Mapping - FIPS200, SI
 
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4, SI-10 Information Input Validation (P1)
 
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014, M7 Client Side Injection
 
[9] Standards Mapping - OWASP Top 10 2004, A6 Injection Flaws
 
[10] Standards Mapping - OWASP Top 10 2007, A2 Injection Flaws
 
[11] Standards Mapping - OWASP Top 10 2010, A1 Injection
 
[12] Standards Mapping - OWASP Top 10 2013, A1 Injection
 
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1, Requirement 6.5.6
 
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2, Requirement 6.3.1.1, Requirement 6.5.2
 
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0, Requirement 6.5.1
 
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0, Requirement 6.5.1
 
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1, Requirement 6.5.1
 
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2, Requirement 6.5.1
 
[19] Standards Mapping - SANS Top 25 2009, Insecure Interaction - CWE ID 116
 
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1, APP3510 CAT I, APP3570 CAT I
 
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10, APP3510 CAT I, APP3570 CAT I
 
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4, APP3510 CAT I, APP3570 CAT I
 
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5, APP3510 CAT I, APP3570 CAT I
 
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6, APP3510 CAT I, APP3570 CAT I
 
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7, APP3510 CAT I, APP3570 CAT I
 
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9, APP3510 CAT I, APP3570 CAT I
 
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
 
[28] Standards Mapping - Web Application Security Consortium Version 2.00, Improper Input Handling (WASC-20)
相關文章
相關標籤/搜索