Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
research-article

An In-depth Study of Java Deserialization Remote-Code Execution Exploits and Vulnerabilities

Published: 13 February 2023 Publication History

Abstract

Nowadays, an increasing number of applications use deserialization. This technique, based on rebuilding the instance of objects from serialized byte streams, can be dangerous since it can open the application to attacks such as remote code execution (RCE) if the data to deserialize is originating from an untrusted source. Deserialization vulnerabilities are so critical that they are in OWASP’s list of top 10 security risks for web applications. This is mainly caused by faults in the development process of applications and by flaws in their dependencies, i.e., flaws in the libraries used by these applications. No previous work has studied deserialization attacks in-depth: How are they performed? How are weaknesses introduced and patched? And for how long are vulnerabilities present in the codebase? To yield a deeper understanding of this important kind of vulnerability, we perform two main analyses: one on attack gadgets, i.e., exploitable pieces of code, present in Java libraries, and one on vulnerabilities present in Java applications. For the first analysis, we conduct an exploratory large-scale study by running 256515  experiments in which we vary the versions of libraries for each of the 19 publicly available exploits. Such attacks rely on a combination of gadgets present in one or multiple Java libraries. A gadget is a method which is using objects or fields that can be attacker-controlled. Our goal is to precisely identify library versions containing gadgets and to understand how gadgets have been introduced and how they have been patched. We observe that the modification of one innocent-looking detail in a class – such as making it public – can already introduce a gadget. Furthermore, we noticed that among the studied libraries, 37.5% are not patched, leaving gadgets available for future attacks.
For the second analysis, we manually analyze 104 deserialization vulnerabilities CVEs to understand how vulnerabilities are introduced and patched in real-life Java applications. Results indicate that the vulnerabilities are not always completely patched or that a workaround solution is proposed. With a workaround solution, applications are still vulnerable since the code itself is unchanged.
Appendices

A Vulnerable Applications and Their Patches

