X11 Servidor gráfico logo

Servidor gráfico X11 vulnerable desde hace 23 años

X11 Servidor gráfico logoEl sistema de ventanas X (en inglés, X Window System) es un software que fue desarrollado a mediados de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que está en uso actualmente. X es el encargado de mostrar la información gráfica de forma totalmente independiente del sistema operativo.

Pues bien resulta  que recientemente se ha corregido una vulnerabilidad de desbordamiento de pila que afecta al servidor X11. El fallo permitiría a un atacante local elevar privilegios a root a través de un archivo de fuentes de usuario.

Se da la curiosa circunstancia de que el fallo encontrado estaba presente desde el año 1991 y, presumiblemente, no ha sido conocido hasta ahora. El error no ha sido encontrado tras una laboriosa investigación o revisión concienzuda del código, el fallo fue detectado tras procesar el código fuente a través de la herramienta de análisis estático «cppcheck».

«cppcheck» es una interesante herramienta, escrita en C++ y con licencia GPL, que nos permite analizar el código fuente en lenguaje C y C++. Tras el procesamiento del código fuente se nos indica una lista de errores y advertencias que podría contener el código del programa. Entre los errores que detecta se hallan los típicos desbordamientos de búfer, pérdidas de memoria o doble liberación de memoria entre otros.

El fallo que afecta al servidor X11 se encuentra en la librería libXfont, librería usada para dibujar tipografías, concretamente en el archivo «lib/libXfont/src/bitmap/bdfread.c». Tal y como se puede deducir de la propia advertencia de cppcheck:

[lib/libXfont/src/bitmap/bdfread.c:341]: (warning)

scanf without field width limits can crash with huge input data.

Se emplea un uso inadecuado de la función «sscanf» de la librería estándar de C. En concreto y como podemos ver en el parche aplicado por los desarrolladores, no se está limitando el tamaño de la cadena a leer desde «line» a «charName». Esto terminaría desbordando el tamaño de la variable en la pila que como podemos ver es una variable automática cuyo tipo es un array de 100 char.

diff –git a/src/bitmap/bdfread.c b/src/bitmap/bdfread.c

index e2770dc..e11c5d2 100644

– — a/src/bitmap/bdfread.c

+++ b/src/bitmap/bdfread.c

