clone() Method Without super.clone()

Draft Variant
Structure: Simple
Description

This vulnerability occurs when a class's clone() method creates a new object directly instead of calling super.clone().

Extended Description

In Java, the proper way to implement the clone() method is to always start with a call to super.clone(). This call travels up the inheritance chain to Object.clone(), which performs the essential bitwise copy that establishes the correct object type and internal structure. Skipping this step and instantiating the object manually (e.g., using 'new') breaks the inherited cloning contract. When a parent class fails to call super.clone(), any subclass that inherits and uses its clone() method will receive an object of the parent's type, not its own. This causes a ClassCastException when the returned object is cast to the subclass type, leading to runtime failures. Adhering to the super.clone() convention ensures the cloning mechanism works correctly throughout the entire class hierarchy.

Common Consequences 1
Scope: IntegrityOther

Impact: Unexpected StateQuality Degradation

Detection Methods 1
Automated Static AnalysisHigh
Automated 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.)
Potential Mitigations 2
Phase: Implementation
Call super.clone() within your clone() method, when obtaining a new object.
Phase: Implementation
In some cases, you can eliminate the clone method altogether and use copy constructors.
Demonstrative Examples 1
The following two classes demonstrate a bug introduced by not calling super.clone(). Because of the way Kibitzer implements clone(), FancyKibitzer's clone method will return an object of type Kibitzer instead of FancyKibitzer.

Code Example:

Bad
Java
java
Applicable Platforms
Languages:
Java : Undetermined
Modes of Introduction
Implementation
Taxonomy Mapping
  • Software Fault Patterns