When objects are being serialized using the writeObject()
method, if the same object is encountered more than once then it is written to the output stream only once and, after the first occurrence, only a reference to the first occurrence is written to the stream. Correspondlingly, the readObject()
method resolves references written by writeObject()
to multiple occurrences of the same object.
On the other hand, according to the Java API [[API 2006]], the writeUnshared()
method:
Writes an "unshared" object to the ObjectOutputStream. This method is identical to writeObject, except that it always writes the given object as a new, unique object in the stream (as opposed to a back-reference pointing to a previously serialized instance).
Correspondingly, the readUnshared()
method:
Reads an "unshared" object from the ObjectInputStream. This method is identical to readObject, except that it prevents subsequent calls to readObject and readUnshared from returning additional references to the deserialized instance obtained via this call.
Noncompliant Code Example
This noncompliant code example does something bad using writeUnshared()
.
// need some code here
Compliant Solution
This compliant solution overcomes the problem of the NCCE.
// need some code here
Risk Assessment
Using the writeUnshared()
and readUnshared()
methods may be bad.
Guideline |
Severity |
Likelihood |
Remediation Cost |
Priority |
Level |
---|---|---|---|---|---|
MSC62-J |
medium |
low |
low |
P6 |
L2 |
Automated Detection
Automated detection is straightforward.
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this guideline on the CERT website.
Bibliography
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f27ca90d-9d0b-4598-9ba9-06596cce2be6"><ac:plain-text-body><![CDATA[ |
[[API 2006 |
AA. References#API 06]] |
[Class ObjectOutputStream |
http://download.oracle.com/javase/6/docs/api/java/io/ObjectOutputStream.html] and [Class ObjectInputStream |
http://download.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html]]]></ac:plain-text-body></ac:structured-macro> |