Global Preloader
Vulnerabilidad
(01/Dec/2017) Corrección incompleta de vulnerabilidad Dirty COW

Corrección incompleta de vulnerabilidad Dirty COW

La vulnerabilidad "Dirty COW" (CVE-2016-5195) descubierta el año pasado en Linux fue parcheada de manera incompleta, indicaron los investigadores de Bindecy.

Se descubrió que la vulnerabilidad era causada por una condición de carrera en la forma en que el subsistema de memoria del kernel de Linux maneja la rotura de copy-on-write (COW) de las asignaciones de memoria de solo lectura privada. Descubierto por Phil Oester, el error podría permitir a un atacante local sin privilegios escalar sus privilegios en un sistema específico.

También se descubrió que la vulnerabilidad afectaba a Android, e incluso podía escapar de los contenedores. Poco después de que Google publicara un parche para la vulnerabilidad, sin embargo, se idearon nuevos ataques que explotan Dirty COW en Android.

A pesar de que Dirty COW fue una de las vulnerabilidades más publicitadas y de mayor marca, con todas las versiones de Linux afectadas de la última década, incluido Android, siendo vulnerable, el parche lanzado despertó muy poco interés, dice Bindecy. Debido a eso, ha pasado más de un año desde que se lanzó el parche, y nadie notó que estaba incompleto.

La vulnerabilidad original impactó en la función get_user_pages, que se usa para obtener las páginas físicas detrás de las direcciones virtuales en los procesos de los usuarios. Básicamente, el error permitiría escribir en la versión privilegiada de solo lectura de una página.

El problema, dicen los investigadores de seguridad, es que el parche "asume que la copia privilegiada de solo lectura de una página nunca tendrá un PTE apuntando con el 'bit sucio'".

Según los investigadores, el problema es que, cuando se trata de un gran PMD, "una página puede marcarse como sucia sin pasar por un ciclo COW, usando la función touch_pmd". Cada vez que get_user_pages intenta obtener una página enorme, una llamada a la función en la página marca los resultados como sucio sin pasar por un ciclo COW. Por lo tanto, la lógica de can_follow_write_pmd se rompe, dicen los investigadores.

"En este punto, explotar el error es sencillo: podemos usar un patrón similar de la raza original Dirty COW. Esta vez, después de deshacernos de la versión copiada de la página, tenemos que criticar la página original dos veces, primero para que aparezca, y luego para activar el bit sucio", señala Bindecy.

"Este error demuestra la importancia de la auditoría de parches en el ciclo de vida de desarrollo de seguridad. Como muestran el caso Dirty COW y otros casos anteriores, incluso las vulnerabilidades publicitadas pueden tener parches incompletos. La situación no está reservada solo para el software de código cerrado; el software de código abierto puede sufrir lo mismo", concluyeron los investigadores.