CWE-502: Deserialization of Untrusted Data

What is CWE-502?

CWE-502 is Deserialization of Untrusted Data. The flaw arises when the product deserializes untrusted data without sufficiently ensuring that the resulting data is valid. The database currently holds 1,022 vulnerabilities mapped to CWE-502 and 9 of them are in the CISA Known Exploited Vulnerabilities catalog.

OWASP TOP 10:2025 RANK8 — A08:2025 — Software or Data Integrity Failures
Related CVES (365 days)1,022
AbstractionBase
Likelihood of exploitMedium

Vulnerabilities mapped to CWE-502

1,022 vulnerabilities286% increase year over year

Vulnerabilities in CISA KEV for CWE-502

9 vulnerabilities25% decrease year over year

Official definition

ByMitre CWE

The product deserializes untrusted data without sufficiently ensuring that the resulting data will be valid.

Serialization and deserialization refer to the process of taking program-internal object-related data, packaging it in a way that allows the data to be externally stored or transferred ("serialization"), then extracting the serialized data to reconstruct the original object ("deserialization").

Detailed description

Serialization packages object-related data for storage or transfer, while deserialization extracts that data to reconstruct the original object. The weakness occurs when the product treats reconstructed data as valid or trustworthy without adequately checking its types, values, state, and possible behavior. An attacker may craft or alter the serialized representation to create unexpected objects, bypass normal accessor functions, invoke unintended methods, or trigger gadget chains available in libraries. The impact depends on the objects and methods that can be deserialized and how the application uses them, and the weakness can arise from a missing security tactic in architecture and design as well as from implementation decisions.

Characteristics

The defining behavior is accepting external serialized data and reconstructing internal objects or state without adequate validity assurance. The practice is also described as unmarshaling, pickling, or unpickling; in Python, pickle provides serialization and deserialization functionality. Deserialization can expose unexpected classes, methods, or library gadgets, allowing data to bypass safe accessors and alter application behavior. The record applies to Java, Ruby, PHP, Python, and JavaScript, and can occur in technology-specific contexts including ICS/OT and AI/ML.

Common consequences

  • Integrity: Attackers may modify application data or produce an unexpected application state. Deserialized data or code may bypass intended accessor functions, and unexpected functions may be invoked.
  • Availability: A parser or function that relies on a sentinel to determine when to terminate may be made not to terminate, causing CPU resource consumption and denial of service.
  • Other impacts: Results vary with the objects and methods involved. Assuming that code in a deserialized object is valid can enable unauthorized actions, including gadget-chain behavior such as generating a shell.
ImpactScopeExplanation
Modify Application Data, Unexpected StateIntegrityAttackers can modify unexpected objects or data that was assumed to be safe from modification. Deserialized data or code could be modified without using the provided accessor functions, or unexpected functions could be invoked.
DoS: Resource Consumption (CPU)AvailabilityIf a function is making an assumption on when to terminate, based on a sentry in a string, it could easily never terminate.
Varies by ContextOtherThe consequences can vary widely, because it depends on which objects or methods are being deserialized, and how they are used. Making an assumption that the code in the deserialized object is valid is dangerous and can enable exploitation. One example is attackers using gadget chains to perform unauthorized actions, such as generating a shell.

