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.

Undefined Behavior: File Pointer Use After Close

Abstract
La aplicación utiliza una operación de archivo en un puntero de archivo cerrado.
Explanation
Realizar operaciones de archivos en un objeto ARCHIVO del sistema después de cerrar su secuencia asociada da como resultado un comportamiento indefinido. En función del compilador de C específico que se utilice, la operación del archivo puede provocar un fallo del sistema o incluso provocar la modificación o lectura del mismo archivo o de uno diferente.

Ejemplo 1: El siguiente código muestra un intento de leer un objeto ARCHIVO del sistema después de cerrar la secuencia correspondiente.


FILE *sysfile = fopen(test.file, "r+");
res = fclose(sysfile);
if(res == 0){
printf("%c", getc(sysfile));
}


Como la función getc() se ejecuta después de que la secuencia del archivo para sysfile esté cerrada, getc() da como resultado un comportamiento indefinido y puede provocar un fallo del sistema o una posible modificación o lectura del mismo archivo o de uno diferente.
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 910
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 22.6
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close