Table A.1.
ApplicationCVECode availabilityVulnerability descriptionApplied patchGADVUC
WebSphere Application Server (WAS) Community Edition 3.0.0.3CVE-2013-1777http://geronimo.apache.org/downloads.htmlRemote exploits can be prevented by hiding the naming (1099) and JMX (9999) ports behind a firewall or binding the ports to a local network interface.Add instruction Thread.currentThread().setContext ClassLoader(getClass().getClassLoader()); in class JMXConnector and other instructions in the class JMXSecureConnector (patch in http://svn.apache.org/viewvc?view=revision&sortby=date&revision=1458113) X 
Jboss RichFaces (Jboss-RF) 3.x \(\lt =\) 3.3.3 and 4.x \(\lt =\) 4.3.2CVE-2013-2165https://richfaces.jboss.org/download/archive.htmlA flaw in the way JBoss RichFaces handled deserialization allowing a remote attacker to trigger the execution of the deserialization methods in any serializable class deployed on the server.Create a whitelist of classes that are available to participate in the RichFaces resource deserialisation process https://www.bleathem.ca/blog/richfaces-security-advisory-cve-2013-2165/ and https://codewhitesec.blogspot.com/2018/05/poor-richfaces.html X 
Android \(\lt\) 5.0.0CVE-2014-7911https://android.googlesource.com/?format=HTMLluni/src/main/java/java/io/ ObjectInputStream.java in the java.io.ObjectInputStream implementation does not verify that deserialization will result in an object that met the requirements for serialization, which allows attackers to execute arbitrary code via a crafted finalize method for a serialized object in an ArrayMap Parcel within an intent sent to system_service, as demonstrated by the finalize method of android.os.BinderProxyAdd some checks that the class being deserialized matches the type information (enum, serializable, externalizable) held in the stream. Delayed static initialization of classes until the type of the class has been validated against the stream content in some cases. (see https://android.googlesource.com/platform/libcore/+/738c833d38d41f8f76eb7e77ab39add82b1ae1e2%5E%21/#F0 and https://android.googlesource.com/platform/libcore/+/738c833d38d41f8f76eb7e77ab39add82b1ae1e2) X 
Atlassian Bamboo before 5.9.9 and 5.10.x before 5.10.0CVE-2014-9757https://www.atlassian.com/software/bamboo/download-archivesThe Ignite Realtime Smack XMPP API, as used in Atlassian Bamboo before 5.9.9 and 5.10.x before 5.10.0, allows remote configured XMPP servers to execute arbitrary Java code via serialized data in an XMPP messageThe origin of the attack is the Smack library used in Bamboo. The patched version Bamboo 5.10.0 uses an updated version of the smack library in which a lot of modifications are brought: removing some classes (like Connection, Chat, ConnectionManager), modify the class XMPPConnection into an Interface, etc. (Patch obtained doing the diff between the version 5.9.7 and 5.10.0 of Bamboo, and more precisely the smack library). X 
Atlassian Bamboo 2.2 before 5.8.5 and 5.9.x before 5.9.7CVE-2015-6576https://www.atlassian.com/software/bamboo/download-archivesBamboo 2.2 before 5.8.5 and 5.9.x before 5.9.7 allows remote attackers with access to the Bamboo web interface to execute arbitrary Java code via an unspecified resource.Removes the deserializeObject method from the DeliverMessageServlet vulnerable class. X 
Atlassian Bamboo before 5.9.9 and 5.10.x before 5.10.0CVE-2015-8360https://www.atlassian.com/software/bamboo/download-archivesAn unspecified resource in Atlassian Bamboo before 5.9.9 and 5.10.x before 5.10.0 allows remote attackers to execute arbitrary Java code via serialized data to the JMS port.Use of black and white lists for serialization (patch obtained using the diff between the versions 5.10.0 and 5.9.7: there are two files serialization-blacklist.list and serialization-whitelist.list in the path “atlassian-bamboo-5.10.0/atlassian-bamboo/WEB-INF/classes”) X 
Jenkins \(\lt\) 1.638 and LTS \(\lt\) 1.625.2CVE-2015-8103https://github.com/jenkinsci/jenkins https://wiki.jenkins.io/display/JENKINS/Jenkins+CLIThe Jenkins CLI subsystem in Jenkins before 1.638 and LTS before 1.625.2 allows remote attackers to execute arbitrary code via a crafted serialized Java objectUnknown patch. Mitigation: remove/disable the CLI support inside of the running Jenkins server (https://www.jenkins.io/blog/2015/11/06/mitigating-unauthenticated-remote-code-execution-0-day-in-jenkins-cli/) X 
VMware vRealize Orchestrator 6.x, vCenter Orchestrator 5.x, vRealize Operations 6.x, vCenter Operations 5.x, and vCenter Application Discovery Manager (vADM) 7.xCVE-2015-6934https://docs.vmware.com/en/vRealize-Orchestrator/7.6/rn/VMware-vRealize-Orchestrator-76-Release-Notes.htmlRemote attackers can execute arbitrary commands via a crafted serialized Java object, related to the Apache Commons Collections libraryReplace the Commons collections library by the commons-collections-3.2.2.jar in the dependencies of the mentioned products (see https://kb.vmware.com/s/article/2141244 and https://kb.vmware.com/s/article/2141244) X 
Adobe Experience Manager (Adobe-EM) 5.6.1, 6.0.0, and 6.1.0CVE-2016-0958NoAdobe Experience Manager 5.6.1, 6.0.0, and 6.1.0 might allow remote attackers to have an unspecified impact via a crafted serialized Java object.Unknown patch X 
Hazelcast \(\lt\) 3.11CVE-2016-10750https://github.com/hazelcast/hazelcastA flaw was found in the cluster join procedure in Hazelcast. This flaw allows an attacker to gain remote code execution via Java deserialization.Add class names blacklisting and whitelisting by defining the following system properties: hazelcast.serialization.filter.enabled, hazelcast.serialization.filter.blacklist .classes, hazelcast.serialization.filter .blacklist.packages, hazelcast.serialization.filter.whitelist .classes and hazelcast.serialization .filter.whitelist.packages (see https://docs.hazelcast.org/docs/3.10.5/manual/html-single/index.html#untrusted-deserialization-protection) X 
Apache OFBiz 12.04.x \(\lt\) 12.04.06 and 13.07.x \(\lt\) 13.07.03CVE-2016-2170http://archive.apache.org/dist/ofbiz/Remote attackers can execute arbitrary commands via a crafted serialized Java object, related to the Apache Commons Collections libraryUpdate commons collections to 4.1 and Comment out RMI related code (see https://issues.apache.org/jira/browse/OFBIZ-6942, https://markmail.org/message/nh6csf4fun5n6e23 and https://issues.apache.org/jira/browse/OFBIZ-6726) X 
SolarWinds Virtualization Manager \(\lt =\) 6.3.1CVE-2016-3642NoThe vulnerability exists due to the deserialization of untrusted data in the RMI service running on port 1099/TCP. A remote attacker can execute operating system commands as an unprivileged userInaccessible patch (it is mentioned that there is a hotfix in https://packetstormsecurity.com/files/137486/Solarwinds-Virtualization-Manager-6.3.1-Java-Deserialization.html and https://seclists.org/fulldisclosure/2016/Jun/29 but no more details are given) X 
HP Network Node Manager i (HP-NNMi) Software 10.00, 10.01 (patch1), 10.01 (patch 2), 10.10CVE-2016-4398NoA vulnerability in Apache Commons Collections for handling Java object deserialization was addressed by HPE Network Node Manager i (NNMi) Software. The vulnerability could be remotely exploited to allow remote code execution.Unknown patch X 
Apache Wicket 6.x \(\lt\) 6.25.0 and 1.5.x \(\lt\) 1.5.17CVE-2016-6793https://archive.apache.org/dist/wicket/The DiskFileItem class in Apache Wicket allows remote attackers to cause a denial of service (infinite loop) and write to, move, and delete files with the permissions of DiskFileItem, and if running on a Java VM before 1.3.1, execute arbitrary code via a crafted serialized Java object.Change the class DiskFileItem: add a check instruction Files.checkFileName(tempDir.getPath()) in the method getTempFile() of the patched version (patch obtained by doing the diff between the 6.24.0 and 6.25.0 versions) X 
Red Hat JBoss Enterprise Application Platform (Jboss-EAP) 4 and 5CVE-2016-7065https://developers.redhat.com/products/eap/downloadJBoss EAP 4 and 5 JMX servlet is exposed on port 8080/TCP with authentication by default. The communication employs serialized Java objects, encapsulated in HTTP requests and responses. The server deserializes these objects. This behavior can be exploited to cause a denial of service and potentially execute arbitrary codeRed Hat does not fix the issue because JBoss EAP 4 is out of maintenance support and JBoss EAP 5 is close to the end of its maintenance period (see https://seclists.org/fulldisclosure/2016/Nov/143 and https://seclists.org/fulldisclosure/2016/Nov/143) X 
Soffid IAM \(\lt\) 1.7.5CVE-2017-9363https://github.com/SoffidIAM/consoleUntrusted Java serialization in Soffid IAM console before 1.7.5 allowing remote attackers to achieve arbitrary remote code execution via a crafted authentication requestDisable two features in the class servlet.SignatureReceiver via throwing two exceptions new ServletException(“Disabled feature”); and new UiException(“Disabled feature”); (see https://github.com/SoffidIAM/console/commit/8e9e7c9e537acfc2a245fbbeb41a143b5b4f7230#diff-544c1cb1ac64f2f62b6b326bd0b1b6addc17f19416878d319d3643e302a043b7) X 
ZTE ZXIPTV-EPG \(\lt\) V5.09.02.02T4CVE-2017-10934NoThis product uses the Java RMI service in which the servers use the Apache Commons Collections (ACC) library that may result in Java deserialization vulnerabilities. An unauthenticated remote attacker can exploit the vulnerabilities by sending a crafted RMI request to execute arbitrary code on the target hostUnknown patch. Workaround: Ensure that all exposed ports used by the server, including the RMI registry port, are firewalled from any untrusted IP address. (see http://support.zte.com.cn/support/news/LoopholeInfoDetail.aspx?newsId=1008682) X 
Akka versions \(\lt =\) 2.4.16 and 2.5-M1CVE-2017-1000034https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.12An attacker that can connect to an ActorSystem exposed via Akka Remote over TCP can gain remote code execution capabilities in the context of the JVM process that runs the ActorSystem under some conditions (JavaSerializer is enabled (default in Akka 2.4.x), etc.)The system is configured with disabled Java serializer: using DisabledJavaSerializer instead of JavaSerializer (see the file reference.conf for explanation). Additional protection can be achieved when running in an untrusted network by enabling TLS with mutual authentication. https://doc.akka.io/docs/akka/2.4/security/2017-02-10-java-serialization.html, https://akka.io/blog/news/2017/02/10/akka-2.4.17-released and https://doc.akka.io/docs/akka/2.4/scala/remoting.html#remote-tls-scala X 
Cisco Unity Express (Cisco-UE) \(\lt\) release 9.0.6CVE-2018-15381NoA remote user can create specially crafted content that, when loaded by the target user, will trigger a Java deserialization flaw and execute arbitrary code on the target user’s system. The code will run with root privileges.Workaround: this vulnerability can be exploited over TCP port 1099. The CUE does not need this port to be open externally and may be blocked to protect against remote exploitation of this vulnerability. An administrator can configure an access control list that blocks all traffic with a destination port of TCP/1099 from reaching the CUE. (see https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20181107-cue) X 
Apache Storm versions 1.1.0 to 1.2.2CVE-2018-11779https://archive.apache.org/dist/storm/When the user is using the storm-kafka-client or storm-kafka modules, it is possible to cause the Storm UI daemon to deserialize user provided bytes into a Java class.Update implementation of serializable classes in v1.2.3: remove the indirect call to readObject from getSetComponentObject method (using the diff between the vulnerable 1.2.2 version and the non vulnerable 1.2.3 version) X 
Jenkins Pipeline supporting APIs Plugin \(\lt =\) 2.17CVE-2018-1000058https://updates.jenkins.io/download/plugins/workflow-support/Methods related to Java deserialization like readResolve implemented in Pipeline scripts were not subject to sandbox protection, and could therefore execute arbitrary code. This could be exploited e.g. by regular Jenkins users with the permission to configure Pipelines in Jenkins, or by trusted committers to repositories containing Jenkinsfiles.Adding sandboxing: reinforcement of the class RiverWriter using a try/catch bloc in which the serialization is carried out inside a GroovySandbox.runInSandbox() method. The class RiverReader is also strengthen by performing the deserialization inside a sandbox presented by an inner class SandboxedUnmarshaller. The patch s found using the diff between the 2.17 (vulnerable) and 2.18 (patched) versions. X 
Log4jCVE-2019-17571https://github.com/apache/log4jA vulnerable SocketServer class may lead to the deserialization of untrusted data allowing an attacker to remotely execute arbitrary code when combined with a deserialization gadgetAdd class filtering to AbstractSocketServer: this allows a whitelist of class names to be specified to configure which classes are allowed to be deserialized in both TcpSocketServer and UdpSocketServer (link: https://git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;h=5dcc192) X 
JetBrains TeamCity before 2019.1.4CVE-2019-18364https://www.jetbrains.com/fr-fr/teamcity/download/other.htmlInsecure Java Deserialization could potentially allow remote code executionUnknown patch (researching patch exceeds time limit) X 
Apache Dubbo 2.7.0 before 2.7.5, 2.6.0 before 2.6.8, and 2.5.x versionsCVE-2019-17564https://github.com/apache/dubboAn attacker may submit a POST request with a Java object in it to completely compromise a Provider instance of Apache Dubbo, if this instance enables HTTP.The patched version does not support outdated http-invoker rpc protocol anymore (see https://github.com/apache/dubbo/commit/9b18fe228971eaeca9b87d7b7e95df1c2a8ff91b and https://github.com/apache/dubbo/releases/tag/dubbo-2.7.5) X 
Apache Ofbiz from 16.11.01 to 16.11.05CVE-2019-0189https://archive.apache.org/dist/ofbiz/This issue is exposed by the “webtools/control/httpService” URL, and uses Java deserialization to perform code execution. In the HttpEngine, the value of the request parameter serviceContext is passed to the deserialize method of XmlSerializer.Improve ObjectInputStream class and redefine it as a new class SafeObjectInputStream in which there is an added whitelist. Also add objects from org.apache.commons.fileupload (namely DiskFileItem and FileItemHeadersImpl) as non-serializable in this class SafeObjectInputStream (see the diff between the two versions 16.11.05 and 16.11.06. See also https://gitbox.apache.org/repos/asf?p=ofbiz-framework.git;a=blob;f=framework/base/src/main/java/org/apache/ofbiz/base/util/SafeObjectInputStream.java;h=d50cfbf11fc4d3b5855c53cb38a6cde7e101dc83;hb=3f60efb) X 
Apache TapestryCVE-2019-0195https://downloads.apache.org/tapestry/Manipulating classpath asset file URLs, an attacker could guess the path to a known file in the classpath and have it downloaded. It is possible to download arbitrary class files from the classpath by providing a crafted asset file URL. An attacker is able to download the file AppModule.class by requesting the URL “http://localhost:8080/assets/something/services/AppModule.class ” which contains an HMAC secret key.The fix for that bug was a blacklist filter that checks if the URL ends with ”.class”, ”.properties” or ”.xml”. However, it is proven that this blacklist solution can simply be bypassed by appending a “/” at the end of the URL: “http://localhost:8080/assets/something/services/AppModule.class/ ” (source: https://lists.apache.org/thread.html/r237ff7f286bda31682c254550c1ebf92b0ec61329b32fbeb2d1c8751@%3Cusers.tapestry.apache.org%3E) X 
Apache TomcatCVE-2020-9484https://github.com/apache/tomcatDeserialization flaw in session persistence storage FileStore leading to remote code executionUpdate the class FileStore with some checks (patch in https://github.com/apache/tomcat/commit/bb33048e3f9b4f2b70e4da2e6c4e34ca89023b1b) X 
OpenNMS Horizon \(\lt\) 26.0.1 and Meridian before 2018.1.19 and 2019 before 2019.1.7CVE-2020-12760https://github.com/OpenNMS/opennms/releases/tag/opennms-26.0.1-1The ActiveMQ channel configuration allowed for arbitrary deserialization of Java objects leading to remote code execution for any authenticated channel user regardless of its assigned permissionsRemove a parameter after stopping the use of serialized object messages in a file applicationContext-daemon.xml: <property name=”trustAllPackages” value=”true”/> (see https://github.com/OpenNMS/opennms/pull/2983 and https://github.com/OpenNMS/opennms/pull/2983/files/e21fc14ce355533493da0db815bd81a66e291382) https://github.com/davidhalter/parso/issues/75#) X 
IBM Maximo Asset Management 7.6.0 and 7.6.1CVE-2020-4521https://github.com/nishi2go/maximo-dockerIBM Maximo Asset Management could allow a remote authenticated attacker to execute arbitrary code on the system, caused by an unsafe deserialization in Java. By sending specially-crafted request, an attacker could exploit this vulnerability to execute arbitrary code on the systemInaccessible patch (when connecting to https://www.ibm.com/support/pages/node/6332587 an error message (“No applicable IBM support agreement found for one or more of the products you selected”) appears) X 
Cisco Security Manager (Cisco-SM)CVE-2020-27131NoMultiple vulnerabilities in the Java deserialization function that is used by Cisco Security Manager could allow an unauthenticated, remote attacker to execute arbitrary commands on an affected device. These vulnerabilities are due to insecure deserialization of user-supplied content by the affected software. An attacker could exploit these vulnerabilities by sending a malicious serialized Java object to a specific listener on an affected system. A successful exploit could allow the attacker to execute arbitrary commands on the device with the privileges of NT AUTHORITY/SYSTEM on the Windows target host. Cisco has not released software updates that address these vulnerabilitiesUnknown patch X 
Taoensso Nippy \(\lt\) 2.14.2CVE-2020-24164https://github.com/ptaoussanis/nippyA deserialization flaw is present in Taoensso Nippy before 2.14.2. In some circumstances, it is possible for an attacker to create a malicious payload that, when deserialized, will allow arbitrary code to be executed. This occurs because there is automatic use of the Java Serializable interface: Nippy introduced a feature to allow the automatic use of Java’s Serializable interface as a fallback for types that Nippy didn’t support via its own Freezable protocol.Use a predicate (fn allow-class? [class-name]) fn that can be assigned to ”*freeze-serializable-allowlist*” and/or ”*thaw-serializable-allowlist*”. This predicate is used to record information about which classes have been using Nippy’s Serializable support in the user’s environment (see http://ptaoussanis.github.io/nippy/taoensso.nippy.html#var-allow-and-record-any-serializable-class-unsafe) X 
Apache Tapestry 4CVE-2020-17531https://github.com/apache/tapestry4Apache Tapestry 4 will attempt to deserialize the “sp” parameter even before invoking the page’s validate method, leading to deserialization without authenticationApache Tapestry 4 reached end of life in 2008 and no update to address this issue is released (the upgrade to the latest Apache Tapestry 5 version is necessary) (see https://lists.apache.org/thread.html/r700a6aa234dbff0555d4187bdc8274d7e4c0afbf35b9a3457f09ee76%40%3Cusers.tapestry.apache.org%3E) and https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-17531) X 
Gradle Enterprise Maven ExtensionCVE-2020-15777https://mvnrepository.com/artifact/com.gradle/gradle-enterprise-maven-extensionThe extension uses a socket connection to send serialized Java objects. Deserialization is not restricted to an allow-list, thus allowing an attacker to achieve code execution via a malicious deserialization gadget chain. The socket is not bound exclusively to localhost. The port this socket is assigned to is randomly selected and is not intentionally exposed to the public (either by design or documentation). This could potentially be used to achieve remote code execution and local privilege escalation.Add an allow-list in a class ValidatingObjectInputStream (patch obtained by doing the diff between the vulnerable 1.5.3 and the non-vulnerable 1.6 versions) X 
Apache Camel Netty (Camel-Netty)CVE-2020-11973https://github.com/apache/camel/tree/main/components/camel-nettyApache Camel RabbitMQ enables Java deserialization, by default, without any means of disabling which can lead to arbitrary code being executed. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availabilityDisable object serialization: only Strings are allowed to be serialized by default, anything else will only be serialized with a custom encoder/decoder (https://github.com/apache/camel/pull/3537) X 
Apache Camel RabbitMQ (Camel-RabbitMQ) 2.22.x, 2.23.x, 2.24.x, 2.25.0, 3.0.0 up to 3.1.0CVE-2020-11972https://github.com/apache/camelApache Camel RabbitMQ enables Java deserialization, by default, without any means of disabling which can lead to arbitrary code being executed. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availabilityDisable RabbitMQ Java serialization by default. It can be re-enabled using a parameter ”allowMessageBodySerialization” in a class RabbitMQEndpoint (see https://github.com/zregvart/camel/commit/c15ed20d92b5c920e9e55fe584f8e412b23f14f6) X 
Emissary 6.4.0CVE-2021-32634https://github.com/NationalSecurityAgency/emissaryUnsafe Deserialization of post-authenticated requests to the WorkSpaceClientEnqueue.action REST endpoint.Remove unsafe serialization from PayloadUtil. Remove the class WorkBundle from the list of serializable classes, remove some classes like MoveToAction and MoveToAdapter. Replace the ObjectInputStream by DataInputStream (https://github.com/NationalSecurityAgency/emissary/security/advisories/GHSA-m5qf-gfmp-7638 X 
Apache Dubbo prior to 2.6.9 and 2.7.9CVE-2021-30179https://github.com/apache/dubboApache Dubbo by default supports generic calls to arbitrary methods exposed by provider interfaces. These invocations are handled by the GenericFilter which will find the service and method specified in the first arguments of the invocation and use the Java Reflection API to make the final call. The signature for the invoke or invokeAsync methods is Ljava/lang/String;[Ljava/lang/String;[Ljava/ lang/Object; where the first argument is the name of the method to invoke, the second one is an array with the parameter types for the method being invoked and the third one is an array with the actual call argumentsNative Java deserialization will not be activated defaultly. If user still wants use it, set dubbo.security.serialize.generic.native -java-enable as true in environment. An embedded serialization block list is introduced in dubbo-common/src/main/resources/security /serialize.blockedlist. (see https://github.com/apache/dubbo/releases/tag/dubbo-2.7.10) X 
Apache OFBizCVE-2021-29200https://github.com/apache/ofbiz-frameworkAn unauthenticated user can perform an RCE attackUpdate UtilObject class. Restrict unauthorized deserialisations to java.rmi instead of java.rmi.server. (patch in https://issues.apache.org/jira/browse/OFBIZ-12216 and https://gitbox.apache.org/repos/asf?p=ofbiz-framework.git;h=1bc8a20) X 
 CVE-2021-26295https://github.com/apache/ofbiz-frameworkAn unauthenticated attacker can use this vulnerability to successfully take over Apache OFBizThe code fix is to “blacklist” RMI server to prevent it from being exploited. (see https://issues.apache.org/jira/browse/OFBIZ-12167 and https://lists.apache.org/thread.html/r0d97a3b7a14777b9e9e085b483629d2774343c4723236d1c73f43ff0@%3Cdev.ofbiz.apache.org%3E X 
McAfee Database Security (DBSec) \(\lt\) 4.8.2CVE-2021-23895NoA remote authenticated attacker can create a reverse shell with administrator privileges on the DBSec server via carefully constructed Java serialized object sent to the DBSec serverUnknown patch X 
 CVE-2021-23894NoA remote unauthenticated attacker can create a reverse shell with administrator privileges on the DBSec server via carefully constructed Java serialized object sent to the DBSec server.Unknown patch X 
Table A.1. 29 Studied CVEs and Applied Patches
The first column designate the name of the studied vulnerable application; the column “CVE” mentions the CVE ID associated to the vulnerability; the third column “Code availability” indicates if the source code or the binary files are available: if yes, we give the URL for this code, otherwise we put “No”; the description of each vulnerability is presented in the fourth column; patching or workaround actions are described in the column “Applied patch”; the last three columns desingate the category of the vulnerability at hand: GA for GAdgets, DV for Deserialization Vulnerabilities and UC for Untrusted Code. The rows having UC as category are colored in gray because they are not in our scope of study in this article. Note that the complete table, with 104 CVEs, is available at https://github.com/software-engineering-and-security/java- deserialization-rce.

B Pre-processing for Use of Filters

Table B.1.
Attack name(De)Serialized typesIs the first object to deserialize in external library type (Y/N)?
BeanShell1PriorityQueue \(\lt\) E \(\gt\) (containing an int and an XThis$Handler), E is an Integer, This, BshMethodN
ClojureHashMap \(\lt\) K,V \(\gt\) (containing int and float), K is an AbstractTableModel$ff19274aN
CommonsBeanUtils1PriorityQueue \(\lt\) E \(\gt\) (containing an int and a BeanComparator \(\lt\) T \(\gt\) (in which T is a TemplatesImpl), E is a TemplatesImplN
CommonsCollections1AnnotationInvocationHandler (containing Class \(\lt\) ? extends Annotation \(\gt\) , Map \(\lt\) String, Object \(\gt\) which is a LazyMap containing ChainedTransformer and a HashMap)), InvokerTransformerN
CommonsCollections2PriorityQueue \(\lt\) E \(\gt\) (containing int, TransformingComparator), E is a TemplatesImpl, InvokerTransformerN
CommonsCollections3AnnotationInvocationHandler, InstantiateTransformer, TemplatesImplN
CommonsCollections4PriorityQueue \(\lt\) E \(\gt\) (containing int, TransformingComparator), E is an Integer, ChainedTransformer, InstantiateTransformer and TemplatesImplN
CommonsCollections5BadAttributeValueExpException (containing Object (which is a String)), TiedMapEntry, LazyMap, ChainedTransformer, InvokerTransformerN
CommonsCollections6HashSet \(\lt\) E \(\gt\) (containing an Object), E is a TiedMapEntry, LazyMap, ChainedTransformer, InvokerTransformer 
CommonsCollections7HashTable \(\lt\) K,V \(\gt\) (containing int and float), K is a LazyMap and V is an Integer, ChainedTransformer, InvokerTransformerN
Groovy1AnnotationInvocationHandler (containing a ConvertedClosure and Class \(\lt\) T \(\gt\) ), ConversionHandler, Closure \(\lt\) V \(\gt\) N
ROMEHashMap \(\lt\) K,V \(\gt\) (containing int, float, ObjectBean), EqualsBean, ToStringBean, TemplatesImplN
MozillaRhino1BadAttributeValueExpException (containing an Object which is a String), ScriptableObject, TemplatesImplN
MozillaRhino2NativeJavaObject (containing org.mozilla.javascript.tools.shell.Environment, Scriptable interface), ScriptableObject, NativeJavaObject, MemberBox, TemplatesImplY (class in js-1.7-R2)
Spring1SerializableTypeWrapper$MethodInvokeTypeProvider (containing TypeProvider (which is a TemplatesImpl), String and int)Y (in spring-core library)
Spring2SerializableTypeWrapper$MethodInvokeTypeProvider (containing String, int and TypeProvider (which is a TemplatesImpl)), JdkDynamicAopProxyY (in spring-core library)
Click1PriorityQueue \(\lt\) E \(\gt\) (containing int, Column$ColumnComparator), E is a TemplatesImpl, ColumnN
Vaadin1BadAttributeValueExpException (containing an Object which is a String), TemplatesImplN
JDK7U21LinkedHashSet \(\lt\) E \(\gt\) (HashSet \(\lt\) E \(\gt\) ) (containing Object), E is a TemplatesImpl, HashMap \(\lt\) K,V \(\gt\) , AnnotationInvocationHandlerN
Table B.1. Types Extracted from Known Attacks
Table B.2.
Application nameDeserialized types
Apache-wicket (6.24.0)String, ObjectInputStream, ReplaceObjectInputStream (containing HashMap \(\lt\) String, Component \(\gt\) (), ClassLoader (containing boolean, Hashtable, Certificate[], Vector, HashMap, Set, URLClassPath)), List \(\lt\) Serializable \(\gt\) , Map \(\lt\) String, SessionEntry \(\gt\) (for SessionEntry, there are String, boolean, PageWindowManager (containing PageWindowInternal (with int, long, List \(\lt\) PageWindowInternal \(\gt\) , IntHashMap \(\lt\) Integer \(\gt\) (containing int and float)))), InputStream (containing int, byte[]), V, E, Url (containing List \(\lt\) String \(\gt\) , long, Integer, String, List \(\lt\) QueryParameter \(\gt\) (QueryParameter contains String)), Serializable
Apache storm 1.2.2ObjectInputStream, ClassLoaderObjectInputStream, KerberosTicket (containing int, byte[], boolean[], Date, KeyImpl (containing transient variables => not considered), KerberosPrincipal (containing int and char), InetAddress[] (containing int, List \(\lt\) NameService \(\gt\) )), Kryo (but this class does not implement java.io.Serializable)
Apache-ofbiz-16.11.05ObjectInputStream, String, ByteArrayInputStream (containing byte and int), Thread
Atlassian-bamboo-5.9.7ObjectInputStream, E, Hashing \(\lt\) K \(\gt\) , Equiv \(\lt\) K \(\gt\) , K, V, ClassTag (which is an interface) and A
Apache-xmlrpc-3.1.3Throwable (containing String, StackTraceElement[], StackTraceElement, List \(\lt\) Throwable \(\gt\) , and Throwable), ObjectInputStream
Gradle-enterprise-maven-extension-1.5.3AuthScheme (which is an interface), TestListenerEvent (containing long and TestDescriptor (with Long and String))
Apache ChainsawLoggingEvent (containing long, String, Hashtable(with int, float, sun.misc.Unsafe), boolean, ThrowableInformation (containing String[]), LocationInfo (containing String, Method, StringWriter (containing StringBuffer), PrintWriter (containing Writer (containing char[], int, Object), boolean, Formatter (containing Appendable (chich is an interface), Locale (containing Cache, char, int and Locale), IOException, char, double, int), PrintStream (containing boolean, Formatter, BufferedWriter (containing Writer (containing char[], int, Object), char, int, String), OutputStreamWriter (containing StreamEncoder)), String), boolean,Map \(\lt\) K,V \(\gt\) , LogPanelPreferenceModel (containing String, Collection, ArrayList, boolean), ObjectInputStream, Point (containing int), Dimension (containing int), Vector (Object[], int)
Jackson-databind-2.9.10.6ObjectIdReader (containing JavaType (which an abstract class contaning Class \(\lt\) ? \(\gt\) , Object, int and boolean), PropertyName (containing long, String, PropertyName, SerializableString (which is an interface)), ObjectIdGenerator \(\lt\) ? \(\gt\) , ObjectIdResolver (which is an interface), JsonDeserializer \(\lt\) Object \(\gt\) (which is an abstract class), SettableBeanProperty (containing JsonDeserializer \(\lt\) Object \(\gt\) , PropertyName, JavaType, JsonDeserializer \(\lt\) Object \(\gt\) , TypeDeserializer (which is an abstract class), NullValueProvider (which is an interface))
Opennms-source-26.0.1-1TrapInformation, T, OnmsCriteria, SerializedBatch, OnmsSeverity (containing Map \(\lt\) Integer, OnmsSeverity \(\gt\) , int, String)
TeamCity-2019.1.3ObjectInputStream, Serializable, Principal (which is an interface), String[]
Table B.2. Serialized and Deserialized Types Extracted from Vulnerable Real-world Applications

C Analysis of Commits

Table C.1.
ApplicationCVEOpen source? (Y/N)Internal/External patch?Automatically/manually generated patch?
Taoensso Nippy \(\lt\) 2.14.2CVE-2020-24164Y https://github.com/ptaoussanis/nippyInternal patchManually generated patch (see Nippycommit and http://ptaoussanis.github.io/nippy/taoensso.nippy.html#var-allow-and-record-any-serializable-class-unsafe)
Jboss RichFaces (Jboss-RF) 3.x \(\lt =\) 3.3.3 and 4.x \(\lt =\) 4.3.2CVE-2013-2165Y https://richfaces.jboss.org/download/archive.htmlInternal patch https://www.bleathem.ca/blog/richfaces-security-advisory-cve-2013-2165/ and https://codewhitesec.blogspot.com/2018/05/poor-richfaces.htmlManually generated patch (see JbossRichfacescommit)
Android \(\lt\) 5.0.0CVE-2014-7911Y https://android.googlesource.com/?format=HTMLInternal patch (see androidlibcorecommit)Manually generated patch (see Androidcommit)
Atlassian Bamboo before 5.9.9 and 5.10.x before 5.10.0CVE-2014-9757Y https://www.atlassian.com/software/bamboo/download-archivesExternal (the patched version Bamboo 5.10.0 uses an updated version of the smack library in which a lot of modifications are brought)-
Jenkins \(\lt\) 1.638 and LTS \(\lt\) 1.625.2CVE-2015-8103Y https://github.com/jenkinsci/jenkins https://wiki.jenkins.io/display/JENKINS/Jenkins+CLIUnknown patch-
VMware vRealize Orchestrator 6.x, vCenter Orchestrator 5.x, vRealize Operations 6.x, vCenter Operations 5.x, and vCenter Application Discovery Manager (vADM) 7.xCVE-2015-6934Y https://docs.vmware.com/en/vRealize-Orchestrator/7.6/rn/VMware-vRealize-Orchestrator-76-Release-Notes.htmlExternal patch (replace the Commons collections library by the commons-collections-3.2.2.jar in the dependencies of the mentioned products (see https://kb.vmware.com/s/article/2141244 and https://kb.vmware.com/s/article/2141244)-
Hazelcast \(\lt\) 3.11CVE-2016-10750Y https://github.com/hazelcast/hazelcastInternal patch (see https://docs.hazelcast.org/docs/3.10.5/manual/html-single/index.html#untrusted-deserialization-protection)Unknown
Apache OFBiz 12.04.x \(\lt\) 12.04.06 and 13.07.x \(\lt\) 13.07.03CVE-2016-2170Y http://archive.apache.org/dist/ofbiz/External patch (Update commons collections to 4.1 and Comment out RMI related code (see https://issues.apache.org/jira/browse/OFBIZ-6942, https://markmail.org/message/nh6csf4fun5n6e23 and https://issues.apache.org/jira/browse/OFBIZ-6726)-
Apache XML-RPC (aka ws-xmlrpc) library 3.1.3CVE-2016-5003Y https://archive.apache.org/dist/ws/xmlrpc/sources/Internal patchManually generated patch (see XML-RPCcommit)
Apache Wicket 6.x \(\lt\) 6.25.0 and 1.5.x \(\lt\) 1.5.17CVE-2016-6793Y https://archive.apache.org/dist/wicket/Internal patch (obtained by doing the diff between the 6.24.0 and 6.25.0 versions)Manually generated patch (see wicketcommit AnnouncingCVE-2016-6793:ApacheWicketdeserializationvulnerability)
Red Hat JBoss Enterprise Application Platform (Jboss-EAP) 4 and 5CVE-2016-7065Y https://developers.redhat.com/products/eap/downloadRed Hat does not fix the issue because JBoss EAP 4 is out of maintenance support and JBoss EAP 5 is close to the end of its maintenance period (see https://seclists.org/fulldisclosure/2016/Nov/143 and https://seclists.org/fulldisclosure/2016/Nov/143)-
Log4jCVE-2019-17571Y https://github.com/apache/log4jInternalManually generated patch (see log4jcommit)
JetBrains TeamCity before 2019.1.4CVE-2019-18364Y https://www.jetbrains.com/fr-fr/teamcity/download/other.htmlUnknown patch-
Apache Dubbo 2.7.0 before 2.7.5, 2.6.0 before 2.6.8, and 2.5.x versionsCVE-2019-17564Y https://github.com/apache/dubboInternalManually generated patch (see Dubbocommit and https://github.com/apache/dubbo/releases/tag/dubbo-2.7.5)
WebSphere Application Server (WAS) Community Edition 3.0.0.3CVE-2013-1777Y http://geronimo.apache.org/downloads.htmlInternal patch http://svn.apache.org/viewvc?view=revision&sortby=date&revision=1458113Manually generated patch (http://svn.apache.org/viewvc?view=revision&sortby=date&revision=1458113)
Apache Ofbiz from 16.11.01 to 16.11.05CVE-2019-0189Y https://archive.apache.org/dist/ofbiz/InternalManually generated patch (see Ofbizcommit)
Apache TomcatCVE-2020-9484Y https://github.com/apache/tomcatInternalManually generated patch (see Tomcatcommit
OpenNMS Horizon \(\lt\) 26.0.1 and Meridian before 2018.1.19 and 2019 before 2019.1.7CVE-2020-12760Y https://github.com/OpenNMS/opennms/releases/tag/opennms-26.0.1-1External patch (see https://github.com/OpenNMS/opennms/pull/2983)-
Apache Tapestry 4CVE-2020-17531Y https://github.com/apache/tapestry4No available patch (Apache Tapestry 4 reached end of life in 2008 and no update to address this issue is released (the upgrade to the latest Apache Tapestry 5 version is necessary) (see Tapestry4message) and https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-17531)-
Apache Camel Netty (Camel-Netty)CVE-2020-11973Y https://github.com/apache/camel/tree/main/components/camel-nettyInternalManually generated patch (see CamelNettycommit)
Apache Camel RabbitMQ (Camel-RabbitMQ) 2.22.x, 2.23.x, 2.24.x, 2.25.0, 3.0.0 up to 3.1.0CVE-2020-11972Y https://github.com/apache/camelInternal patch (see RabbitMQpatch)Manually generated patch (see Camelcommit)
Emissary 6.4.0CVE-2021-32634Y https://github.com/NationalSecurityAgency/emissaryInternal patch (https://github.com/NationalSecurityAgency/emissary/security/advisories/GHSA-m5qf-gfmp-7638)Manually generated patch (see emissarycommit)
Apache Dubbo prior to 2.6.9 and 2.7.9CVE-2021-30179Y https://github.com/apache/dubboInternal patch (see https://github.com/apache/dubbo/releases/tag/dubbo-2.7.10)Manually generated patch (see dubbocommit and https://github.com/apache/dubbo/pull/7436)
Soffid IAM \(\lt\) 1.7.5CVE-2017-9363Y https://github.com/SoffidIAM/consoleInternal patchManually generated patch (see SoffidIamcommit)
Apache OFBizCVE-2021-29200Y https://github.com/apache/ofbiz-frameworkInternalManually generated patch (see Ofbizcommit)
CVE-2021-26295Y https://github.com/apache/ofbiz-frameworkInternalManually generated patch (see https://issues.apache.org/jira/browse/OFBIZ-12167 and Ofbizcommit)
Table C.1. Analysis of the Patches of 25 Open Source Vulnerable Applications
In this table, the fourth column “Internal/External patch?” describes if the patch concerns the code of the application itself (Internal) or the code of the libraries used in the concerned application (External). The fifth column “Automatically/manually generated patch?” indicates if the patch was manually generated or automatically generated by tools like Snyk [23, 63]. For each existing patch, we give the link to the commit in which is described the patch. For the applications for which we do not find commit for patch, we use the keyword “Unknown” in the last column. For the applications that do not have a patch, we put the “-” symbol.

References

[1]
Nikolaos Alexopoulos, Sheikh Mahbub Habib, Steffen Schulz, and Max Mühlhäuser. 2020. The tip of the iceberg: On the merits of finding security bugs. ACM Trans. Priv. Secur. 24, 1 (2020), 3:1–3:33.
[2]
Davide Balzarotti, Marco Cova, Viktoria Felmetsger, Nenad Jovanovic, Engin Kirda, Christopher Kruegel, and Giovanni Vigna. 2008. Saner: Composing static and dynamic analysis to validate sanitization in web applications. In 2008 IEEE Symposium on Security and Privacy (S&P). IEEE Computer Society, 387–401.
[3]
Alexandre Bartel, Jacques Klein, and Yves Le Traon. 2019. Musti: Dynamic prevention of invalid object initialization attacks. IEEE Trans. Inf. Forensics Secur. 14, 8 (2019), 2167–2178.
[4]
Daniel Blazquez. 2020. Insecure Deserialization: Attack examples, Mitigation and Prevention. Retrieved 2022 from https://hdivsecurity.com/bornsecure/insecure-deserialization-attack-examples-mitigation/.
[5]
Nicky Bloor. [n. d.]. DeserLab. Retrieved 2022 from https://github.com/NickstaDB/DeserLab.
[6]
Nicky Bloor. [n. d.]. SerializationDumper. Retrieved 2022 from https://github.com/NickstaDB/SerializationDumper#%23serializationdumper.
[7]
William Bonnaventure, Ahmed Khanfir, Alexandre Bartel, Mike Papadakis, and Yves Le Traon. 2021. CONFUZZION: A Java virtual machine Fuzzer for type confusion vulnerabilities. In 2021 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS). IEEE.
[8]
Hooman Broujerdi. 2018. JDK approach to address deserialization vulnerability. Retrieved 2022 from https://www.redhat.com/en/blog/jdk-approach-address-deserialization.
[9]
Yuting Chen, Ting Su, and Zhendong Su. 2019. Deep differential testing of JVM implementations. In Proceedings of the 41st International Conference on Software Engineering, ICSE, Joanne M. Atlee, Tevfik Bultan, and Jon Whittle (Eds.). IEEE / ACM, 1257–1268.
[10]
David Chisnall, Brooks Davis, Khilan Gudka, David Brazdil, Alexandre Joannou, Jonathan Woodruff, A. Theodore Markettos, J. Edward Maste, Robert Norton, Stacey Son, et al. 2017. CHERI JNI: Sinking the Java security model into the C. ACM SIGARCH Computer Architecture News 45, 1 (2017), 569–583.
[11]
IBM Company. [n. d.]. IBM download. Retrieved 2022 from https://www.ibm.com/support/pages/java-sdk-downloads.
[12]
[13]
The MITRE Corporation. 2020. Terminology - A glossary of terms used by the CVE Program. Retrieved 2022 from https://cve.mitre.org/about/terminology.html#vulnerability.
[14]
Stefano Cristalli, Edoardo Vignati, Danilo Bruschi, and Andrea Lanzi. 2018. Trusted execution path for protecting Java applications against deserialization of untrusted data. In Research in Attacks, Intrusions, and Defenses - 21st International Symposium, RAID(Lecture Notes in Computer Science, Vol. 11050). Springer, 445–464.
[15]
Michael C. Daconta. [n. d.]. When Runtime.exec() won’t. Retrieved 2022 from https://www.infoworld.com/article/2071275/when-runtime-exec---won-t.html.
[16]
NIST National Vulnerability Database. [n. d.]. Vulnerability Summary for CVE-2020-5413. Retrieved 2022 from https://nvd.nist.gov/vuln/detail/CVE-2020-5413.
[17]
NIST National Vulnerability Database. [n. d.]. Vulnerability Summary for CVE-2021-22569. Retrieved 2022 from https://nvd.nist.gov/vuln/detail/CVE-2021-22569.
[18]
Drew Dean, Edward W. Felten, and Dan S. Wallach. 1996. Java security: From HotJava to Netscape and beyond. In 1996 IEEE Symposium on Security and Privacy. IEEE Computer Society, 190–200.
[19]
Jens Dietrich, Kamil Jezek, Shawn Rasheed, Amjed Tahir, and Alex Potanin. 2017. Evil pickles: DoS attacks based on object-graph engineering. In 31st European Conference on Object-Oriented Programming (ECOOP 2017)(Leibniz International Proceedings in Informatics (LIPIcs), Vol. 74). 10:1–10:32.
[20]
Software Engineering Institute. [n. d.]. Prevent deserialization of untrusted data. Retrieved 2022 from https://wiki.sei.cmu.edu/confluence/display/java/SER12-J.+Prevent+deserialization+of+untrusted+data.
[21]
Sondre Fingann. [n. d.]. Java Deserialization Vulnerabilities Exploitation Techniques and Mitigations. Retrieved 2022 from https://www.duo.uio.no/bitstream/handle/10852/79730/1/Master-Thesis---Java-Deserialization-Vulnerabilities---Sondre-Fingann.pdf.
[22]
Chris Frohoff and Matthias Kaiser. [n. d.]. ysoserial. Retrieved 2022 from https://github.com/frohoff/ysoserial.
[23]
GitBook. 2022. Introducing Snyk. Retrieved 2022 from https://docs.snyk.io/introducing-snyk.
[24]
Google. [n. d.]. Protocol Buffers. Retrieved 2022 from https://developers.google.com/protocol-buffers.
[25]
The Guardian. 2016. San Francisco Municipal Transport Agency attacked by hackers who locked up computers and data with 100 Bitcoin demand. Retrieved 2022 from https://www.theguardian.com/technology/2016/nov/28/passengers-free-ride-san-francisco-muni-ransomeware.
[26]
Ian Haken. [n. d.]. Gadget Inspector. Retrieved 2022 from https://github.com/JackOfMostTrades/gadgetinspector.
[27]
István Haller, Erik van der Kouwe, Cristiano Giuffrida, and Herbert Bos. 2016. METAlloc: Efficient and comprehensive metadata management for software security hardening. In Proceedings of the 9th European Workshop on System Security, EUROSEC, Michalis Polychronakis and Cristiano Giuffrida (Eds.). ACM, 5:1–5:6.
[28]
Red Hat. 2014. Java deserialization flaws: Part 2, XML deserialization. Retrieved 2022 from https://www.redhat.com/en/blog/java-deserialization-flaws-part-2-xml-deserialization.
[29]
Philipp Holzinger, Ben Hermann, Johannes Lerch, Eric Bodden, and Mira Mezini. 2017. Hardening Java’s access control by abolishing implicit privilege elevation. In 2017 IEEE Symposium on Security and Privacy (SP). IEEE, 1027–1040.
[30]
Philipp Holzinger, Stefan Triller, Alexandre Bartel, and Eric Bodden. 2016. An in-depth study of more than ten years of Java exploitation. In Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. ACM, 779–790.
[31]
Java. [n. d.]. S’informer sur la technologie Java. Retrieved 2022 from https://www.java.com/fr/about/.
[32]
Go Java. [n. d.]. Retrieved 2022 from https://go.java/.
[33]
Nikolaos Koutroumpouchos, Georgios Lavdanis, Eleni Veroni, Christoforos Ntantogian, and Christos Xenakis. 2019. ObjectMap: Detecting insecure object deserialization. In Proceedings of the 23rd Pan-Hellenic Conference on Informatics, PCI. ACM, 67–72.
[34]
Volodymyr Kuznetsov, Laszlo Szekeres, Mathias Payer, George Candea, R. Sekar, and Dawn Song. 2014. Code-pointer integrity. In 11th USENIX Symposium on Operating Systems Design and Implementation, (OSDI’14), Jason Flinn and Hank Levy (Eds.). USENIX Association, 147–163.
[35]
Anton Lawrence. [n. d.]. Best Practices for Java Security. Retrieved 2022 from https://bitbucket.org/blog/best-practices-for-java-security.
[36]
Gabriel Lawrence and Chris Frohoff. 2015. OWASP AppSecCali 2015 - Marshalling Pickles. Retrieved 2022 from https://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles.
[37]
Christopher D. Manning, Prabhakar Raghavan, and Hinrich Schütze. 2008. Introduction to Information Retrieval. Cambridge University Press. Retrieved 2022 from https://nlp.stanford.edu/IR-book/pdf/irbookprint.pdf.
[38]
Alejandro Mazuera-Rozo, Jairo Bautista-Mora, Mario Linares-Vásquez, Sandra Rueda, and Gabriele Bavota. 2019. The Android OS stack and its vulnerabilities: An empirical study. Empir. Softw. Eng. 24, 4 (2019), 2056–2101.
[39]
Microsoft Threat Intelligence Center (MSTIC), Microsoft 365 Defender Threat Intelligence Team, and Microsoft 365 Security. 2021. HAFNIUM targeting Exchange Servers with 0-day exploits. Retrieved 2022 from https://www.microsoft.com/security/blog/2021/03/02/hafnium-targeting-exchange-servers/.
[40]
Alvaro Muñoz and Oleksandr Mirosh. 2017. Friday the 13th JSON Attacks. Retrieved 2022 from https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf.
[41]
Alfred Ng. 2018. How the Equifax hack happened, and what still needs to be done - A year after the revelation of the massive breach, there’s unfinished business. Retrieved 2022 from https://www.cnet.com/news/privacy/equifaxs-hack-one-year-later-a-look-back-at-how-it-happened-and-whats-changed/.
[42]
U.S. Department of Homeland Security (DHS), Cybersecurity, Infrastructure Security Agency (CISA), and The MITRE Corporation. [n. d.]. Glossary. Retrieved 2022 from https://www.cve.org/ResourcesSupport/Glossary#.
[43]
U.S. Department of Homeland Security (DHS), Cybersecurity, Infrastructure Security Agency (CISA), and The MITRE Corporation. [n. d.]. Terminology. Retrieved 2022 from https://cve.mitre.org/about/terminology.html#cve_id.
[44]
[45]
OpenJDK. [n. d.]. JEP 290: Filter Incoming Serialization Data. Retrieved 2022 from https://openjdk.java.net/jeps/290.
[46]
Oracle. [n. d.]. Oracle SE downloads. Retrieved 2022 from https://www.oracle.com/java/technologies/javase-downloads.html.
[47]
Oracle. [n. d.]. Secure Coding Guidelines for Java SE. Retrieved 2022 from https://www.oracle.com/java/technologies/javase/seccodeguide.html.
[49]
[50]
OWASP. [n. d.]. A8:2017-Insecure Deserialization. Retrieved 2022 from https://owasp.org/www-project-top-ten/2017/A8_2017-Insecure_Deserialization.
[51]
[52]
OWASP. 2021. OWASP top 10:2021. Retrieved 2022 from https://owasp.org/Top10/.
[53]
Or Peles and Roee Hay. 2015. One class to rule them all: 0-day deserialization vulnerabilities in Android. In 9th USENIX Workshop on Offensive Technologies (WOOT’15).
[54]
Laksh Raghavan. Jan 2016. Lessons Learned from the Java Deserialization Bug. Retrieved 2022 from https://medium.com/paypal-engineering/lessons-learned-from-the-java-deserialization-bug-cb859e9c8d24.
[55]
Shawn Rasheed and Jens Dietrich. 2020. A hybrid analysis to detect Java serialisation vulnerabilities. In 35th IEEE/ACM International Conference on Automated Software Engineering, (ASE’20). IEEE, 1209–1213.
[56]
Roger Riggs, Jim Waldo, Ann Wollrath, and Krishna Bharat. 1996. Pickling state in the Java system. Computing Systems 9, 4 (1996), 291–312.
[57]
Christian Schneider. [n. d.]. Java Deserialization Security FAQ. Retrieved 2022 from https://christian-schneider.net/JavaDeserializationSecurityFAQ.html.
[58]
Robert Seacord. 2017. Combating Java Deserialization Vulnerabilities with Look-Ahead Object Input Streams (LAOIS).
[59]
Hdiv Security. [n. d.]. Insecure Deserialization: OWASP Top 10 - A8. Retrieved 2022 from https://hdivsecurity.com/owasp-insecure-deserialization.
[60]
Hovav Shacham. 2007. The geometry of innocent flesh on the bone: Return-into-libc without function calls (on the x86). In Proceedings of the 2007 ACM Conference on Computer and Communications Security, (CCS’07), Alexandria, Virginia, USA, October 28-31, 2007. ACM, 552–561.
[61]
Hossain Shahriar and Hisham Haddad. 2016. Object injection vulnerability discovery based on latent semantic indexing. In Proceedings of the 31st Annual ACM Symposium on Applied Computing, Sascha Ossowski (Ed.). ACM, 801–807.
[62]
Mikhail Shcherbakov and Balliu Musard. 21-24 February 2021. SerialDetector: Principled and practical exploration of object injection vulnerabilities for the web. In Network and Distributed System Security Symposium (NDSS’21).
[63]
Snyk. 2022. Snyk CLI. Retrieved 2022 from https://github.com/snyk/snyk.
[64]
Esoteric Software. [n. d.]. Kyro. Retrieved 2022 from https://github.com/EsotericSoftware/kryo.
[65]
Michael Stepankin. 2015. [manager.paypal.com] Remote Code Execution Vulnerability. Retrieved 2022 from https://artsploit.blogspot.com/2016/01/paypal-rce.html.
[66]
DOWASP study. 2017. OWASP Top Ten. Retrieved 2022 from https://owasp.org/www-project-top-ten/.
[67]
Miles Tracy, Wayne Jansen, Karen Scarfone, and Jason Butterfield. 2007. Guidelines on Electronic Mail Security. Retrieved 2022 from https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-45ver2.pdf.
[68]
Mario Linares Vásquez, Gabriele Bavota, and Camilo Escobar-Velasquez. 2017. An empirical study on Android-related vulnerabilities. In Proceedings of the 14th International Conference on Mining Software Repositories, MSR, Jesús M. González-Barahona, Abram Hindle, and Lin Tan (Eds.). IEEE Computer Society, 2–13.
[69]
Waratek. [n. d.]. The Deserialization Problem. Retrieved 2022 from https://www.waratek.com/wp-content/uploads/2019/06/WP-Deserialization-20190610.pdf.
[70]
Yves Younan. 2015. FreeSentry: Protecting against use-after-free vulnerabilities due to dangling pointers. In 22nd Annual Network and Distributed System Security Symposium, NDSS. The Internet Society.

Cited By

View all
  • (2024)Intelligent System for Providing Migration Through Dynamic Data DeserializationProceedings of the Southwest State University. Series: IT Management, Computer Science, Computer Engineering. Medical Equipment Engineering10.21869/2223-1536-2023-13-3-31-5113:3(31-51)Online publication date: 27-Jan-2024
  • (2024)Seneca: Taint-Based Call Graph Construction for Java Object DeserializationProceedings of the ACM on Programming Languages10.1145/36498518:OOPSLA1(1125-1153)Online publication date: 29-Apr-2024
  • (2024)Systemic Implications of CVE-2023-33246 A Closer Look at Remote Code Exploitation Mechanisms2024 15th International Conference on Information and Communication Systems (ICICS)10.1109/ICICS63486.2024.10638289(1-6)Online publication date: 13-Aug-2024
  • Show More Cited By

Index Terms

  1. An In-depth Study of Java Deserialization Remote-Code Execution Exploits and Vulnerabilities

    Recommendations

    Comments

    Information & Contributors

    Information

    Published In

    cover image ACM Transactions on Software Engineering and Methodology
    ACM Transactions on Software Engineering and Methodology  Volume 32, Issue 1
    January 2023
    954 pages
    ISSN:1049-331X
    EISSN:1557-7392
    DOI:10.1145/3572890
    • Editor:
    • Mauro Pezzè
    Issue’s Table of Contents

    Publisher

    Association for Computing Machinery

    New York, NY, United States

    Publication History

    Published: 13 February 2023
    Online AM: 05 August 2022
    Accepted: 12 July 2022
    Revised: 21 June 2022
    Received: 07 December 2021
    Published in TOSEM Volume 32, Issue 1

    Permissions

    Request permissions for this article.

    Check for updates

    Author Tags

    1. Serialization
    2. deserialization
    3. vulnerabilities
    4. gadget
    5. remote code execution RCE

    Qualifiers

    • Research-article
    • Refereed

    Funding Sources

    • Luxembourg National Research Fund (FNR) ONNIVA

    Contributors

    Other Metrics

    Bibliometrics & Citations

    Bibliometrics

    Article Metrics

    • Downloads (Last 12 months)656
    • Downloads (Last 6 weeks)40
    Reflects downloads up to 03 Oct 2024

    Other Metrics

    Citations

    Cited By

    View all
    • (2024)Intelligent System for Providing Migration Through Dynamic Data DeserializationProceedings of the Southwest State University. Series: IT Management, Computer Science, Computer Engineering. Medical Equipment Engineering10.21869/2223-1536-2023-13-3-31-5113:3(31-51)Online publication date: 27-Jan-2024
    • (2024)Seneca: Taint-Based Call Graph Construction for Java Object DeserializationProceedings of the ACM on Programming Languages10.1145/36498518:OOPSLA1(1125-1153)Online publication date: 29-Apr-2024
    • (2024)Systemic Implications of CVE-2023-33246 A Closer Look at Remote Code Exploitation Mechanisms2024 15th International Conference on Information and Communication Systems (ICICS)10.1109/ICICS63486.2024.10638289(1-6)Online publication date: 13-Aug-2024
    • (2024)A Technique to Bypass RASP Protection in Java2024 4th Asia-Pacific Conference on Communications Technology and Computer Science (ACCTCS)10.1109/ACCTCS61748.2024.00045(215-219)Online publication date: 24-Feb-2024
    • (2023)An In-Depth Analysis of Android’s Java Class Library: its Evolution and Security Impact2023 IEEE Secure Development Conference (SecDev)10.1109/SecDev56634.2023.00028(133-144)Online publication date: 18-Oct-2023
    • (2023)ODDFuzz: Discovering Java Deserialization Vulnerabilities via Structure-Aware Directed Greybox Fuzzing2023 IEEE Symposium on Security and Privacy (SP)10.1109/SP46215.2023.10179377(2726-2743)Online publication date: May-2023

    View Options

    Get Access

    Login options

    Full Access

    View options

    PDF

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader

    Full Text

    View this article in Full Text.

    Full Text

    HTML Format

    View this article in HTML Format.

    HTML Format

    Media

    Figures

    Other

    Tables

    Share

    Share

    Share this Publication link

    Share on social media