Código malintencionado dentro de una imagen GIF

Como sabemos, las imágenes GIF son utilizadas dentro del diseño web para varios propósitos; spacers, pequeñas animaciones y emoticons son los más usados.

Lo que muchos desconocen es que es posible añadir código dentro de la imagen, el cual se ejecutará cuando el visitante intente ver la supuesta imagen en una pestaña nueva del navegador. Este comportamiento supone un hueco en la seguridad de prácticamente todos los navegadores, y un atacante puede usarlo a su favor.

El presente artículo presenta desde un punto de vista educativo cómo reproducir dicho fallo. Esto es lo que necesitamos:

  • Una imagen GIF estática (no animaciones)
  • Un editor de texto que permita editar archivos en modo binario (edit.com de Windows XP por ejemplo).
  • Hosting con PHP

El truco consiste en el mal tratamiento (?) que los navegadores dan al atributo src dentro de la etiqueta <img>, ya que al recibir texto sin sentido intentan renderizarlo como imagen, y en el caso de los GIF (por alguna razón) después de encontrar la marca de fin de archivo ignoran el resto (que en este caso es nuestro código malintencionado) -1-. Esto significa que nuestra imagen con código añadido es inofensiva cuando se muestra dentro de una página Web, no así cuando se muestra sola.

*

Interpretando texto como imagen

En la imagen de arriba se observa una página con tres imágenes. De arriba hacia abajo tenemos: face.gif (imagen original), face2.gif (imagen original  con código añadido) y face2.php (imagen original con código añadido y extensión PHP). Observa como el navegador muestra la última imagen aún cuando la extensión de la misma es PHP, esto es por el comportamiento descrito arriba.

Añadir el código a la imagen

Antes que nada voy a asumir que tienes la imagen guardada en una carpeta accesible desde el navegador, por ejemplo http://localhost/misitio/. Para añadir el código a la imagen, la copiamos y pegamos con extensión PHP. Yo la nombré face2.php (si no quieres conservar la original puedes omitir la copia). Abrimos el PHP en modo binario y procedemos a editarlo. Para este artículo usaré el editor de MSDOS, que todavía venía en Windows XP. Estos fueron los pasos que hice:

  • Inicio -> Ejecutar ->cmd<ENTER>
  • Usando el comando cd llegué hasta la carpeta donde está face2.php.
  • Edit<ENTER>
  • Menú Archivo -> Abrir.
  • Seleccionamos face2.php y marcamos la casilla “Modo binario”, el ancho lo podemos dejar en 70 (ver imagen).
*

Asegurarse de marcar la casilla “Modo Binario”.

Después de dar clic en Aceptar, el editor nos mostrará el ASCII de la imagen. Considera que no debes usar nunca la tecla <ENTER> mientras edites el archivo.

Usando las teclas de dirección nos desplazamos al final del archivo, el último caracter tiene que ser un ; (punto y coma) cuyo valor es 59 (ver barra de estado). Después de este caracter, podemos añadir código PHP o HTML indistintamente. En el ejemplo le he añadido un phpinfo();

*

Si guardas y abres cualquier navegador con la URL de la imagen, deberás ver una página llena de símbolos, pero hasta abajo deberá aparecerte los datos que muestra phpinfo():

*

Binario del GIF con phpinfo añadido.

Sin embargo, si en otro archivo HTML colocas ese face2.php como atributo src de una etiqueta <img> la imagen se muestra sin ningún problema.

Otro ejemplo, ahora con Javascript

*

Añadiendo JS a un supuesto GIF

Los códigos que se añadieron en estos ejemplos son relativamente simples, pero nada impide que se puedan añadir cualquier clase de códigos malintencionados.


Notas:

1 Un fallo similar fue descubierto en 2003, pero con la etiqueta <object> y su atributo data, aunque sólo afectaba a Internet Explorer -en realidad le sigue afectando, incluso a  Microsoft Edge, el navegador de Windows 10.

Anuncios

Un comentario en “Código malintencionado dentro de una imagen GIF

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s