Dirty COW: vulnerabilidad en Linux que permite escalada de privilegios

dirty-cow

Se ha descubierto una nueva vulnerabilidad en el kernel. Nombre llamativo, bonito logo, cuenta en twitter y sitio web dedicado –tienda online incluida– todo eso podría hacernos pensar que se trata de algo importante. Bueno, pues en este caso si lo es.

Clasificada de forma oficial como CVE-2016-5195 y descubierto por Phil Oester –un experto en seguridad y desarrollador de Linux–, Dirty COW (copy-on-write) permite una escalada de privilegios de forma remota o local.

El problema se localiza en el subsistema de memoria del kernel, en el proceso de copia virtual de operaciones en escritura (copy on write) que hace el núcleo. A efectos prácticos permitiría a usuarios locales sin privilegios utilizar un exploit, para escribir y tener acceso a partes del sistema que son de otros usuarios o incluso de root.

Es decir archivos disponibles por defecto en modo de solo lectura, que podrían ser modificados, introduciendo cualquier tipo de código malicioso, todo tipo de malware, incluyendo rootkits.

Por supuesto también puede ser utilizado (y algunas fuentes sugieren que así ha sido) “in the wild”. En particular en servidores web o servicios online que permitan subir archivos, según comentan en Ars Technica, que lo describe como “most serious Linux privilege-escalation ever”.

En Ars siempre han sido de darle bastante caña a Linux y al software libre en temas de seguridad –los de Windows le suelen pasar más desapercibidos–, pero sin caer en el alarmismo (vamos a morir todos, en particular los usuarios de Android) señalar que ya existen pruebas de concepto y exploits que demuestran que es posible ganar credenciales de root, en apenas unos segundos.

La vulnerabilidad ha estado presente durante muchos años (desde la versión 2.6.22 del kernel, liberada en 2007) e incluso Linus fue consciente de ella en su momento.

Para mitigarla se incluyó un parche que posteriormente fue eliminado porque era incompatible con otras funciones del kernel y se pensó que en el fondo era un bug trivial, sin aplicación práctica. El mismo Torvalds lo comenta:

This is an ancient bug that was actually attempted to be fixed once (badly) by me eleven years ago in commit 4ceb5db9757a (“Fix get_user_pages() race for write access”) but that was then undone due to problems on s390 by commit f33ea7f404e5 (“fix get_user_pages bug”).

In the meantime, the s390 situation has long been fixed, and we can now fix it by checking the pte_dirty() bit properly (and do it better).

Linux 4.8.3, 4.7.9 y 4.4.26 LTS son las ediciones seguras de las diferentes ramas del núcleo en este momento.

Algunas de las principales distribuciones GNU/Linux ya han actualizado su versión del kernel para resolver la vulnerabilidad y otras están camino de hacerlo (a la hora de escribir esto, Arch Linux lo tenía en el repo testing)

Podéis comprobar vuestra versión de kernel, desde la terminal mediante el comando:

uname -a

Tenéis más información en la web de Dirty Cow, además de algunos consejos “útiles” sobre como desinstalar Linux o prevenir que este pase en el futuro, donando al proyecto FreeBSD

Por supuesto también os podéis pasar por la tienda y echar un vistazo a las ofertas: maletines para ordenador, camisetas, relojes, mochilas, relojes de pared, tazas…a precios prácticamente regalados (de $300 a $17 000), para celebrar la ocasión.

Yo ya le tengo echado el ojo a esta especie de termo:

termo-cow

No se puede decir que a su creador le falte sentido del humor. A partir de ahora ninguna revelación de vulnerabilidad sin su tienda online.

