Reino: Code Quality
Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.
Code Correctness: Erroneous Class Compare
Abstract
Determinar o tipo de um objeto com base em seu nome de classe pode provocar comportamentos inesperados ou permitir que um invasor injete uma classe mal-intencionada.
Explanation
Os invasores podem duplicar deliberadamente os nomes das classes para fazer com que um programa execute um código mal-intencionado. Por esse motivo, os nomes das classes não são bons identificadores de tipo e não devem ser usados como base para conceder confiança a determinado objeto.
Exemplo 1: O código a seguir determina se a entrada de um objeto
Exemplo 1: O código a seguir determina se a entrada de um objeto
inputReader
é confiável com base em seu nome de classe. Se um invasor puder fornecer uma implementação de inputReader
que executa comandos mal-intencionados, esse código não poderá diferenciar as versões bem-intencionadas das mal-intencionadas do objeto.
if (inputReader.GetType().FullName == "CompanyX.Transaction.Monetary")
{
processTransaction(inputReader);
}
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 486
desc.dataflow.dotnet.code_correctness_erroneous_class_compare
Abstract
Determinar o tipo de um objeto com base em seu nome de classe pode provocar comportamentos inesperados ou permitir que um invasor injete uma classe mal-intencionada.
Explanation
Os invasores podem duplicar deliberadamente os nomes das classes para fazer com que um programa execute um código mal-intencionado. Por esse motivo, os nomes das classes não são bons identificadores de tipo e não devem ser usados como base para conceder confiança a determinado objeto.
Exemplo 1: O código a seguir determina se a entrada de um objeto
Exemplo 1: O código a seguir determina se a entrada de um objeto
inputReader
é confiável com base em seu nome de classe. Se um invasor puder fornecer uma implementação de inputReader
que executa comandos mal-intencionados, esse código não poderá diferenciar as versões bem-intencionadas das mal-intencionadas do objeto.
if (inputReader.getClass().getName().equals("com.example.TrustedClass")) {
input = inputReader.getInput();
...
}
References
[1] OBJ09-J. Compare classes and not class names CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 486
desc.dataflow.java.code_correctness_erroneous_class_compare
Abstract
Determinar o tipo de um objeto com base em seu nome de classe pode causar um comportamento inesperado ou permitir que um invasor injete uma classe mal-intencionada.
Explanation
Os invasores podem duplicar deliberadamente os nomes das classes para fazer com que um programa execute um código mal-intencionado. Por esse motivo, os nomes das classes não são bons identificadores de tipo e não devem ser usados como base para conceder confiança a determinado objeto.
Exemplo 1: O código a seguir determina se a entrada de um objeto
Exemplo 1: O código a seguir determina se a entrada de um objeto
inputReader
é confiável com base em seu nome de classe. Se um invasor puder fornecer uma implementação de inputReader
que executa comandos mal-intencionados, esse código não poderá diferenciar as versões bem-intencionadas das mal-intencionadas do objeto.
if (inputReader::class.qualifiedName == "com.example.TrustedClass") {
input = inputReader.getInput()
...
}
References
[1] OBJ09-J. Compare classes and not class names CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 486
desc.dataflow.kotlin.code_correctness_erroneous_class_compare