Camuflar Applets en imágenes para ejecutarlos como si fueras otro

Quizá algunos os sorprendáis, pero las extensiones de los ficheros (.exe, .mp3, .docx, etc.) no son imprescindibles. Los ficheros contienen una cabecera MIME que, entre otras cosas, da esa información. Es decir, si tenemos un archivo MP3 y le cambiamos la extensión a MAL el archivo podría ser reconocido como MP3 si se examina su cabecera MIME. Algunos S.O. hacen esto, otros no, pero la información está ahí.

En la mayoría de los casos, la información MIME está al principio del fichero y a continuación los datos. Sin embargo, nada impide que esto sea al revés, y algunos formatos lo hacen, entre ellos los ZIP.

¿Por qué os cuento esto? Veréis, los JAR son básicamente archivos ZIP, por lo que también tienen su cabecera MIME al final del archivo. Vamos, que se leen “de atrás hacia delante”.

Si tomamos un fichero que tenga su cabecera MIME al principio, por ejemplo un jpg, y le concatenamos un JAR ¿Qué ocurriría? Bueno, el S.O. empezaría a leer por el principio, encontraría la cabecera MIME del JPG y reconocería el archivo como un JPG. Si lo abrimos, el sistema empezaría a leer y al llegar al final del JPG pararía. Aun quedarían datos (de hecho, quedaría todo el JAR) pero el sistema pararía en el primer “fin de fichero”, que es el del JPG. En otras palabras, el sistema omitiría el JAR.

¿De qué nos sirve? Pues resulta que cuando a un navegador le decimos que ejecute un applet de java, le damos un archivo y el nombre de la clase que queremos que instancie dentro de JAR… pero como la extensión no es relevante, nada nos impide pasarle nuestro JPG modificado. Como el navegador sabe que es un Applet y que los Applet se leen “del revés” empezaría por el final de fichero y leería la cabecera MIME del JAR, parando en el primer “fin de fichero” que sería el del JAR, por lo que no hay ningún problema.

Es decir, ahora mismo tenemos un archivo JPG con un JAR embebido. ¿Aun no veis el peligro? Imaginad que creamos un JAR que nos envíe por correo la cookie del usuario, lo adosamos a un JPG y lo subimos a uno de los miles de sitios de intercambio de imágenes…

Yo he hecho una simple prueba subiendo un JPG/JAR modificado al servidor de mi universidad. Lo más grave es que es un HTTPS y la mayoría de los alumnos tienen el certificado aceptado, así que básicamente están confiando en código remoto…

Si creáis y abrís este HTML en vuestro navegador, estaréis ejecutando el código del JAR alojado en un JPG subido al servidor HTTPS de mi universidad. Lo único que hace es mostrar un “Hi” vía javascript, así que tranquilos. Si no tenéis aceptado el certificado de la universidad, veréis como os pregunta si deseáis confiar en él… pero observad la ventana, porque se identificará como la universidad:

<html>
	<head>
		<title>Simple prueba de seguridad</title>
	</head>
	<body>
		<applet code="HolaMundo.class" archive="https://euitio178.ccu.uniovi.es/foros/images/avatars/17997412754bf2b82350a14.jpg"></applet>
	</body>
</html>

image

image

Es decir, hemos conseguido camuflar un JAR en un JPG y ejecutarlo haciendo que parezca que ha sido creado por otro.

Moraleja, cuando permitas al usuario subir archivos jpg, asegúrate de que lo que suba sean archivos jpg…

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

3 comentarios

  1. I have a video post in blogger then how can I put a repost link to that? I have already go to addthis but don’t know how to put the code in its proper place wherein the individual posts are being place with an embed this or repost this or share this. Please help..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *