Translated message

A translation of this page exists in English.

Kernel Local Privilege Escalation "Dirty COW" - CVE-2016-5195

Public Date: October 19, 2016, 12:00 am
Updated -
Resolved Status
Important Impact

Red Hat Product Security ha tenido conocimiento de una vulnerabilidad en el kernel de Linux, a la cual se le ha asignado el CVE-2016-5195. Este problema se hizo público el día 19 de octubre de 2016 y ha sido evaluado como Importante. Este problema se conoce en los medios como "Dirty COW".

### Información de fondo

Se detectó una condición de concurrencia en la forma como el subsistema de memoria del kernel de Linux manejaba el corte de la Copia al escribir (COW) del mapeo de memoria privada de solo lectura. Un usuario local sin privilegios podría aprovechar esta falla para obtener acceso de escritura de los mapeos de memoria que suelen ser de solo lectura y así aumentar sus privilegios en el sistema.

Esto puede ser aprovechado de forma abusiva por un atacante para modificar los archivos Setuid y elevar privilegios. La explotación de esta vulnerabilidad mediante esta técnica ha sido utilizada. Este error afecta a la mayor parte de distribuciones de Linux.

Red Hat Product Security ha evaluado esta actualización como de impacto de seguridad Importante.

Productos impactados

Se han afectado las siguientes versiones de Red Hat Product:

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise MRG 2
  • Red Hat Openshift Online v2
  • Red Hat Virtualization (RHEV-H/RHV-H)

Descripción del ataque e impacto

Este fallo le permite a un atacante con una cuenta del sistema local, modificar los binarios en disco, eludiendo los mecanismos de permisos estándares que evitarían la modificación. Esto se lleva a cabo al ejecutar la llamada del sistema madvise(MADV_DONTNEED), mientras se tiene en memoria la página del mmapped ejecutable.

Diagnostique su vulnerabilidad

Determine si su sistema es vulnerable

Acción

Se recomienda a todos los clientes de Red Hat que ejecuten las versiones afectadas del kernel, actualicen el kernel tan pronto como estén disponibles los parches. A continuación encontrará la información sobre los paquetes impactados, al igual que la mitigación recomendada. Se requiere reiniciar el sistema para que la actualización del kernel pueda llevarse a cabo.

Actualizaciones por productos afectados

Un kpatch para los clientes que ejecuten Red Hat Enterprise Linux 7.2 o superior, está disponible. Por favor abra un caso de soporte para obtener acceso al kpatch.

Más información sobre lo que un kpatch significa : ¿Tiene soporte el parche de kernel en vivo (kpatch) en RHEL 7 ?


Producto Paquete Recomendación/Actualización
Red Hat Enterprise Linux 7 kernel RHSA-2016:2098
Red Hat Enterprise Linux 7 kernel-rt RHSA-2016:2110
Red Hat Enterprise Linux 7.1 Extended Update Support* kernel RHSA-2016:2118
Red Hat Enterprise Linux 6 kernel RHSA-2016:2105
Red Hat Enterprise Linux 6.7 Extended Update Support* kernel RHSA-2016:2106
Red Hat Enterprise Linux 6.6 Extended Update Support* kernel RHSA-2016:2128
Red Hat Enterprise Linux 6.5 Advanced Update Support** kernel RHSA-2016:2120
Red Hat Enterprise Linux 6.4 Advanced Update Support** kernel RHSA-2016:2133
Red Hat Enterprise Linux 6.2 Advanced Update Support** kernel RHSA-2016:2132
Red Hat Enterprise Linux 5 kernel RHSA-2016:2124
Red Hat Enterprise Linux 5.9 Long Life kernel RHSA-2016:2126
Red Hat Enterprise Linux 5.6 Long Life kernel RHSA-2016:2127
RHEL Atomic Host kernel pendiente
Red Hat Enterprise MRG 2 kernel-rt RHSA-2016:2107
Red Hat Virtualization (RHEV-H/RHV-H) kernel pendiente

*Se requiere una suscripción activa de EUS para poder acceder a este parche.

Por favor contacte al Equipo de ventas de Red Hat o al representante de ventas específico para obtener más información, si su cuenta no tiene una suscripción activa de EUS.

¿Qué es una suscripción Red Hat Enterprise Linux Extended Update Support?

*Se requiere una suscripción activa de AUS para poder acceder a este parche en RHEL 6.X AUS.

Mitigación

CÓMO CONSTRUIR Y UTILIZAR LA SOLUCIÓN SYSTEMTAP

La contramedida systemtap implica la creación de un módulo de kernel (como un controlador) mediante un script systemtap que intercepta la llamada del sistema vulnerable. Se utiliza como una solución stopgap hasta que el kernel corregido sea iniciado en la máquina afectada. Esta solución no requiere un reinicio y se aplica a RHEL 5 6 y 7.

No es posible hacer un módulo que aplique a todos los kernel. Ni siquiera para una familia (e.g., Todos los RHEL5, 6 o 7). Cada versión de kernel requiere un archivo .ko generado para dicho kernel (uname -r).

REQUERIMIENTOS

Para construir el módulo systemtap, se requieren los siguientes paquetes:

  • systemtap-client
  • systemtap-devel
  • gcc (and dependencies)
  • kernel-devel-`uname -r`
  • kernel-debuginfo-`uname -r`
  • kernel-debuginfo-common-`uname -r`

ADVERTENCIA: Los paquetes 'kernel' requieren la misma versión que ejecuta el kernel. Al descargar la versión más reciente impedirá el funcionaminto de systemtap. Por favor descargue la versión exacta en ejecución.

DÓNDE OBTENER LA INFORMACIÓN DE DEPURACIÓN

Por favor consulte la base de conocimientos (KB) https://access.redhat.com/solutions/9907

CÓMO CONSTRUIR EL MÓDULO

1. Después de instalar los paquetes, cree el archivo denominado dirtycow.stp con este contenido:

probe kernel.function("mem_write").call ? {
        $count = 0
}

probe syscall.ptrace {  // includes compat ptrace as well
        $request = 0xfff
}

probe begin {
        printk(0, "CVE-2016-5195 mitigation loaded")
}


probe end {
        printk(0, "CVE-2016-5195 mitigation unloaded")
}
										

2. Guarde el archivo. Compílelo mediante este comando:

# stap -g -p 4 -m dirtycow_`uname -r|tr -cd [:digit:]` dirtycow.stp
dirtycow_26183985.ko
											

En el ejemplo anterior, el archivo .ko tiene un número que identifica su versión de kernel. En ese caso. es 2.6.18-398.el5. Este módulo puede utilizarse en otros sistemas con la versión de kernel exacta, sin tener que instalar debugs/debuginfos/systemtap. Solo copie el archivo al servidor con el mismo kernel y prosiga al siguiente paso.

3. Para cargar el módulo, ejecute el comando insmod <.ko file>. Por ejemplo:

# insmod dirtycow_26183985.ko
												

4. Verifique si está cargado:

# lsmod| grep dirty
dirtycow_26183985   101688  0
													

5. Para descargar el módulo, use el comando rmmod o reinicie el sistema.

IMPORTANTE

  • El módulo no sobrevive el arranque: no es vuelto a cargar tras de un arranque del sistema.
  • Después del reinicio, el módulo debe volverse a cargar de forma manual.
  • Si se ha actualizado o cambiado el kernel, este módulo debe cargarse en el nuevo kernel.
  • Si arrancó en un kernel diferente sin la corrección, se deberá cargar un nuevo módulo compatible.
  • Un kernel corregido no necesita la carga del módulo.

Por favor consulte el error 1384344 para los pasos detallados de mitigación.

Comments