Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Uninitialized Variable

Abstract
Es posible que el programa utilice una variable antes de que se haya inicializado.
Explanation
En .NET, las variables estáticas se inicializan con los valores predeterminados. Sin embargo, el uso de dichas variables sin inicializar puede causar problemas relativos a la lógica de negocio o pueden utilizarse para ejecutar un ataque de denegación de servicio (DoS). Los programas no deben utilizar nunca el valor predeterminado de una variable.

No es infrecuente que los programadores usen una variable no inicializada en el código que administre errores u otras circunstancias excepcionales o poco comunes. Los mensajes de advertencia de variables no inicializadas pueden a menudo indicar la presencia de un error tipográfico en el código.

Ejemplo 1: el compilador .NET compilará el siguiente código sin errores. Sin embargo, la siguiente instrucción int a = (Int32)i + (Int32)j; lanza una excepción no controlada y bloquea la aplicación en tiempo de ejecución.

class Program
{
static int? i = j;
static int? j;
static void Main(string[] args)
{
j = 100;
int a = (Int32)i + (Int32)j;

Console.WriteLine(i);
Console.WriteLine(j);
Console.WriteLine(a);
}
}


La mayoría de las variables no inicializadas provocan problemas generales de confiabilidad del software, pero si los atacantes pueden activar de forma intencionada el uso de una variable no inicializada, es posible que puedan iniciar un ataque por denegación de servicio, lo que bloquearía el programa.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 457, CWE ID 824
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001094
[3] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 9.1
[4] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Rule 9.1
[5] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 8-5-1
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[7] Standards Mapping - NIST Special Publication 800-53 Revision 5 SC-5 Denial of Service Protection
[8] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 665
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002400 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002400 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002400 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002400 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002400 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002400 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002400 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002400 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002400 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002400 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002400 CAT II
[33] Standards Mapping - Smart Contract Weakness Classification SWC-109
[34] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
[35] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
desc.structural.dotnet.uninitialized_variable
Abstract
El programa puede utilizar una variable antes de que se haya inicializado.
Explanation
Las variables de pila de C y C++ no se inicializan de forma predeterminada. Sus valores iniciales se determinan en función de lo que sucede en su ubicación en la pila en el momento en el que se llama a la función. Los programas no deben usar nunca el valor de una variable no inicializada.

No es infrecuente que los programadores usen una variable no inicializada en el código que administre errores u otras circunstancias excepcionales o poco comunes. Los mensajes de advertencia de variables no inicializadas pueden a menudo indicar la presencia de un error tipográfico en el código.

Ejemplo 1: La siguiente declaración de cambio está destinada a establecer valores para las variables.aN y bN, pero en el caso predeterminado, el programador accidentalmente estableció el valor de aN dos veces.


switch (ctl) {
case -1:
aN = 0; bN = 0;
break;
case 0:
aN = i; bN = -i;
break;
case 1:
aN = i + NEXT_SZ; bN = i - NEXT_SZ;
break;
default:
aN = -1; aN = -1;
break;
}



La mayoría de las variables no inicializadas dan como resultado problemas generales de fiabilidad del software, pero si los atacantes pueden activar de forma intencionada el uso de una variable no inicializada, podrían lanzar un ataque de denegación de servicio al bloquear el programa. En las circunstancias adecuadas, un atacante podría controlar el valor de una variable no inicializada afectando los valores en la lista antes de la invocación de la función.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 457, CWE ID 824
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001094
[3] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 9.1
[4] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2023 Rule 9.1
[5] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C++ Guidelines 2008 Rule 8-5-1
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[7] Standards Mapping - NIST Special Publication 800-53 Revision 5 SC-5 Denial of Service Protection
[8] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 665
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002400 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002400 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002400 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002400 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002400 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002400 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002400 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002400 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002400 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002400 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002400 CAT II
[33] Standards Mapping - Smart Contract Weakness Classification SWC-109
[34] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
[35] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
desc.controlflow.cpp.uninitialized_variable