Linux local root vmsplice(): explicación

Escrito por coder el 11 de febrero de 2008 en Informática | Hits: 1222

Hola:

A estas horas del día nadie de la 'scene' de seguridad le pillará sin confesar que han salido un par de PoC's para sendas vulnerabilidades, y digo bien sendas, pues hay bastante desinformación al respecto en estos momentos y la mayoría de la gente con la que he hablado cree que sólo hay un bug, pero no es así. Hay dos.  Veámoslos:

  • Bug introducido en el kernel 2.6.17: introducido porque afecta a la syscall vmsplice(), la cual fue añadida a la rama oficial del kernel Linux con esa release y, por tanto, cualquier versión mayor o igual a la 2.6.17 y menor o igual a la 2.6.24.1, osea, =>2.6.17 && <=2.6.24.1 es susceptible a este fallo que implica escalada de privilegios. El CVE asignado ha sido el 2008-0600. Pero hay fix descargable o también puedes optar por la vía de bajarte el 2.6.24.2, que ya lo trae solucionado.
  • Bug introducido en el kernel 2.6.23, con dos CVEs, no sé por qué, 2008-0009 y 2008-0010, solucionable con este parche o descargando la versión de hoy, 2.6.24.2.

Una solución temporal si no se quiere o no se puede parchear o cambiar de kernel en estos momentos es hookear la syscall vmsplice() añadiéndole una comprobación inicial en plan hardcore tal que:

if ($current->euid != 0) return -EINVAL;

Que conste que lo he escrito de memoria, por lo que puede haber algún fallo en la sintaxis, pero quien sepa por dónde van los tiros de lo que digo sabrá aplicarlo correctamente. 

Todo esto viene porque en el advisory de Secunia pone que está afectada toda la rama 2.6.x, y no es así, como he comentado. 



         

« Jiménez Losantos estrena blog en Libertad Digital

Phrack Saint Valentine's Edition »



Comentarios

  • El 2008-02-11 19:04:00, akae (84.123.6) dijo:

    yo he intentado compilar el exploit con 3 versiones de gcc y en todas casca el mismo error... así que a mí no me afecta ^^
    pd: me cago en todos los campusbrasileros, empezando por Ender :)

  • El 2008-02-11 20:52:17, coder (10.12.34) dijo:

    akae, si te falla la compilación porque no encuentra PAGE_SIZE, es un simple #define a 4096, que es el tamaño en Linux i386, 4kB por página.

    Por cierto... ¿qué tal el RSS?.

  • El 2008-02-12 10:30:53, r0sk (217.130.44) dijo:

    El RSS va de lujo, se echan de menos más posts de este tipo *snif*.

  • El 2008-02-12 16:50:31, xavitxus (88.2.194) dijo:

    Podrias indicarme como descargar el fix para el CVE 2008-0600?

  • El 2008-02-12 17:27:33, coder (212.101.64) dijo:

    xavitxus: el fix es sólo un pequeño código:

    diff --git a/fs/splice.c b/fs/splice.c
    index 14e2262..9b559ee 100644
    --- a/fs/splice.c
    +++ b/fs/splice.c
    @@ -1234,7 +1234,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
    if (unlikely(!len))
    break;
    error = -EFAULT;
    - if (unlikely(!base))
    + if (!access_ok(VERIFY_READ, base, len))
    break;

    /*

    Suponte que tu distribución no ha sacado kernel oficial parcheado (Ubuntu 7.10, por ejemplo) todavía. Lo único que has de hacer es coger ese código, meterlo en un archivo de texto plano, descargarte el source del kernel que utilices, en Ubuntu 7.10 sería el paquete linux-source-2.6.22 y aplicarle el fix con el comando patch. No tiene pérdida.

  • El 2008-02-12 17:37:08, xavitxus (88.2.194) dijo:

    Muchisimas gracias "Coder" voy a buscar informacion sobre el comando patch.

  • El 2008-02-12 18:00:42, coder (212.101.64) dijo:

    xavitxus: otra solución si no puedes reiniciar es ejecutar esto (lo he probado y funciona):

    http://www.ping.uio.no/~mortehu/disable-vmsplice-if-exploitable.c

  • El 2008-02-12 18:04:05, xavitxus (88.2.194) dijo:

    Ya tengo el comando patch en marcha y los sources que me ha bajado mi distribucion (ubuntuJEOS) son:

    linux-source-2.6.22_2.6.22-14.51.diff.gz
    linux-source-2.6.22_2.6.22-14.51.dsc
    linux-source-2.6.22_2.6.22.orig.tar.gz

    Como aplico el patch ahora?

  • El 2008-02-12 18:08:36, xavitxus (88.2.194) dijo:

    disable-vmsplice-if-exploitable.c

    Lo he visto "Coder" pero recomendaban no usarlo por que intenta ejecutar el exploit primero y decian que podia causar inestabilidad en el sistema.

  • El 2008-02-12 19:23:03, r0sk (217.130.44) dijo:

    No sé si llevas trackbacks o no (me da que no, no veo el enlace por ningún sitio). Te iba a hacer uno pero me quedo con las ganas (guiño guiño). Comentario #200.

  • El 2008-02-12 20:11:36, akae (84.123.6) dijo:

    akae@licuadora:~$ ./exploit.bin
    -----------------------------------
    Linux vmsplice Local Root Exploit
    By qaaz
    -----------------------------------
    [+] addr: 0xc011833b
    [+] root
    root@licuadora:~#

    es la primera vez que publicas un fix que haga que funcione un exploit? :)
    a parchear!

  • El 2008-02-12 21:32:46, presi (81.202.139) dijo:

    Joder soy el último en enterarme de estas mierdas... será porque no curro en seguridad? xD

    Bueno añado el dato que los exploits publicados junto a la vulnerabilidad son para las arquitecturas x86 y x86_64 asi que como de costumbre no nos afectan a los que solemos rular en arquitecturas distintas a estas.

    Lo que no quita que sea posible escribir los exploits correspondientes a nuestras arquitecturas pero al menos nos libramos de los kiddies. xD

[ Comentar la jugada ]