Risk mitigations

  • Authenticate serialized data: When available, use the language's signing or sealing features, such as an HMAC, to verify that serialized data has not been modified.
  • Validate into a new object: During deserialization, populate a new object so the data passes through safe input validation and uses safe functions.
  • Prevent deserialization where applicable: Explicitly define a final object to prevent deserialization.
  • Protect fields: Make fields transient so time-dependent, environment-based, or sensitive values are not carried across serialization and deserialization; such fields become NULL after the round trip.
  • Reduce gadget exposure: Avoid unnecessary types and deserialization gadgets, and allowlist only acceptable classes. This is not sufficient by itself because new gadgets are continually discovered.
  • Protect data or code cryptographically: Cryptography can protect the data or code, but client-side cryptography remains bypassable if the client is compromised.
  • Add an application firewall: A firewall can provide defense in depth, especially when the vulnerable code is controlled by a third party or cannot immediately be fixed. Its effectiveness is moderate and it may miss input vectors, be bypassed with specially malformed inputs, reject or alter legitimate requests, or require manual customization.
  1. Architecture and Design, ImplementationIf available, use the signing/sealing features of the programming language to assure that deserialized data has not been tainted. For example, a hash-based message authentication code (HMAC) could be used to ensure that data has not been modified.
  2. ImplementationWhen deserializing data, populate a new object rather than just deserializing. The result is that the data flows through safe input validation and that the functions are safe.
  3. ImplementationExplicitly define a final object() to prevent deserialization.
  4. Architecture and Design, ImplementationMake fields transient to protect them from deserialization. An attempt to serialize and then deserialize a class containing transient fields will result in NULLs where the transient data should be. This is an excellent way to prevent time, environment-based, or sensitive variables from being carried over and used improperly.
  5. ImplementationAvoid having unnecessary types or gadgets (a sequence of instances and method invocations that can self-execute during the deserialization process, often found in libraries) available that can be leveraged for malicious ends. This limits the potential for unintended or unauthorized types and gadgets to be leveraged by the attacker. Add only acceptable classes to an allowlist. Note: new gadgets are constantly being discovered, so this alone is not a sufficient mitigation.
  6. Architecture and Design, ImplementationEmploy cryptography of the data or code for protection. However, it's important to note that it would still be client-side security. This is risky because if the client is compromised then the security implemented on the client (the cryptography) can be bypassed.
  7. Firewall · Operation · Effectiveness: ModerateUse an application firewall that can detect attacks against this weakness. It can be beneficial in cases in which the code cannot be fixed (because it is controlled by a third party), as an emergency prevention measure while more comprehensive software assurance measures are applied, or to provide defense in depth [REF-1481].An application firewall might not cover all possible input vectors. In addition, attack techniques might be available to bypass the protection mechanism, such as using malformed inputs that can still be processed by the component that receives those inputs. Depending on functionality, an application firewall might inadvertently reject or modify legitimate requests. Finally, some manual effort may be required for customization.

Detection methods

Automated static analysis, commonly called Static Application Security Testing (SAST), can identify some instances by analyzing source or compiled code without execution. It generally models data flow and control flow, then searches for potentially vulnerable patterns connecting input sources to sinks where data interacts with external components or lower layers. The method is rated highly effective, but it does not necessarily cover every case or behavior that appears only at runtime.

MethodApproachEffectiveness
Automated Static AnalysisAutomated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then searching for potentially-vulnerable patterns that connect "sources" (origins of input) with "sinks" (destinations where the data interacts with external components, a lower layer such as the OS, etc.)High

Representative vulnerabilities

Representative examples in the record include CVE-2024-37052, where a crafted pickled object in an AI/ML model file leads to code execution; CVE-2024-37288, involving deserialization of untrusted YAML; and CVE-2024-9314, involving PHP object injection in a WordPress plugin. Other examples show PHP unserialize being used on untrusted input to modify application configuration or enable code execution (CVE-2013-1465, CVE-2012-3527, CVE-2012-0911), while Java libraries and Python scripts expose code-execution paths (CVE-2015-8103, CVE-2015-4852, CVE-2011-2520, CVE-2012-4406). The record also includes bypass through an assumed-trusted class (CVE-2019-12799) and browser execution of native methods through a crafted string passed to a JavaScript deserialization function (CVE-2003-0791). These are representative examples, not an exhaustive list of vulnerabilities.

Sources (2)

CWE™ Program, operated by The MITRE Corporation. Copyright © 2006–2026, The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. CWE Terms of Use.

Learn more

Run an in-depth assessment with complete web risk management

CyStack VulnScan continuously discovers assets, validates vulnerabilities, and helps security teams prioritize remediation across the organization.