Unrestricted deserializing from a privileged context allows an attacker to supply crafted input which, upon deserialization, can yield objects that the attacker does not have permissions to construct. Construction of a custom class loader is one example (See SEC07-J. Do not grant untrusted code access to classes existing in forbidden packages and SEC11-J. Do not allow unauthorized construction of classes in forbidden packages).
Noncompliant Code Example
...
Consider the default security model of an applet that does not allow access to sun.util.calendar.ZoneInfo
because all classes within the "sun
" package are treated as untrusted. As a result, prior to JDK 1.6 u11, the acceptable method for an unsigned applet to deserialize a Zoneinfo
object was to execute the call from a privileged context, such as a doPrivileged()
block. This constitutes a vulnerability because there is no guaranteed method of knowing whether the serialized stream contains a Zoneinfo
object and not a malicious serializable class. The vulnerable code casts the malicious object to the ZoneInfo
type which typically causes a ClassCastException
. This exception however, is of little consequence as it is possible to store a reference to the newly created object in some static context so that the garbage collector does not act upon it.
...