Se ha revelado una técnica para explotar una vulnerabilidad en el subsistema tty del kernel de Linux

Investigadores del equipo de Google Project Zero publicaron un método para explotar una vulnerabilidad (CVE-2020-29661) en la implementación del controlador ioctl TIOCSPGRP del subsistema tty del kernel de Linux, y también examinaron en detalle los mecanismos de protección que podrían bloquear dicha vulnerabilidad. vulnerabilidades.

El error que causaba el problema se solucionó en el kernel de Linux el 3 de diciembre del año pasado. El problema aparece en los núcleos hasta la versión 5.9.13, pero la mayoría de las distribuciones solucionaron el problema en las actualizaciones del paquete del núcleo propuestas el año pasado (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Una vulnerabilidad similar (CVE-2020-29660) se encontró simultáneamente en la implementación de la llamada ioctl TIOCGSID, pero también se solucionó en todas partes.

El problema es causado por un error de bloqueo que provoca una condición de carrera en el código drivers/tty/tty_jobctrl.c, que podría usarse para crear condiciones de acceso a la memoria de uso después de liberar explotadas desde el espacio del usuario a través de ioct llamando a TIOCSPGRP. Se ha demostrado un exploit funcional para la escalada de privilegios en Debian 10 con kernel 4.19.0-13-amd64.

Al mismo tiempo, en el artículo publicado, el énfasis no está tanto en la técnica para crear un exploit funcional, sino en las herramientas que existen en el núcleo para proteger contra tales vulnerabilidades. La conclusión no es alentadora, los métodos como la segmentación de la memoria en el montón y el control del acceso a la memoria después de que se libera no se utilizan en la práctica, ya que conducen a una disminución del rendimiento y la protección basada en CFI (Control Flow Integrity), bloqueando exploits. en las últimas etapas del ataque, necesita mejorar.

Al considerar lo que podría marcar la diferencia a largo plazo, el uso de analizadores estáticos avanzados o el uso de lenguajes seguros para la memoria como Rust y dialectos C con anotaciones ricas (como Checked C) en la fase de construcción de verificadores de estado se destacan cerraduras, objetos y punteros. Entre los métodos de protección también se mencionan la activación del modo panic_on_oops, la transferencia de las estructuras del kernel al modo de solo lectura y la restricción de acceso a las llamadas al sistema mediante mecanismos como seccomp.

Fuente: opennet.ru

Añadir un comentario