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: Stack Exhaustion

Abstract
Um programa capaz de criar um link circular em uma estrutura de dados pode causar esgotamento da pilha quando a estrutura de dados é processada recursivamente.
Explanation
O uso da recursão é um elemento básico para criar e gerenciar estruturas de dados vinculadas. A recursão também correrá o risco de processar indefinidamente se os dados incorporarem um link circular, que, por sua vez, esgotará a pilha e travará o programa.

Exemplo 1: O trecho de código a seguir demonstra essa vulnerabilidade usando o Apache Log4j2.

Marker child = MarkerManager.getMarker("child");
Marker parent = MarkerManager.getMarker("parent");

child.addParents(parent);
parent.addParents(child);

String toInfinity = child.toString();


Quando o filho chama toString(), que inclui um método de processamento recursivo, ele aciona uma exceção de estouro de pilha (exaustão de pilha). Essa exceção ocorre devido ao link circular entre filho e pai.
References
[1] DOS-1: Beware of activities that may use disproportionate resources Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 674
[3] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective C.3.3 - Web Software Attack Mitigation
desc.controlflow.java.code_correctness_stack_exhaustion