martes, 9 de enero de 2007

Problemas críticos de seguridad en Acrobat 7

Lo descubrí por casualidad buscando algo completamente distinto en SecurityFocus, y me ha costado varios días comprender la magnitud del problema. Ahora que lo he asimilado, trataré de explicároslo.

Concepto de scripting entrecruzado
Una de las principales limitaciones del lenguaje javascript es que no permite que una página de un dominio obtenga información sobre páginas de otros dominios. Por ejemplo, en mi página de terra.es no puedo incorporar un guión javascript que lea la corriente RSS de este blog y la utilice para hacer una lista con los últimos titulares; lo puedo hacer con php, con flash o con java, pero no con javascript. Lo mismo ocurre con los marcos: si yo coloco este blog en un cuadro enmarcado por mi página de terra.es, la página del marco no puede leer lo que pone en la página que está viendo el usuario.

Esa limitación se estableció por motivos de seguridad: alguien se dio cuenta de que muchas páginas mantenían sus marcos alrededor de las páginas a las que enlazaban. En tales circunstancias, resultaría muy peligroso crear un marco en cuyo centro se cargara, por ejemplo, una página bancaria donde el usuario tuviera que introducir su nombre y contraseña.

Sin embargo, existen programas que no aplican la limitación anterior y permiten lo que se denomina XSS o "scripting entrecruzado". Los hackers y ladrones de identidad buscan afanosamente explotar la debilidad de tales programas.

El problema XSS en Acrobat.
Adobe Acrobat 7.x tiene un interesante mecanismo que permite agregar a un formulario PDF parámetros almacenados en una página web, en la forma: formulario.pdf#parámetro=página-de-internet. Este mecanismo permite la ejecución de comandos javascript. Dichos comandos javascript se ejecutan en el contexto de la página web en que se almacena el PDF (lo cual parece lógico), sin comprobar si proceden del mismo domino.

¿Y qué problema plantea esto?

Supongamos que yo soy un resentido alumno (no, aún no hay ninguno, ni resentidos ni no) de la página http://apuntes.byethost.com que quiere averiguar la respuesta correcta para las preguntas ortográficas del sitio. Le mando al administrador del sitio un mensaje con un link a uno de los PDF de dicha página, y añado un pequeño comando detrás que me permita obtener las cookies del administrador:


Querido administrador:
No comprendo muy bien cómo hay que rellenar la siguiente ficha de lectura:

http://apuntes.byethost3.com/moodle/file.php/8//fichalibr.pdf#script_malicioso

¿Podría explicarme qué quiere decir el punto 2.3?


Si tengo suerte, el administrador, por pura vagancia, averiguará qué dice el punto 2.3 pulsando el enlace que le he mandado, y a través del script malicioso podré obtener la cookie con su ID de sesión para conectarme al sitio como administrador.

Bueno, yo no tengo una página web; ¿cómo me afecta esto?

Que no tengas una página web no quiere decir que no puedas tener un perfil de hotmail o de orkut, o un identificador en alguna otro portal que requiera un par usuario:contraseña. Con que haya un pdf en alguna otra página de dicho portal y pulses en un vínculo a él, pueden robar tu identidad.

Además, también pueden robar datos de tu disco duro. Los hackers se han dado cuenta de que casi todas las instalaciones de Adobe Acrobat llevan ciertos archivos pdf instalados por defecto. Así que el hacker puede usar un enlace como:

file:///Archivos%20de%20programa/Acrobat/Archivo%20de%20Demostración.pdf#variable=programa_malicioso

Si el archivo pdf enlazado está en el disco duro, el script se ejecutará en el contexto del disco duro, es decir, podrá robar a placer archivos almacenados en él.

¿Basta con el URL de los archivos PDF para que no lleven almohadillas ("#")?
La cosa no es tan fácil. En primer lugar, cambiar el texto visible de una URL es bastante fácil, como lo demuestran los correos fraudulentos (phising).

Y en segundo lugar, existen servicios como tinyurl que permiten crear direcciones abreviadas, sustituyendo la dirección del PDF (incluída la almohadilla y todo lo que lleva detrás) por ocho letras.

¿Cuál es la solución recomendada?

Una buena opción podría ser pasarse a Acrobat 8. Otra opción, buscar actualizaciones para Acrobat 7. Una última, instalar visores PDF alternativos.

Fuentes:

2 comentarios:

José Moya dijo...

Nota: Se supone que es un problema universal, que afecta a todas las combinaciones de navegador y sistema operativo que usen Adobe 7 (NO adobe 6 ni Adobe 8).
Probé originalmente con Suse 9.3 + Firefox 1.5.x + Adobe 7; también afecta a Windows XP/SP2 + Firefox 2.0 + Acrobat 6. Sin embargo, no parece afectar a Windows XP/SP2 + Internet Explorer 7 + Adobe 6, aunque quizá sea cosa del antivirus (o de que el plugin de Acrobat 6 para Explorer esté libre de defectos presentes en el plugin de Adobe Acrobat 6 para Netscape/Mozilla).

Para probar la vulnerabilidad en vuestro sistema:

http://url_con_un_pdf#X=javascript:alert("hola");

Sustituid url_con_un_pdf por una página web en que aparezca un pdf. Si veis un mensaje con la palabra "hola" en el navegador, el problema afecta a vuestra máquina

José Moya dijo...

Acabo de comprobar que la combinación Windows 98+ internet explorer 6 + Acrobat 5.x utilizada en los ordenadores más obsoletos de mi lugar de trabajo es vulnerable.