¿Qué es Stack Clash y qué puedo hacer al respecto?

27

He oído hablar de una nueva vulnerabilidad llamada Stack Clash que aparentemente afecta a múltiples sistemas similares a Unix (no solo Linux, sino también los BSD, Solaris).

  • ¿Qué es? ¿Cómo se produjo un error del sistema operativo múltiple?
  • ¿Cómo protejo mis sistemas?
muru
fuente

Respuestas:

29

Stack Clash es un exploit basado en una técnica bastante antigua. La memoria utilizada por un proceso se divide en dos regiones: la pila y el montón . En general, se imagina que la pila crece hacia abajo y el montón como hacia arriba. ¿Qué sucede cuando uno crece lo suficiente como para chocar con el otro? En general, ¿qué sucede cuando la pila crece lo suficiente como para invadir espacios de memoria no relacionados? La vulnerabilidad original tiene 12 años, y los desarrolladores del kernel de Linux la arreglaron temporalmente usando una página de protección . Sin embargo, los investigadores de Qualys han logrado explotar esto a pesar de la página de guardia.

Ars Technica informa :

Las vulnerabilidades de Stack Clash han ido adquiriendo una conciencia generalizada, primero en 2005 con los hallazgos del investigador de seguridad Gaël Delalleau y cinco años después con el lanzamiento de una vulnerabilidad de Linux por el investigador Rafal Wojtczuk. Los desarrolladores de Linux introdujeron una protección que estaba destinada a evitar choques de pila, pero la investigación de hoy demuestra que es relativamente fácil para los atacantes eludir esa medida.

El ataque primario de prueba de concepto desarrollado por Qualys explota una vulnerabilidad indexada como CVE-2017-1000364. Los investigadores de Qualys también desarrollaron ataques que utilizan Stack Clash para explotar vulnerabilidades separadas, incluidas CVE-2017-1000365 y CVE-2017-1000367. Por ejemplo, cuando se combina con CVE-2017-1000367, una falla recientemente corregida en Sudo también descubierta por Qualys, los usuarios locales pueden explotar Sudo para obtener privilegios completos de raíz en una gama mucho más amplia de sistemas operativos. Qualys hasta ahora no ha podido hacer que los exploits ejecuten código de forma remota. La única aplicación remota que investigaron fue el servidor de correo Exim, que casualmente resultó ser inexplorable. Qualys dijo que no puede descartar la posibilidad de que existan tales exploits de ejecución remota de código. Qualys dijo que lanzará las hazañas de prueba de concepto en una fecha posterior,

[...] Hay mucha más información disponible en este detallado aviso técnico de Qualys y este análisis técnico de grsecurity .

Citando el artículo de LWN sobre la solución original de 2010:

Debido a que Linux no separa las páginas de pila de proceso y de montón, es posible sobrepasar una página de pila en una página de montón adyacente. Eso significa que una pila suficientemente profunda (de una llamada recursiva, por ejemplo) podría terminar usando memoria en el montón. Un programa que puede escribir en esa página de almacenamiento dinámico (por ejemplo, un cliente X) podría manipular la dirección de retorno de una de las llamadas para saltar al lugar de su elección. Eso significa que el cliente puede hacer que el servidor ejecute el código de su elección (ejecución de código arbitrario) que puede aprovecharse para obtener privilegios de root.

La descripción anterior se aplica a varios núcleos similares a Unix.

Si bien Ars Technica nota una solución temporal mencionada en el informe de Qualys ("establezca el valor  RLIMIT STACK y RLIMIT_AS  de  usuarios locales  y  servicios remotos  en un valor bajo"), debe tenerse en cuenta que esto no necesariamente protege contra esta vulnerabilidad . La única salida segura actualmente es actualizar. Según el análisis de seguridad:

Debe quedar claro que los intentos solo del núcleo para resolver este problema siempre serán incompletos, ya que el problema real radica en la falta de sondeo de la pila. Dado que la solución real alternativa depende de la reconstrucción de todo el territorio de usuarios, esta es probablemente la única solución factible en el futuro previsible.

Lo mejor que podemos hacer ahora es actualizar el kernel a una versión parcheada.

El exploit de 2010 usó el servidor X, este usó sudo, el siguiente podría ser cualquiera de una multitud de programas de usuarios que, en algún momento, se ejecutan con privilegios elevados.

Qualys aún no ha publicado ningún código de prueba de concepto para exploits (planean hacerlo en una fecha posterior).


Hay varios avisos de seguridad de Ubuntu asociados con CVE-2017-1000364:

También tenga en cuenta que el rastreador CVE enumera varias combinaciones de versión / kernel como correcciones pendientes.

En general, la solución más simple es actualizar sus sistemas al último paquete de kernel lo antes posible.

