alerta.gif

Recientemente se ha publicado el segundo (que yo recuerde) fallo de seguridad crítico de los de verdad en Mac OS X. A diferencia de los "globos sonda" con  los que nos han obsequiado esta pasada semana, se trata de un problema real y de una gravedad extrema.

Además, los sitios donde se ha publicado la descripción yerran el tiro; están apuntando a Safari (que sí tiene un problema) cuando en realidad existe un problema de fondo mucho más grave.


EL FALLO "DE SAFARI"

La noticia ha saltado esta misma mañana. La función de "abrir archivos seguros automáticamente" de Safari puede ejecutar automáticamente un script con comandos de shell.

El truco consiste en aprovechar una funcionalidad heredada del Mac OS "clásico"; un archivo puede llevar asociada una etiqueta, invisible para el usuario, con cierta información, a la que se conoce como "atributos extendidos" o "resource fork" en la terminología clásica. Entre los datos que contiene esta etiqueta está la aplicación con la que debe abrirse dicho archivo. De esa forma, podemos crear un archivo llamado "TARARI" y que el sistema sea capaz de abrirlo sin que sea necesario decirle con qué aplicación debe hacerlo.

Con la adopción de Unix, además, se ha heredado una segunda forma de identificar el tipo de un archivo: la extensión, que es ese sufijo que situamos a la derecha del nombre, separado de éste por un punto. De esta manera, cuando se va a abrir un archivo, se determina su tipo y se llama a la aplicación correspondiente para abrirlo.

Safari, además, utiliza la extensión para decidir si un archivo es "seguro" o no. ¿Qué se considera un archivo "seguro"? Uno que solamente contendrá datos, y cuya visualización no supone en principio un riesgo de seguridad. Entre estos archivos seguros están los gráficos (TIFF, JPEG, GIF, PDF…), sonidos (AIFF, SDII, WAV…), vídeos (.MOV, .AVI…) y lógicamente no es "seguro" algo como un programa. El usuario debería intervenir antes de que se ejecute.

Lo que se ha descubierto es que es posible colar un archivo que tenga instrucciones para el terminal, y que el Safari a su vez lo considere "seguro". Esto se hace poniéndole al archivo una extensión .JPG (como si fuera un vulgar archivo gráfico), añadiendo un atributo extendido que llame a la aplicación Terminal.app, y metiendo todo esto en un archivo .ZIP para que pueda transmitirse por Internet (por ejemplo, descargarse de una página web) sin problemas.

Al recibir el archivo .ZIP, el Safari lo abre (es decir, se descomprime) por ser inofensivo. Al descomprimirse, se crea el archivo .JPG pero con los atributos extendidos. El Safari examina la extensión, "ve" que es un JPG, lo clasifica como archivo inofensivo y lo abre. Al abrirlo, se ejecuta el terminal, que a su vez interpretará las instrucciones contenidas en el archivo maligno.

Hasta aquí el problema ya parece lo suficientemente serio, tanto como para ser clasificado como el segundo problema crítico de verdad que he visto en Mac OS X desde hace tres años.

LA VERDADERA NATURALEZA DEL PROBLEMA

Sin embargo, el problema es aún más serio (y muchos sitios de noticias no se han enterado) porque no es un problema de Safari, sino del sistema operativo. Y el usuario puede verse afectado igual aunque tenga desactivada la apertura automática de archivos en Safari, o lo haya descargado con cualquier otro navegador, lo haya recibido por ftp, por correo electrónico, por iChat…

Hemos dicho que hay en principio dos formas de decidir cómo abrir un archivo: la extensión del nombre, si la tiene, y las especificaciones contenidas en los atributos extendidos.

Además, a todo archivo se le asigna un icono en el Finder. Y este icono se asigna por el siguiente orden de prioridades:

  • 1- Icono correspondiente a la extensión del nombre

  • 2- Icono almacenado en los atributos extendidos

Y he aquí un conflicto, una grave inconsistencia. A la hora de decidir cómo abrir el archivo, el sistema da prioridad a la aplicación especificada en los atributos extendidos. Pero a la hora de asignarle un icono, que es la pista que nos va a permitir decidir si podemos abrirlo tranquilamente o no, en lugar de guiarse por el mismo criterio utiliza la extensión, que acaba de ignorar al asignar la aplicación que abrirá el archivo.

Es decir, es posible que exista (como demuestra el ejemplo de explotación del fallo) un archivo que tiene extensión .JPG, mostrado por el Finder como un archivo gráfico con el icono correspondiente, que será el icono del programa que abra ese tipo de archivo en nuestro sistema, sea éste el programa de Vista Previa, Graphic Converter o cualquier otro, pero que, al abrirlo, se abrirá con la aplicación especificada, que en nuestro caso es el terminal (Terminal.app).

Esto puede explotarse aunque no se abra automáticamente con el Safari. El usuario recibe un archivo .ZIP a través de iChat, lo abre (dándole un doble click) y se descomprime, aparece en el escritorio el archivo de imagen contenido en el .ZIP con (por ejemplo) el icono de la vista previa, abre la inocente imagen, y… ¡PUM! se abre un Terminal y se ejecutan los comandos.

POR QUE ES TAN SERIO

