
Exploit de prueba de concepto para CVE-2020-27949, que demuestra lectura/escritura arbitraria de memoria en procesos de macOS mediante el ioctl fasttrap de DTrace sin permisos elevados.
El dispositivo /dev/fasttrap para crear nodos de trampa en procesos de espacio de usuario para los proveedores pid y objc tiene los permisos 666. En contraste con /dev/dtrace, que también es 666, fasttrap carece de una verificación de permisos. Esto permite que cualquier proceso emita un ioctl FASTTRAPIOC_MAKEPROBE o FASTTRAPIOC_GETINSTR.
Un atacante puede crear sondas en cualquier otro proceso para cualquier ubicación de memoria usando FASTTRAPIOC_MAKEPROBE. Al activar estas sondas, los valores en la ubicación de memoria especificada se reemplazan con una instrucción de trampa (0xCC en x86) y el valor original se coloca en una memoria sombra. Recuperar el valor original es posible con el ioctl FASTTRAPIOC_GETINSTR. Esto permite al atacante leer memoria arbitraria de otro proceso colocando múltiples trampas.
Esta vulnerabilidad está registrada como CVE-2020-27949, corregida en macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave .
0xCC en x86) en cualquier ubicación de memoria de otros procesos ejecutados bajo DTrace sin permisos elevados. Incluso es posible escribir memoria en procesos que se ejecutan como root. Como parte de otras instrucciones o direcciones de salto, el flujo de control de la víctima puede alterarse, permitiendo la escalada de privilegios.Como usuario, espero que habilitar DTrace solo permita a procesos con permisos de root rastrear, instrumentar o modificar otros procesos. DTrace es una herramienta valiosa para tareas administrativas que ofrece herramientas como dtruss, iotop, etc.
Nuestra víctima (target) es un ejecutable que se ejecuta como root. El atacante (memaccess) es un ejecutable que se ejecuta con permisos de usuario normales. El script de rastreo libc_monitor.d registra el número de llamadas a funciones en el objeto compartido libsystem_c.dylib (este es solo un ejemplo sencillo de un script administrativo que el propietario de una máquina podría ejecutar).
libc_monitor.d).FASTTRAPIOC_GETINSTR para leer los valores de memoria de las sondas creadas.El paso 4 reemplaza memoria en el proceso de la víctima con el valor de la instrucción de trampa. Dependiendo de la aplicación, un atacante puede usar esto para escribir un valor previamente conocido en una ubicación de memoria crítica. Por ejemplo, el atacante podría controlar la semilla de un RNG o reemplazar claves criptográficas en un proceso.
Nota: El atacante nunca requiere permisos elevados o de root.
Nota 2: No se requieren scripts de DTrace propios. Por ejemplo, dapptrace también usa el proveedor pid para rastrear cualquier función.
Implementar verificaciones de privilegios en /dev/fasttrap como en /dev/dtrace o eliminar el permiso de escritura para todos.
Nota: No comprobamos la corrección publicada.
target y sigue las instrucciones en pantalla