Las versiones de kernel relevantes de los USN (descartadas usando for i in {24..35}; curl -s https://www.ubuntu.com/usn/usn-33$i-1/ | pup 'dl:nth-last-of-type(1)'):

Ubuntu 17.04:
linux-image-4.10.0-24-lowlatency 4.10.0-24.28
linux-image-generic-lpae 4.10.0.24.26
linux-image-generic 4.10.0.24.26
linux-image-4.10.0-24-generic-lpae 4.10.0-24.28
linux-image-4.10.0-24-generic 4.10.0-24.28
linux-image-lowlatency 4.10.0.24.26
Ubuntu 17.04:
linux-image-4.10.0-1008-raspi2 4.10.0-1008.11
linux-image-raspi2 4.10.0.1008.10
Ubuntu 16.10:
linux-image-powerpc-smp 4.8.0.56.69
linux-image-powerpc-e500mc 4.8.0.56.69
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61
linux-image-4.8.0-56-lowlatency 4.8.0-56.61
linux-image-generic 4.8.0.56.69
linux-image-4.8.0-56-generic 4.8.0-56.61
linux-image-powerpc64-emb 4.8.0.56.69
linux-image-virtual 4.8.0.56.69
linux-image-powerpc64-smp 4.8.0.56.69
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61
linux-image-generic-lpae 4.8.0.56.69
linux-image-lowlatency 4.8.0.56.69
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61
Ubuntu 16.10:
linux-image-4.8.0-1040-raspi2 4.8.0-1040.44
linux-image-raspi2 4.8.0.1040.44
Ubuntu 16.04 LTS:
linux-image-powerpc64-smp-lts-utopic 4.4.0.81.87
linux-image-generic-lts- wily 4.4.0.81.87
linux-image-generic-lts-utopic 4.4.0.81.87
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104
linux-image-powerpc64-emb-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc 4.4.0.81.87
linux-image-generic-lpae-lts-xenial 4.4.0.81.87
linux-image-generic-lpae-lts-utopic 4.4.0.81.87
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104
linux-image-powerpc-e500mc-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104
linux-image-generic-lpae-lts- wily 4.4.0.81.87
linux-image-virtual-lts-vivid 4.4.0.81.87
linux-image-virtual-lts-utopic 4.4.0.81.87
linux-image-virtual 4.4.0.81.87
linux-image-powerpc64-emb-lts- wily 4.4.0.81.87
linux-image-lowlatency-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-vivid 4.4.0.81.87
linux-image-powerpc64-emb 4.4.0.81.87
linux-image-powerpc-smp-lts-xenial 4.4.0.81.87
linux-image-4.4.0-81-generic 4.4.0-81.104
linux-image-powerpc64-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency-lts- wily 4.4.0.81.87
linux-image-4.4.0-81-lowlatency 4.4.0-81.104
linux-image-generic 4.4.0.81.87
linux-image-lowlatency-lts-xenial 4.4.0.81.87
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.87
linux-image-powerpc64-emb-lts-utopic 4.4.0.81.87
linux-image-generic-lts-xenial 4.4.0.81.87
linux-image-generic-lts-vivid 4.4.0.81.87
linux-image-powerpc-e500mc-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104
linux-image-generic-lpae-lts-vivid 4.4.0.81.87
linux-image-generic-lpae 4.4.0.81.87
linux-image-powerpc64-smp-lts- wily 4.4.0.81.87
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.87
linux-image-powerpc-smp-lts- wily 4.4.0.81.87
linux-image-virtual-lts- wily 4.4.0.81.87
linux-image-powerpc64-smp 4.4.0.81.87
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104
linux-image-powerpc-smp-lts-utopic 4.4.0.81.87
linux-image-powerpc-smp-lts-vivid 4.4.0.81.87
linux-image-lowlatency 4.4.0.81.87
linux-image-virtual-lts-xenial 4.4.0.81.87
linux-image-lowlatency-lts-utopic 4.4.0.81.87
Ubuntu 16.04 LTS:
linux-image-4.4.0-1016-gke 4.4.0-1016.16
Ubuntu 16.04 LTS:
linux-image-snapdragon 4.4.0.1061.54
linux-image-4.4.0-1061-snapdragon 4.4.0-1061.66
Ubuntu 16.04 LTS:
linux-image-4.4.0-1020-aws 4.4.0-1020.29
Ubuntu 16.04 LTS:
linux-image-raspi2 4.4.0.1059.60
linux-image-4.4.0-1059-raspi2 4.4.0-1059.67
Ubuntu 16.04 LTS:
linux-image-4.8.0-56-powerpc-smp 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-powerpc-e500mc 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-lowlatency 4.8.0-56.61 ~ 16.04.1
linux-image-4.8.0-56-generic 4.8.0-56.61 ~ 16.04.1
linux-image-generic-hwe-16.04 4.8.0.56.27
linux-image-lowlatency-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-generic-lpae 4.8.0-56.61 ~ 16.04.1
linux-image-virtual-hwe-16.04 4.8.0.56.27
linux-image-generic-lpae-hwe-16.04 4.8.0.56.27
linux-image-4.8.0-56-powerpc64-emb 4.8.0-56.61 ~ 16.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-smp-lts-xenial 4.4.0.81.66
linux-image-lowlatency-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc-smp 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc-e500mc 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-lowlatency 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-generic-lpae 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lpae-lts-xenial 4.4.0.81.66
linux-image-powerpc64-smp-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-generic 4.4.0-81.104 ~ 14.04.1
linux-image-4.4.0-81-powerpc64-smp 4.4.0-81.104 ~ 14.04.1
linux-image-generic-lts-xenial 4.4.0.81.66
linux-image-powerpc64-emb-lts-xenial 4.4.0.81.66
linux-image-powerpc-e500mc-lts-xenial 4.4.0.81.66
linux-image-virtual-lts-xenial 4.4.0.81.66
linux-image-4.4.0-81-powerpc64-emb 4.4.0-81.104 ~ 14.04.1
Ubuntu 14.04 LTS:
linux-image-powerpc-e500mc 3.13.0.121.131
linux-image-lowlatency-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-emb 3.13.0-121.170
linux-image-generic-pae 3.13.0.121.131
linux-image-3.13.0-121-powerpc-smp 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500mc 3.13.0-121.170
linux-image-3.13.0-121-powerpc-e500 3.13.0-121.170
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170
linux-image-generic-lts-quantal 3.13.0.121.131
linux-image-virtual 3.13.0.121.131
linux-image-powerpc-e500 3.13.0.121.131
linux-image-generic-lts-trusty 3.13.0.121.131
linux-image-3.13.0-121-generic 3.13.0-121.170
linux-image-omap 3.13.0.121.131
linux-image-powerpc64-emb 3.13.0.121.131
linux-image-3.13.0-121-powerpc64-smp 3.13.0-121.170
linux-image-generic 3.13.0.121.131
linux-image-highbank 3.13.0.121.131
linux-image-generic-lts-saucy 3.13.0.121.131
linux-image-powerpc-smp 3.13.0.121.131
linux-image-3.13.0-121-lowlatency 3.13.0-121.170
linux-image-generic-lpae-lts-saucy 3.13.0.121.131
linux-image-generic-lts- raring 3.13.0.121.131
linux-image-powerpc64-smp 3.13.0.121.131
linux-image-generic-lpae-lts-trusty 3.13.0.121.131
linux-image-generic-lpae 3.13.0.121.131
linux-image-lowlatency 3.13.0.121.131
Ubuntu 12.04 ESM:
linux-image-powerpc-smp 3.2.0.128.142
linux-image-3.2.0-128-virtual 3.2.0-128.173
linux-image-3.2.0-128-generic-pae 3.2.0-128.173
linux-image-generic 3.2.0.128.142
linux-image-generic-pae 3.2.0.128.142
linux-image-highbank 3.2.0.128.142
linux-image-3.2.0-128-highbank 3.2.0-128.173
linux-image-3.2.0-128-powerpc-smp 3.2.0-128.173
linux-image-virtual 3.2.0.128.142
linux-image-powerpc64-smp 3.2.0.128.142
linux-image-3.2.0-128-omap 3.2.0-128.173
linux-image-3.2.0-128-powerpc64-smp 3.2.0-128.173
linux-image-omap 3.2.0.128.142
linux-image-3.2.0-128-generic 3.2.0-128.173
Ubuntu 12.04 LTS:
linux-image-3.13.0-121-generic 3.13.0-121.170 ~ precisa1
linux-image-generic-lpae-lts-trusty 3.13.0.121.112
linux-image-generic-lts-trusty 3.13.0.121.112
linux-image-3.13.0-121-generic-lpae 3.13.0-121.170 ~ precisa1

Sudo

El mencionado error de sudo está cubierto por USN-3304-1 , del 30 de mayo de 2017:

Ubuntu 17.04:
sudo-ldap 1.8.19p1-1ubuntu1.1
sudo 1.8.19p1-1ubuntu1.1
Ubuntu 16.10:
sudo-ldap 1.8.16-0ubuntu3.2
sudo 1.8.16-0ubuntu3.2
Ubuntu 16.04 LTS:
sudo-ldap 1.8.16-0ubuntu1.4
sudo 1.8.16-0ubuntu1.4
Ubuntu 14.04 LTS:
sudo-ldap 1.8.9p5-1ubuntu1.4
sudo 1.8.9p5-1ubuntu1.4
muru
fuente
Entonces, en resumen, ya debería estar reparado en la mayoría de las versiones de Ubuntu que aún son compatibles, ¿solo hay que actualizar?
CJCombrink
@TheBadger no, como señaló el rastreador de CVE, algunas combinaciones todavía se enumeran como lanzamiento pendiente. Supongo que se publicarán más USN a medida que se publiquen las correcciones.
muru
44
Pero sí, la actualización debería ser suficiente, no se necesita configuración adicional.
muru
Si está afectando, ¿cómo verificar?
margarita
1
@immibis según el siguiente artículo, pero la implementación existente no funciona correctamente: explicación de errores de Stackguard por Qualys Research Labs
Igor B
1

¿Cómo se produjo un error del sistema operativo múltiple?

Para abordar esta parte de su pregunta específicamente:

Este problema surge debido al uso de un espacio de direcciones compartido para el montón (que crece hacia arriba) y la pila (que crece hacia abajo).

Este diseño es común en muchos sistemas, de ahí que muchos sistemas sean vulnerables a la misma clase de vulnerabilidad.

usuario7761803
fuente