Se trata de un gravísimo problema de confusión. Hay una serie de decisiones críticas, tanto la que toma el Safari de abrir el archivo o no, como la de cómo mostrárselo al usuario, que se están tomando con un criterio _diferente_ al utilizado para escoger la aplicación que abrirá el archivo. Y esto es lo que hace que sea especialmente peligroso.

¿Qué puede hacer Apple para solucionarlo? Pues no lo tienen fácil, porque algo seguramente se romperá como consecuencia de esto, aunque, francamente, en este caso me parece un mal menor.

En el caso del sistema operativo, que es el más serio, debe estar unificado el criterio para decidir cómo se muestra un archivo en el Finder. A la hora de escoger el icono debería tenerse en cuenta con qué se va a abrir finalmente el archivo, y el icono debería reflejarlo.

Quizás no sería mala idea que el sistema alertara de alguna forma (y quizás preguntara al usuario la primera vez que se se abre) si hubiera una discrepancia entre la extensión del archivo y la aplicación seleccionada. Por ejemplo, si un archivo lleva extensión .JPG y especifica que se abra con PhotoShop no parece especialmente peligroso, pero si tiene extensión JPG y especifica que se debe abrir con una aplicación que en principio no entiende de JPGs (para entendernos, no está entre las recomendadas para ese tipo de archivo), debería alertarse al usuario.

En el caso de Safari, a la hora de tomar dicha decisión debería de tenerse en cuenta el mismo orden de prioridades.

De todas maneras, no me parece que un navegador sea el sitio apropiado para tomar esta decisión; yo sin más eliminaría esa funcionalidad que tengo desactivada desde el primer día.

QUE HACER PARA PREVENIR INCIDENTES

Bueno, ante todo, es fundamental actualizar el sistema en cuanto salga la actualización. No será inmediata, supongo, porque tienen un montón de cosas que sopesar y es preferible que, digan lo que digan los analfabestias de las revistas saquen a la primera una buena solución que el que se dediquen a poner tiritas inútiles que no atacan el problema en profundidad al estilo Microsoft.

Mientras tanto, las cosas que se pueden recomendar son:

  • 1- Desactivar la apertura automática en Safari. Yo no la reactivaría nunca, por muchos motivos.

  • 2- Mantener despejado el escritorio. Supongamos que un usuario está navegando por estas redes de dios, y descarga sin darse cuenta un .ZIP envenenado. No se entera y no le da mayor importancia. Pero resulta que tiene el escritorio tan revuelto como suelo tenerlo yo, y dos semanas después, ¡oh, albricias! ¿Qué metí en este archivo .ZIP? Ah, ¡una foto!. Abre la "foto" y, ¡ZAS!. Evitemos dejar bombas de relojería por ahí.

  • 3- Como nuestros "colegas" de Windows, va a ser imprescindible extremar las precauciones. Si recibís un .ZIP (o un archivo del tipo que sea, puede ser un .DMG)  con fotos, en lugar de abrirlas dándoles un doble click podemos abrirlas ejecutando la aplicación de "vista previa", Graphic Converter o la que sea, y utilizando el menú "Archivo->Abrir".

También se puede utilizar la función de "información sobre un archivo" del Finder, es decir, seleccionar el archivo sospechoso con un sólo click, y pulsar manzana-I, para acto seguido especificar con qué aplicación debe abrirse, pero me parece más probable cometer un error en este caso. Es más seguro hacerlo con el programa de vista previa.

En fin, esto es todo por el momento en la versión 1. Seguiré actualizando si hay novedades.

versión 2: añadida una pequeña diatriba sobre el Principio de la Mínima Sorpresa

CONFUSIONES MÁS FRECUENTES

Quisiera añadir un par de cosas sobre la resolución de problemas de seguridad. Hay que buscar siempre soluciones generales, nunca quedarse con los casos particulares de explotación de un fallo concreto.

¿A qué me refiero con tan críptica frase? Pues a que no solamente hay que tener cuidado con los archivos .ZIP, sino en general con cualquiera capaz de transportar archivos con metadatos. Que no es un problema del Terminal.app, por lo que poco ofrece el desactivarlo/borrarlo/renombrarlo/detectar su intento de ejecución. Y que no es un problema solamente de Safari (que también lo es), sino:

  • 1- Un problema de tomar decisiones basándose en información inconsistente. Ante la duda es mejor hacerse el tonto y preguntar al usuario: "¿Con qué quieres que abra esto?"

  • 2- Un problema de mostrar información incoherente al usuario. Si lo vas a abrir con Terminal (o Photoshop) pon el icono correcto.

  • 3- Un problema de añadir una característica que aporta bien poco (la apertura automática) y para colmo puede presentar problemas de seguridad.

Sobre la apertura automática, creo que hace más mal que bien, violando un principio de diseño llamado "Principio de la Mínima Sorpresa". Supongamos que estoy con mi portátil, con poco disco duro libre y poca batería. Supongamos además que me conecto a una red para descargar un archivo grande, que es un .dmg.gz, o sea, una imagen de disco comprimida.

Me pongo a descargar, y el Safari además de descargar lo descomprime, lo que consume un montón de batería, y encima me termina de llenar el disco. ¿No sería más lógico que "descargar" sea eso, descargar, y "abrir" sea eso precisamente, abir?

Cierto que en muchos casos puede parecer más cómodo que se abra automáticamente, pero ¿tanto cuesta abrirlo después de descargarlo?

Comenta este artículo en los Foros