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.
1
debe transferirse al primer parámetro (el número de versión) de la siguiente función del sistema de archivos:
__xmknod
2
debe transferirse al tercer parámetro (el argumento de grupo) de las siguientes funciones de cadenas de caracteres amplias:
__wcstod_internal
__wcstof_internal
_wcstol_internal
__wcstold_internal
__wcstoul_internal
3
debe transferirse como primer parámetro (el número de versión) de las siguientes funciones del sistema de archivos:
__xstat
__lxstat
__fxstat
__xstat64
__lxstat64
__fxstat64
FILE *sysfile = fopen(test.file, "w+");
FILE insecureFile = *sysfile;
sysfile
se desreferencia en la asignación de insecureFile
, el uso deinsecureFile
puede resultar en una amplia variedad de problemas.
FILE *sysfile = fopen(test.file, "r+");
res = fclose(sysfile);
if(res == 0){
printf("%c", getc(sysfile));
}
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.
std::auto_ptr<foo> p(new foo);
foo* rawFoo = p.get();
delete rawFoo;
delete
, la clase de administración sabrá que no puede seguir utilizando el puntero.