17 oct. 2016

Compiler Bomb: 29 bytes de código que se convierten en 16 GBs al compilar

Probablemente ya conozcáis las bombas ZIP, las bombas XML, etc., por decirlo de una manera sencilla, ficheros (relativamente) pequeños que producen una salida de enorme tamaño cuando son interpretados por el software nativo. El resultado, si se tiene mala leche, es provocar una auténtica denegación de servicio en la máquina que se ejecuta.

Hace unos meses en un foro de StackExchange lanzaron un reto para crear una de estas bombas abusando de un compilador. El ganador, el código más pequeño capaz de generar la salida mayor al compilarse.

Y bueno, un tal Digital Trauma presentó tan sólo 29 bytes de código C que al compilarse generar un ejecutable de... 17,179,875,837 bytes (16 GB)!:
main[-1u]={1};
Como veis, se define la función main como un array grande o large de hasta 500000 elementos (unsigned int con el valor 0xffffffff) y se inicializa en el primer elemento. Esto hará que GCC almacene el array entero en el ejecutable resultante. Debido a que el array es mayor de 2GBs al compilarlo tendremos que especificar el flag -mcmodel=medium. Así que si ejecutamos:
gcc -mcmodel=medium cbomb.c -o cbomb
Veréis como se satura rápidamente la CPU, la memoria y el disco...

Fuente: HackPlayers

0 comentarios:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info
Si vas a dejar una consulta, procura tener habilitado tu perfil en Blogger o deja una forma de contacto.

Gracias por comentar!