Es habitual localizar bugs en el kernel de Linux, agujeros que permanecen vigentes durante varios años sin que nadie haga nada para solucionarlos. Incluso en muchas ocasiones en las que se tiene conocimiento de su existencia. Es lo que ha ocurrido con el último caso sacado a la luz, que se conoce bajo el nombre Dirty Cow y cuyo nombre técnico es CVE-2016-5195. Este caso se ha publicado en Canonical, Red Hat y Debian. Un problema de seguridad muy importante que ha estado vigente durante 9 años.
¿En qué consiste la vulnerabilidad Dirty Cow?
La vulnerabilidad de la que hablamos en esta entrada fue descubierta por Phil Oester, un experto en seguridad y desarrollador de Linux. Este bug permite hacer una escalada de privilegios de forma remota o local. El problema en sí está localizado en el subsistema de memoria kernel y afecta al proceso de copia virtual de operaciones de escritura que hace el núcleo. En resumen, lo que permite esta vulnerabilidad es que un usuario normal, sin privilegios, pueda utilizarla para escribir y tener acceso a partes del sistema que pertenecen a otros usuarios, incluso el root. Es decir, archivos que únicamente son de lectura podrían ser modificados por usuarios que no son sus propietarios, con los problemas que esto podría acarrear.
Como no podía ser de otra forma, esta vulnerabilidad ya fue corregida por los responsables del kernel. Pero no todos los usuarios tendrán acceso a la actualización en la que se corrige este problema.
¿Cómo sé si mi equipo sufre la vulnerabilidad Dirty Cow?
Según se ha comprobado, la vulnerabilidad ha existido dentro del kernel del Linux desde su versión 2.6.22, liberada en 2007. Ya en su momento se tuvo conocimiento de ella y para mitigar sus efectos se lanzó un parche que no dio los resultados esperados, ya que era incompatible con otras funciones del kernel. Ahí se quedó la cosa hasta hace unos días, cuando volvió a salir a la luz.
Para saber si la versión que utilizamos en nuestro sistema es segura, tenemos que mirar la versión que utilizamos y asegurarnos de que está dentro del listado de versiones seguras. En este momento son Linux 4.8.3, 4.7.9 y 4.4.26 LTS. Dependiendo de la versión del sistema operativo que utilicemos, la forma de localizar el kernel que estamos utilizando puede variar.
Ubuntu / Debian
Para encontrar la versión, hay que ejecutar la siguiente instrucción desde la línea de comandos.
uname –rv
Por pantalla tiene que aparecer información parecida al siguiente ejemplo que os dejamos.
4.4.0-42-generic #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016
Si vuestra versión es anterior a estas que os dejamos, entonces la vulnerabilidad os afecta directamente.
- 8.0-26.28 para Ubuntu 16.10
- 4.0-45.66 para Ubuntu 16.04 LTS
- 13.0-100.147 para Ubuntu 14.04 LTS
- 2.0-113.155 para Ubuntu 12.04 LTS
- 16.36-1+deb8u2 para Debian 8
- 2.82-1 para Debian 7
- 7.8-1 para Debian unstable
CentOS
Algunas versiones de CentOS pueden utilizar este script proporcionado por Red Hat para comprobar la vulnerabilidad del sistema. Descárgalo para probarlo.
wget https://access.redhat.com/sites/default/files/rh-cve-2016-5195_1.sh
Una vez descargado, puedes ejectuarlo con el siguiente comando:
bash rh-cve-2016-5195_1.sh
Si el sistema es vulnerable, por pantalla aparecerá un mensaje parecido a esto:
“Your kernel is 3.10.0-327.36.1.el7.x86_64 which IS vulnerable.
Red Hat recommends that you update your kernel. Alternatively, you can apply partial
mitigation described at https://access.redhat.com/security/vulnerabilities/2706661 .”
Poner solución a la vulnerabilidad Dirty Cow
Por suerte, este problema tiene fácil solución. Lo único que debemos hacer es actualizar el sistema y reiniciar el servidor. En Ubuntu y Debian podemos actualizarlo utilizando «apt-get».
sudo apt-get update && sudo apt-get dist-upgrade
En el caso de CentOS 5, 6 y 7, podemos actualizar el sistema con «sudo yum update» o, si solo necesitamos solucionar este problema, ejecutar lo siguiente:
sudo yum update kernel
Tras la actualización, hay que reiniciar el sistema.
Android, uno de los más afectados
En el punto anterior hemos visto que poner solución a la vulnerabilidad Dirty Cow es fácil. Únicamente hay que actualizar la versión del kernel de nuestro sistema. El problema lo podemos encontrar en aquellos sistemas operativos que hacen uso del kernel de Linux pero cuya actualización no es tan rápida como debería.
El caso más claro lo tenemos con Android. En la mayoría de los casos, la actualización del sistema depende de los propios fabricantes y en muchos casos, no entra dentro de sus intereses. Esto hace que nos encontramos en una situación en la que la mayoría de usuarios con terminales Android serán susceptibles de que alguien pueda atacarles a través de esta vulnerabilidad. La solución en estos casos es esperar a que los fabricantes lancen actualizaciones o bien utilizar rooms de terceras empresas que solucionen este problema.