Fallos del tipo CWE-491

4 resultados

Método clone() público sem proteção final (Object Hijack)

Uma classe implementa clone() como método público sem declarar final, permitindo que subclasses herdem e sobrescrevam esse método. Um atacante pode criar uma subclasse maliciosa que retorna um objeto falso ou manipulado no lugar do original, enganando código que confia na cópia.

Ejemplo

Uma classe Usuario implementa Cloneable e expose public Object clone(). Código legítimo faz usuario.clone() esperando uma cópia segura. Um atacante cria UsuarioMalicioso extends Usuario, sobrescreve clone() para retornar um objeto com privilégios elevados, e passa essa subclasse para o código legítimo sem que ele perceba.

Cómo mitigar

Declare o método clone() como final se a classe não deve ser estendida, ou não implemente Cloneable se clonagem não é essencial. Alternatively, valide o tipo do objeto retornado antes de usar e considere usar padrões defensivos como cópia profunda com construtores em vez de clone().