FlawOpen

flawopen.com/Java डीसिरियलाइज़ेशन/ObjectInputStream सुरक्षा

क्या ObjectInputStream अविश्वसनीय डेटा के लिए सुरक्षित है?

Java सुरक्षा संदर्भ
सरल भाषा में

आमतौर पर नहीं: readObject() Java ऑब्जेक्ट फिर बनाता है और क्लास के डीसिरियलाइज़ेशन तरीके चला सकता है। यह ऐसा फ़ॉर्म है जिसके संलग्न हिस्सों को अपने निर्देश चलाने दिए जाते हैं। दुर्भावनापूर्ण stream ऐप में मौजूद क्लास व्यवहार तक पहुँच सकती है। निष्पादन क्लास, लाइब्रेरी, रास्ते और इनपुट सीमा पर निर्भर है; हर कॉल ऐसा नहीं करती।

जोखिमपूर्ण: native object deserialization
// हमलावर-नियंत्रित bytes यहाँ न दें।
try (var in = new ObjectInputStream(untrustedStream)) {
    Object value = in.readObject();
    handle(value);
}
अधिक सुरक्षित: तय डेटा प्रकार parse करें
// अविश्वसनीय इनपुट के लिए व्यापक polymorphic typing बंद रखें।
ObjectMapper mapper = new ObjectMapper();
OrderRequest value = mapper.readValue(
    untrustedBytes, OrderRequest.class
);
validate(value);

दोष तक पहुँचने का रास्ता

API, queue, cache या file import उपयोगकर्ता-नियंत्रित bytes लेता है। ObjectInputStream.readObject() तक पहुँचने पर JVM प्रक्रिया की serializable क्लास से ऑब्जेक्ट बनाती है। Gadget chain मौजूदा व्यवहार का संभावित रास्ता है, हर stream का payload नहीं। Oracle ने CVE-2015-4852 में सूचीबद्ध WebLogic संस्करणों पर T3 के ज़रिए बिना प्रमाणीकरण नेटवर्क हमले दर्ज किए। इसका अर्थ यह नहीं कि हर उपयोग दूर से पहुँच योग्य है।

native serialization हटाना संभव न हो तो

आम सवाल

क्या ObjectInputFilter readObject() सुरक्षित करता है?

संकीर्ण allowlist और सीमाएँ जोखिम घटाते हैं, पर यह सार्वभौमिक sanitizer नहीं है। अनुमत क्लास, उनका व्यवहार, filter का सक्रिय होना, ऐप सत्यापन और authorization सभी महत्वपूर्ण हैं। जहाँ संभव हो उपयोगकर्ता-नियंत्रित डेटा के लिए native serialization से बचें।

प्राथमिक स्रोत

यह भी देखें असुरक्षित Deserialization: जोखिम और बचाव | flawopen.com Newtonsoft.Json TypeNameHandling: सुरक्षित सेटिंग PHP unserialize() और अविश्वसनीय इनपुट Python pickle.load(): अविश्वसनीय डेटा का जोखिम क्या Ruby YAML.load सुरक्षित है? Psych संस्करण और safe_load .NET BinaryFormatter: जोखिम और माइग्रेशन