El lunes, un investigador de ciberseguridad publicó los detalles de una vulnerabilidad de Linux que permite a un atacante sobrescribir datos en archivos arbitrarios de solo lectura.
La vulnerabilidad, CVE-2022-0847, fue descubierta por Max Kellermann en abril de 2021, pero le tomó algunos meses descubrir qué estaba sucediendo realmente.
Kellermann explicó que la vulnerabilidad afecta a Linux Kernel 5.8 y versiones posteriores, pero se solucionó en Linux 5.16.11, 5.15.25 y 5.10.102.
«Todo comenzó hace un año con un ticket de soporte sobre archivos corruptos. Un cliente se quejó de que los registros de acceso que descargaban no podían descomprimirse. Y, de hecho, había un archivo de registro corrupto en uno de los servidores de registro; podía descomprimirse, pero gzip informó un error de CRC. No pude explicar por qué estaba corrupto, pero asumí que el proceso de división nocturna se había bloqueado y dejado un archivo corrupto. Arreglé el CRC del archivo manualmente, cerré el ticket y pronto me olvidé del problema. dijo Kellerman.
«Meses después, esto sucedió una y otra vez. Cada vez que el contenido del archivo parecía correcto, solo el CRC al final del archivo era incorrecto. Ahora, con varios archivos corruptos, pude profundizar y encontré un tipo sorprendente de corrupción. Surgió un patrón».
Kellermann continuó mostrando cómo descubrió el problema y cómo alguien podría explotarlo. Inicialmente asumió que el error solo era explotable mientras un proceso privilegiado escribe el archivo y que dependía del tiempo.
Pero luego descubrió que es posible sobrescribir el caché de la página incluso en ausencia de escritores, sin restricciones de tiempo, «en (casi) posiciones arbitrarias con datos arbitrarios».
Para aprovechar la vulnerabilidad, el atacante debe tener permisos de lectura, el desplazamiento no debe estar en un límite de página, la escritura no puede cruzar un límite de página y el archivo no se puede cambiar de tamaño.
«Para explotar esta vulnerabilidad, debe: Crear una canalización, llenar la canalización con datos arbitrarios (para establecer el indicador PIPE_BUF_FLAG_CAN_MERGE en todas las entradas del anillo), drenar la canalización (dejando la marca configurada en todas las instancias de struct pipe_buffer en el anillo struct pipe_inode_info ), empalme los datos del archivo de destino (abierto con O_RDONLY) en la tubería justo antes del desplazamiento de destino [and] escribir datos arbitrarios en la tubería», explicó.
«Estos datos sobrescribirán la página del archivo en caché en lugar de crear una nueva estructura anónima pipe_buffer porque PIPE_BUF_FLAG_CAN_MERGE está configurado. Para hacer que esta vulnerabilidad sea más interesante, no solo funciona sin permisos de escritura, también funciona con archivos inmutables, en instantáneas btrfs de solo lectura y en montajes de solo lectura (incluidos los montajes de CD-ROM). Esto se debe a que la memoria caché de la página siempre se puede escribir (por el núcleo), y escribir en una canalización nunca comprueba ningún permiso».
También compartió su propio exploit de prueba de concepto.
El informe de error, el exploit y el parche fueron enviados al equipo de seguridad del kernel de Linux por Kellermann el 20 de febrero. El error se reprodujo en Google Pixel 6 y se envió un informe de error al equipo de seguridad de Android.
Linux lanzó correcciones (5.16.11, 5.15.25, 5.10.102) el 23 de febrero y Google fusionó la corrección de errores de Kellermann en el kernel de Android el 24 de febrero.
Kellermann y otros expertos comparado la vulnerabilidad a CVE-2016-5195 «Dirty Cow», pero dijo que es aún más fácil de explotar.
Mike Parkin, de Vulcan Cyber, dijo que cualquier exploit que proporcione acceso de nivel raíz a un sistema Linux es problemático.
«Un atacante que obtiene la raíz obtiene el control total sobre el sistema de destino y puede aprovechar ese control para llegar a otros sistemas. El factor atenuante de esta vulnerabilidad es que requiere acceso local, lo que reduce ligeramente el riesgo», dijo Parkin.
«Escalar los privilegios a root (familia POSIX) o Admin (Windows) es a menudo la primera prioridad de un atacante cuando obtiene acceso a un sistema, ya que les da control total del objetivo y puede ayudarlos a extender su punto de apoyo a otras víctimas. Eso no ha sido así. no ha cambiado durante mucho tiempo y es poco probable que cambie en el futuro previsible».
Shweta Khare, evangelista de seguridad cibernética en Delinea, señaló que varias vulnerabilidades de kernel de Windows, RCE del servidor DNS y Adobe de clasificación de alta gravedad ya han sido noticia este año porque permiten a los atacantes obtener privilegios de administración o del sistema local elevados.
Los errores del sistema operativo y las vulnerabilidades a nivel de aplicación como estas pueden permitir a los atacantes elevar los privilegios, moverse lateralmente dentro de la red, ejecutar código arbitrario y apoderarse por completo de los dispositivos, dijo Khare.