CWE-491 公开的可克隆方法(对象劫持)

Public cloneable() Method Without Final ('Object Hijack')

结构: Simple

Abstraction: Variant

状态: Draft

被利用可能性: unkown

基本描述

A class has a cloneable() method that is not declared final, which allows an object to be created without calling the constructor. This can cause the object to be in an unexpected state.

相关缺陷

  • cwe_Nature: ChildOf cwe_CWE_ID: 668 cwe_View_ID: 1000 cwe_Ordinal: Primary

适用平台

Language: {'cwe_Name': 'Java', 'cwe_Prevalence': 'Undetermined'}

常见的影响

范围 影响 注释
['Integrity', 'Other'] ['Unexpected State', 'Varies by Context']

可能的缓解方案

Implementation

策略:

Make the cloneable() method final.

示例代码

In this example, a public class "BankAccount" implements the cloneable() method which declares "Object clone(string accountnumber)":

bad Java

public class BankAccount implements Cloneable{
public Object clone(String accountnumber) throws
CloneNotSupportedException
{
Object returnMe = new BankAccount(account number);
...
}
}

In the example below, a clone() method is defined without being declared final.

bad Java

protected Object clone() throws CloneNotSupportedException {
...
}

分类映射

映射的分类名 ImNode ID Fit Mapped Node Name
7 Pernicious Kingdoms Mobile Code: Object Hijack
The CERT Oracle Secure Coding Standard for Java (2011) OBJ07-J Sensitive classes must not let themselves be copied
Software Fault Patterns SFP28 Unexpected access points

引用