13 thoughts on “Dirty COW: vulnerabilidad en Linux que permite escalada de privilegios”

  1. ZZAZZ says:

    Linux por que???

    Me cambio a OpenBSD, con el disco duro cifrado, sin entorno de escritorio y sin Internet.

    Este mundo ya no es seguro.

  2. carlosky77 says:

    ¿Se acuerdan cuando la NSA visitó a Linus???. Seguramente este es un bug de los tantos que existen dentro del kernel para que “Esclavos Unidos de América” pueda espiar tranquilamente. Ni siquiera los BSD se salvan. No olvidar que el FBI implantó un backdoor en OpenBSD.

    1. luis says:

      Me parece que era en la pila IpSec pero theo pidio a toda la comunidad auditar Ipsec, los BSD tienen pocos recursos a diferencia de linux donde hay una amplia mas grande de apoyo por parte de las empresas, no hay q olvidar q OpenBSD fue uno de los primeros en correr Xorg sin privilegios de Root, fue capaz de asegurar las X para que no obtengan privilegios de root, OpenBSD tiene un firewall PF con relayd son capaces de filtrar las conexiones SSL a diferencia de linux donde tendrias q recompilar todo el nucleo y ademas correr con privilegios de root Netfilter es decir q si logran hacer un overflow en la pila tcp/ip por culpa de SSL obtienen acceso a todo el server, en OpenBSD Relayd se encarga de filtrar SSL de manera sencilla y corriendo como demonio sin privilegios, ahora ultimo Theo agrego Pledge el cual es una subrutina del kernel que filtra las SYSCALL semejante a seccomp-bpf de linux ¿la diferencia? simple pledge esta por default en todo el sistema mientras que seccomp-bpf de linux tienes q reconfigurar el programa y recompilar el kernel para hacer un sandbox a nivel de SYSCALLs y evitar ataques de Surface.

      Lo unico que le falta a OBSD es mejorar el diseño de las X para que no se permita keylogers y demas bichos ya que por diseño Xorg esta roto y asi roto los desarrolladores de GNOME Y KDE lo usan xD, eso paso porq se enfocaron mas en correr como locos contra windows xp,7 en vez de revisar las bases de las X,lo cual nadie hizo, los de openbsd dijeron que era mucho codigo para auditar Xorg y sencillamente lograron crear un pequeño driver ‘Aperture’ q usa gallium3d el cual emula una grafica sin permisos de root, mientras q los linux volaban con sus X rotas xD,incluso diseñaron POLKIT xD, cuando digo roto me refiero a que linux no emulaba la grafica sino la usaba con derechos de root donde se sucedian todos los ataqs de surface, estamos 2016 y aun sigue roto Xorg claro q ahora corren Xorg sin root y usan selinux para filtrar las syscalls, selinux es un gigantesco pedazo de codigo hecho por la NSA(expertos en espionajes) imagina si IpSec fue hecho por unos gatos del FBI ahora piensa que Selinux fue hecho por la NSA xD.

      Por ultimo a Linux Torvals nunca le INTERESO LA SEGURIDAD DEL KERNEL A EL SIEMPRE LE IMPORTA MAS LA FUNCIONALIDAD SOBRE LA SEGURIDAD, es decir si la wevada funciona bien usenlo si despues aparecen bugs los corregimos, hagan sus forks de mi kernel si no calza tu funcionalidad con mi kernel. Linus Torvals llamo a los desarrolladores de OBSD “Monos masturbadores”. Una ultima cuando salio el famoso ataq a OpenSSL el “OpenSSL Heartbleed” solo habian 2 desarrolladores trabajando ahi mientras el 50% a 60% de sitios de internet usaba OpenSSL para que vean que mas de medio millon de servidores estaban expuestos,el team de OBSD saco LibreSSL consideraron roto por diseño OpenSSL, como dijo la hacker de Qubes “es Mas facil atacar que defender”, algo asi como hay 200 palabras para decir de diferentes formas estupido y unas 10 para decir sabio, esa es la proporcion Imagina unos 500 mil servidores usando OpenSSL y apenas 2 desarrolladores dandole soporte xD venia un desarrolador y decia OpenSSL es seguro vino otro y otro y otro asi sucesivamente incluyo a OBSD.

      La seguridad no es un fin sino un proceso y siempre se parte de abajo hacia arriba como un edificio, si las bases estan malas como Xorg, OpenSSL,Systemd todo lo demas cae como plomo aunq pongas 500 parches.

      1. carlosky77 says:

        No discuto sobre la seguridad en OpenBSD pues esa es su filosofía. El problema es como fiarse de un programador siendo que éste es contratado por el FBI (y sin saberlo los del proyecto) para dejar backdoor en el código. Linux fue seguro pero cuando salió la versión 3, Linus se preocupó de agregar funcionalidades y compatibilidad con los últimos drivers que de la seguridad. Y ahí se todo a la mier… En lo personal me gustaría tener a openbsd como sistema operativo principal pero lamentablemente su sistema de instalación es engorroso y además siempre quedo en algo cojo (no reconoce tarjeta de sonido o red wifi, por ejemplo).

  3. Klondike says:

    Excepto que la propia web indica que Phil no tiene nada que ver con ella…

    “Dirty COW is a community-maintained project for the bug otherwise known as CVE-2016-5195. It is not associated with the Linux Foundation, nor with the original discoverer of this vulnerability.”

    1. tannhausser says:

      Vaya! me había saltado la letra pequeña.

      Gracias por la corrección, ya modifiqué el último parrafo.

  4. cesar says:

    y la solucion aparte de desinstalar linux?
    osea que no se va a reparar ese bug?

    1. tannhausser says:

      Lo de desinstalar Linux lo dicen en modo irónico (supongo).

      En la mayoría de distribuciones se resuelve con una simple actualización del kernel.

      Pero incluso si eso no fuera posible, con el sistema de inicio systemd también se podría mitigar el asunto:

      https://www.linux.com/news/mitigating-dirtyc0w-systemd

  5. abelrl says:

    Y, si al ejecutar “uname -a” me devuelve que tengo un “Linux 3.13.0-24-generic”, que debería hacer?
    Soy un usuario bastante inexperto, muchas gracias.

    1. tannhausser says:

      Esa versión me suena a Ubuntu 14.04 LTS o alguna de sus derivadas (tipo Linux Mint).

      Creo que en 3.13.0-100.147 se resuelve esa incidencia. Si por lo que sea tu distro no actualiza el kernel, quizás deberías elegir otra o actualizar a la siguiente versión del sistema.

      En el caso de que usaras Mint –no soy adivino y algo de información siempre ayuda en estos casos– dispone de un gestor de kernels en las preferencias del programas.

      Un saludo!

  6. José GDF says:

    Hola, Tannhausser:

    Uso Mint 18 Cinnamon, y “uname -a” me dice que tengo la versión del kernel 4.4.0-21-generic. ¿Debería preocuparme? En caso afirmativo, ¿qué puedo hacer?

    He estado mirando la lista de kernels disponibles en Synaptic y no parece que haya ninguna disponible de las que dices que son seguras.

    1. tannhausser says:

      Yo me preocuparía si en los próximos días no llega una actualización.

      Quizás un:

      sudo apt-get update && sudo apt-get dist-upgrade

      te ponga en la versión correcta. Pero también es posible que te rompa el sistema.

      La última vez que probé Linux Mint tenía un gestor de actualizaciones que permitía establecer el grado de las mismas (desde “estar a la última” a “no tocar casi nada”).

      Yo probaría con eso, a ver si modificando los valores te actualiza el kernel.

      También puedes pasarte por los foros de Linux Mint, a ver si más gente está en tu caso.

      Un saludo!

  7. anjira95 says:

    Espero que los talibanes de GNU/Linux que son muchos, no se les olvide que todos los sistemas son vulnerables, porque esta noticia ya tiene su tiempo, y no dicen pio. Supongo padecen algún tipo de amnesia (temporal o bloqueo de evento traumático). 🙂
    Saludos.

Deja un comentario