@@ -338,7 +338,7 @@ bdfReadCharacters(FontFilePtr file, FontPtr pFont,

bdfFileState *pState,

char charName[100];

int ignore;

 

– – if (sscanf((char *) line, «STARTCHAR %s», charName) != 1) {

+ if (sscanf((char *) line, «STARTCHAR %99s», charName) != 1) {

bdfError(«bad character name in BDF file\n»);

goto BAILOUT; /* bottom of function, free and return error */

}

La solución ha sido simplemente limitar el tamaño de lectura a 99 dejando una unidad para la terminación » de cadena.

Esta función se usa cuando se están procesando archivos BDF (Glyph Binary Distribution Format), un formato de archivo para almacenar mapas de bits de fuentes propiedad de Adobe. Dichos archivos pueden ser manipulados por un atacante para incluir nombres de carácter arbitrariamente largos que permitan sobrescribir el búfer reservado. Si se consigue explotar es posible elevar privilegios y ejecutar código arbitrario con permisos de root.

Fuente: http://unaaldia.hispasec.com/

¿Te resultó interesante? Compártelo ...



Juan Pablo Pérez Manes

Publicado por Juan Pablo Pérez Manes

Facebook » Forma parte de GUTL desde el 11 febrero, 2012. Licenciado en Informática, Webmaster, Administrador de Redes, Profesor de Informática y Coordinador Provincial de GUTL Matanzas.

Este artículo tiene 15 comentarios

  1. Es bueno que ocurran cosas como estas para que el mundo se dé cuenta de que a veces tomamos ciertos dogmas como algo irrevocablemente cierto o infalible. Todo el software del mundo, no importa si es cerrado o abierto, propietario o libre, está sujeto a errores humanos y vulnerabilidades de seguridad, entre otras cosas. Digo esto porque hay muchos promotores del software libre y abierto (NO TODOS, aclaro) que toman el tema como si de una religión se tratase y defienden hasta el fanatismo el hecho de que supuestamente algún que otro software de este tipo es invulnerable y constantemente auditado por «cientos de miles de ojos». Este es un buen ejemplo que demuestra que a veces las cosas no son tanto como asumimos que son.

    Y nada menos que una vulnerabilidad de este tipo con el servidor X11, ¡hace 23 años! Sin comentarios… que bueno que ya ha sido corregida.

    • Sí, los talibanes realmente a veces se la toman a la ligera.
      Solo una observación: ¿cómo harías para encontrar un posible error en el código de alguna de las aplicaciones de Microsoft?

    • Es bueno que ocurran cosas como estas

      Síp en efecto, es bueno que ocurran cosas como estas … así podemos recordarle a los usuarios de Windows, que aún así con los bugs que puedan existir en Linux, su sistema (o sea, Windows) es infinitamente mucho más vulnerable 🙂

    • Eric no se que tratas de demostrar pero en este mundo sucede lo inverso que en el universo privativo: no se ocultan los problemas, puedes corroborar leyendo el Contrato Social de Debian como ejemplo.

      Que un bug se escape durante 23 años, que dicho sea de paso no ha sido activamente explotado, no implica automaticamente que la afirmación «el software libre es mas seguro porque es constantemente auditado por cientos de miles de ojos» se convierta en una falacia …. quizá lo fuera si vinieras con pruebas de uso activo de este bug durante sus 23 años de libertad. Al menos gracias a los cientos de miles de ojos los bugs en cualquier programa licenciado con alguna licencia libre son subsanados en cuestión de horas … cosa que no recuerdo que pasara con M$ donde si se han encontrado con bugs calificados como Zero Day que han sido utilizados extensivamente … 😉

  2. Tengo que confesarlo, mi verdadero nombre es Maulana Samiul Haq y soy un talinuxeros, mi misión es volar todos los win2 del mundo ya que en el paraíso me van a estar esperando las 7 distro vírgenes que nadie a tocado nunca con sus respectivos repos……

    Ahora viene la parte seria, esta bien un bug de hace 23 años, puede que dentro de unos años mas se encuentre otro de 27 años, pero win2 cuantos bug vendrá arrastrando desde el 25 de noviembre de 1985???? y muchos de ellos dejados a propósito por la misma compañía

    ¨Alabado sea el señor Tux hermanos¨ haha 😉

  3. @Eric sabias tu lindo Windows XP aunque tengas el ultimo parche de soporte y actualización es lo mas DEFONDABLE DEL MUNDO, con Meta Xploit sin pasar mucho trabajo alguien con ciertos conocimientos de redes puede colarse en tu maquina y obtener permisos de System que es el equivalente a root en Linux y hacer lo que le de la gana en tu PC desde encender la webcam hasta borrarte tus datos personales o del sistema, cerrarte procesos, y un largo etc, ¿de que seguridad tu hablas? Win 7 y Win 8 son menos vulnerables pero igual se les puede meter la mano ¿Win es seguro? estos win fanboys están de truco y lo mejor hablan sin saber, además ya te dije una vulnerabilidad del sistema que usas, ahora intenta arreglarla? aunque seas muy bueno programando sencillamente no puedes, tienes que esperar que algún día si los de Microsoft quieran arreglarlo, si pueden, en fin muchacho no es solo obsesión o religión es la pura verdad 😛

  4. Jajajajajaja, es gracioso sentarme a leer los comentarios, porque han tenido precisamente la reacción fanatizada exacta que cualquiera hubiese esperado. Nadie mencionó a Microsoft ni a Windows, se habló de código abierto y cerrado, propietario y libre, todo generalizado, no de compañías ni productos. Sin embargo, instantáneamente comenzaron las comparaciones con «el malvado enemigo» para intentar desprestigiarlo y anularlo, aun cuando el post trata acerca de un error en el servidor X11, no de Windows.

    Por cosas como estas es que la comunidad del software libre es vista en todas partes del mundo como resistente a las críticas e intolerante. Si a Linux le pusieran Cristo, o Buda o Alá, no tuviese ninguna diferencia (lo siento, ustedes escogieron mencionar nombres y apellidos, jajajajajaja, aunque esa nunca fue la intención).

    Señores, por favor y por última vez, el sentido de la crítica no era ese, ni tampoco era contra Linux ni para comparar con Windows. El sentido real era el de darnos cuenta de que a veces damos ciertas cosas por sentado y cuando suceden cosas como estas nos sirven como recordatorio de que nunca se puede bajar la guardia ni que nada es infalible. Era solo eso. Nosotros, los advocados al software propietario, aceptamos que las vulnerabilidades existen y se corrigen después de todo, pero no andamos por ahí tirándole piedras al techo del vecino cuando el nuestro es cristal.

    Y francamente, basta de bromas ya, una vulnerabilidad de ese tipo, ¡y desde hace 23 años! por favor. Parece que la teoría de los miles de ojos auditando el código falla de vez en cuando… cabe preguntarse si realmente hay tantas personas auditando todo el código del mundo o es solo un dogma que se ha hecho costumbre repetir como si de una verdad innegable se tratase…

    • Otra vez vienes con el orgullo de fanboy herido porque los talibanes linuxeros de trataron mal …. cada vez que se te afronta con hechos tu mera salida es hablar de los «fanáticos».

      La comparación con Windows la propiciastes tu, apologista de M$ y el software privativo, al señalar este bug de 23 añitos como ejemplo de la «falacia» de la seguridad del software libre garantizada por los «cientos de miles de ojos» que auditan el código diariamente.

      Hermano, la familia libre nunca ha ocultado sus vulnerabilidades, porque eso justamente la fortalece, cosa que es dialetralmente opuesta en la familia privativa donde revelar una vulnerabilidad puede afectar la imagen comercial.

      Sobre el bug, es verdad, fallaron los «cientos de miles de ojos» que auditaban el código … pero fallaron tambien los «cientos de miles de ojos» de los crackers que buscan explotar cualquier vulnerabilidad … ¿será que este bug no era tan serio? 😉

  5. people…

    lo que si hay es un lqqd enfatico, con unix estoy mucho mas resguardado que las hipotermias a que es ametrallado microsoft.

    a pesar del bug de hace 23 abriles, detectado a las x11

    saludos cordiales

Los comentarios están cerrados.