Español | English
rss facebook linkedin Twitter

Ejecución de aplicaciones en un PDF

Como ya comenté hace un tiempo, existen multitud de acciones que se pueden realizar dentro de un PDF. Una de ellas es la ejecución de aplicaciones, que además tiene la característica de poder realizarse en diferentes plataformas: Windows, Unix y Mac.

Para probar la capacidad de este elemento me voy a basar en un PDF básico, modificándolo según mis preferencias. Primero se debe incluir un evento disparador de la acción, por ejemplo, al abrir el documento. Para ello se tiene que incluir un elemento /OpenAction en el catálogo del documento, apuntando a un objeto que será la acción /Launch, que lanzará la aplicación deseada. Dicho objeto puede contener los siguientes elementos:

  • /S: es un parámetro obligatorio de tipo nombre que detalla el tipo de acción que se describe en el objeto. En este caso su valor deber ser /Launch.
  • /F: si no se especifican las entradas /Win, /Unix o /Mac éste es un parámetro obligatorio y en él se puede encontrar la ruta de la aplicación que queremos lanzar o imprimir. Esto es algo que no había comentado, pero a través de este tipo de acción también se pueden imprimir documentos, aunque por el momento sólo en sistemas Windows.
  • /Win: es un diccionario opcional que contiene entradas específicas de este sistema operativo. Dentro de estas entradas encontramos de nuevo el elemento /F, con el mismo fin que el anterior, /D, una cadena de texto representando el directorio por defecto, /O, con valores 'open' o 'print' y siendo la primera la que se usará en caso de ausencia de este elemento, y, por último, el elemento /P, para indicar los argumentos de la aplicación a lanzar.
  • /Unix y /Mac: en teoría serán elementos del mismo tipo que /Win, pero a día de hoy no están definidos oficialmente. Para lanzar una aplicación en estas plataformas habría que indicar el path de la aplicación en el parámetro /F global, por lo menos en el caso de Linux (no funciona en evince ni en KPDF, pero sí en xpdf). Además, la ejecución mediante el parámetro OpenAction no funciona correctamente en este sistema operativo, pero sí se lanza cuando se hace click sobre una anotación. A continuación se muestra un ejemplo de cómo se podría hacer:

Tanto en Windows como en Linux, al ejecutarse la acción aparece una ventana avisando de que la aplicación se va a lanzar, preguntando al usuario si lo permite. Podéis descargar un ejemplo aquí.

En el caso de xpdf siempre se debe responder la pregunta, mientras que en el Acrobat Reader 8.1.2 de Windows se da la opción de no volver a preguntar, una muestra clara de cómo la comodidad del usuario está por encima de la seguridad en este caso. Se me ocurre un escenario bastante real, en el que el usuario marque esta casilla, y permita la ejecución de la aplicación en un momento dado, por evitar verla otra vez.

Alguien suplanta la identidad de un amigo de Pepe, y manda un correo a Pepe con un PDF muy bonito, que en una de sus páginas lanza el PowerPoint para mostrar una presentación. Seguramente la primera vez no marque la casilla del demonio, pero después de recibir varios PDFs de su amigo del alma, y en vistas a recibir alguno más, lo hará. En ese momento, podrá ejecutar todo lo que quiera sin que la ventanita se chive de lo que quiere hacer realmente. ¿Qué tal descargar un troyano y ejecutarlo de forma casi transparente? Ésta es una prueba de concepto lanzando calc.exe.


En la versión de Acrobat Reader que he usado esto se puede subsanar desmarcando una casilla, activada por defecto, y que permite la ejecución de aplicaciones externas para abrir archivos que no sean PDFs.


Como podéis ver, los PDFs no son tan inofensivos como parece, en siguientes publicaciones os iré contando un poco más sobre su lado oscuro;)

Jose Miguel Esparza
S21sec e-crime

2 comentarios:

Ariel Liguori dijo...

Realmente no son nada inofensivos, se puede hallar mucha info acerca de esto en el Blog de Didier Stevens (http://blog.didierstevens.com), e incluso hay herramientas para el parsing de un archivo pdf y también para inyectarle código JS ;)

Saludos y espero ansioso mas info.

Josemi dijo...

Buenas Ariel, gracias por la información. Yo personalmente ya conocía el blog, y ya he probado sus herramientas. De hecho, yo mismo estoy trabajando en una un poco más completa e intuitiva, pero la lista de TODOs es larga...;) De todas formas, modificar a mano un PDF tampoco tiene demasiada dificultad, sólo hay que tener en cuenta la actualización de la tabla de referencias cruzadas, aunque reconozco que es un poco aburrido.

En próximos posts tengo pensado tocar también el tema del Javascript, espero que te sea útil.

Un saludo,
Josemi


(+34 902 222 521)


24 horas / 7 días a la semana



© Copyright S21sec 2013 - Todos los derechos reservados


login