
Hackeando Windows a través de iTunes - Escalada de Privilegios Local 0-day
Este es un informe sobre CVE-2024–44193, un exploit de Escalada de Privilegios Local en iTunes versión 12.13.2.3.
Fue parcheado el 12 de septiembre de 2024 por Apple. Enlace al aviso de seguridad de Apple: Aviso de Seguridad de Apple
iTunes versión 12.13.2.3 instala el servicio Apple Device Discovery Service:
C:\Program Files\Common Files\Apple\Mobile Device Support\AppleMobileDeviceService.exe el cual es vulnerable a un exploit de Escalada de Privilegios Local.
En respeto y comprensión para aquellos que no les importa otro informe mal escrito y probablemente demasiado largo, aquí está la versión corta:
La vulnerabilidad es posible debido a una mala gestión de permisos de usuario en la ruta C:\ProgramData\Apple\*.
Esto permite que miembros del Grupo Local "Usuarios" escriban archivos arbitrarios dentro de esa ruta. Cuando el servicio AppleMobileDeviceService.exe se reinicia, lo cual puede ser provocado por un usuario sin privilegios, se puede armar una primitiva de eliminación de archivos/carpetas arbitraria para obtener ejecución de código arbitrario en el sistema con privilegios SYSTEM.
¡Advertencia! Explicaciones de herramientas mediocres próximamente.
Saltéate esta sección si ya estás familiarizado con las herramientas.
La herramienta Oplock es una herramienta para usar un "bloqueo oportunista" en Windows. La herramienta nos permite "detener" un proceso bloqueando un archivo hasta que se cumplan ciertos requisitos, sin embargo, también puede usarse para "detener" un proceso con fines maliciosos, como ganar suficiente tiempo para que se ejecute nuestro payload de exploit.
La herramienta FolderContentsDeleteToFolderDelete funciona creando automáticamente una carpeta con un archivo dentro. Luego se establece un oplock en el archivo para detener el proceso. Cuando el proceso se detiene, el archivo se mueve fuera de la carpeta. La carpeta se elimina y se recrea como un enlace NTFS a un destino objetivo. Cuando se cancela el oplock y el proceso continúa, la eliminación del archivo/carpeta sigue el nuevo enlace NTFS hacia el destino objetivo y elimina ese archivo antes de continuar la ejecución.
Esta herramienta probablemente sea mejor explicada por Zero Day Initiative, así que aquí hay un enlace a una explicación directamente de ellos:
Abusing Arbitrary File Deletes to Escalate Privileges and other Great Tricks
AppleMobileDeviceService.exeUna vez que iTunes está instalado, también instala un servicio: AppleMobileDeviceService.exe que se ejecuta con privilegios SYSTEM.
Cuando investigué ese servicio usando el Monitor de Procesos de Windows Sysinternals (Procmon) inmediatamente noté un comportamiento preocupante.
El servicio recorre recursivamente todos los archivos dentro de la ruta C:\ProgramData\Apple\Lockdown\* y elimina todas las carpetas y archivos que no pertenezcan allí.
Para pruebas locales, usé ProcessHacker2 para reiniciar forzosamente el servicio con el fin de inspeccionar el comportamiento del programa.
El comportamiento observado fue que el servicio ejecutándose como SYSTEM consulta el directorio y todos los subdirectorios dentro, y luego ejecuta la operación CreateFile con la opción Delete On Close habilitada, lo que significa que el servicio SYSTEM consulta la ruta C:\ProgramData\Apple\Lockdown\* y recorre recursivamente las subcarpetas y archivos dentro de ese directorio y los elimina.
C:\ProgramData\Apple\*Windows Sysinternals https://learn.microsoft.com/en-us/sysinternals/ accesschk64.exe se puede usar para verificar los derechos de acceso en carpetas específicas.
Los miembros del Grupo Local "Usuarios" tienen permisos de escritura dentro de la carpeta C:\ProgramData\Apple\Lockdown\, lo que permite a usuarios con pocos privilegios escribir archivos arbitrarios dentro de la carpeta.
Debido a que podemos escribir archivos arbitrarios dentro de la ruta Lockdown, y el proceso SYSTEM los eliminará cuando se reinicie el servicio, fue posible crear una primitiva de eliminación arbitraria de archivos/carpetas.
Para ilustrar esto, creo dos subcarpetas dentro de la carpeta Lockdown.
Subcarpeta a, y subcarpeta b dentro de la subcarpeta a.
Esto se verá así: C:\ProgramData\Apple\Lockdown\a\b
Dentro de la subcarpeta a hay un archivo de texto llamado aa.txt y dentro de la subcarpeta b hay un archivo de texto llamado bb.txt
C:\ProgramData\Apple\Lockdown\a\aa.txt
C:\ProgramData\Apple\Lockdown\a\b\bb.txt
Como se puede ver en la captura de pantalla anterior, la operación "CreateFile" se ejecuta con la opción "Delete On Close" sobre aa.txt eliminándolo.
Cuando el proceso SYSTEM ejecuta la operación CreateFile en aa.txt y bb.txt con la opción Delete On Close sobre los archivos, el proceso SYSTEM AppleMobileDeviceService.exe eliminará los archivos.
Ahora es posible para nosotros crear archivos arbitrarios dentro de la carpeta Lockdown y eliminarlos, lo que nos lleva al siguiente truco ingenioso.
En Windows es posible usar enlaces NTFS para redirigir una carpeta a otro lugar. De alguna manera, esto es similar a los enlaces simbólicos en Linux.
Para ilustrar esto, es posible crear un enlace NTFS (symlink) dentro de la carpeta C:\ProgramData\Apple\Lockdown que apunte a una carpeta en el Escritorio.
Puedes lograrlo tú mismo usando PowerShell New-Item -Type Junction -Path loquesea -Target "C:\Users\usuario\Desktop\AAyes", o simplemente usar el conjunto de herramientas ofrecido por ZDI:
Ejecuta el siguiente comando para apuntar un enlace NTFS dentro de la carpeta Lockdown a "Target" en el Escritorio.
.\FolderContentsDeleteToFolderDelete.exe /target "C:\Users\usuario\Desktop\AAyes" /initial "C:\ProgramData\Apple\Lockdown"
Cuando se reinicie el Servicio, el enlace NTFS recién creado apuntará a AAyes ubicado en el Escritorio.
Debido a que el Servicio ejecuta la operación CreateFile con la opción Delete On Close como SYSTEM, el archivo será eliminado.
Debido a que la operación se ejecuta con privilegios SYSTEM, tenemos una primitiva de eliminación arbitraria de carpetas o archivos, lo que significa que podemos obtener ejecución de código en el host como SYSTEM.
NOTA:
Fue necesario hacer ciertas modificaciones en el código fuente del proyecto FolderContentsDeleteToFolderDelete debido a restricciones de nombre de archivo / nombre de carpeta. Los nombres de archivo / nombres de carpeta tenían que ser muy cortos para que la eliminación se llevara a cabo. Se desconoce la razón detrás de esto y no se investigó, ya que los nombres cortos resolvieron el problema de manera confiable.
const wchar_t folder2path[] = L"C:\\d";
const wchar_t exploitFileName[] = L"e.txt";
// Fue necesario acortar las dos constantes: "folder2path" y "exploitFileName"
// Se cambiaron a: L"C:\\d" y L"e.txt" porque parecía que la longitud del nombre de archivo y carpeta tenía un impacto significativo en la funcionalidad del exploit.
[...]
// También necesitamos editar el valor de "folder1path" a L"c" para acortarlo.
folder1path += L"c";
Debido a que el servicio seguirá recursivamente cualquier enlace (symlinks), la tesis era que sería posible eliminar archivos arbitrariamente en el sistema como SYSTEM usando el servicio vulnerable de Apple que seguirá el enlace NTFS. Dado que el servicio vulnerable permite convenientemente a usuarios sin privilegios reiniciar el servicio usando el truco ("Apps -> Aplicaciones instaladas -> Apple Mobile Device Support -> Modificar -> Reparar") mediante la interfaz gráfica de Windows, es posible activar el exploit a voluntad. Una vez que el servicio se reinicia, sigue el enlace NTFS y el comportamiento determinado del programa dicta que el servicio eliminará los archivos o carpetas que el usuario elija apuntar.
En otras palabras, es el usuario quien decide qué archivos o carpetas eliminará el servicio. Debido a que se ejecuta como SYSTEM, podemos eliminar casi cualquier archivo del sistema (no archivos que requieran privilegios TrustedInstaller).
Esto significa que podemos crear cuidadosamente una cadena de eventos que hará lo siguiente:
La Prueba de Concepto consta de 5 pasos.
.\SetOpLock.exe C:\ProgramData\Apple\Lockdown\
Activar el reinicio del servicio Apps -> Aplicaciones instaladas -> Apple Mobile Device Support -> Modificar -> Reparar
Preparar el truco de reversión de MSI
.\FolderOrFileDeleteToSystem.exe
.\FolderContentsDeleteToFolderDelete.exe /target 'C:\Config.Msi' /initial "C:\ProgramData\Apple\Lockdown"
Cuando se libera el Oplock en el paso cinco, monitoreamos el proceso FolderContentsDeleteToFolderDelete para verificar que se haya seguido el enlace NTFS y que el Config.MSI ubicado en C:\ haya sido eliminado correctamente. Luego monitoreamos el proceso FolderOrFileDeletionToSystem.exe para verificar que ganamos la condición de carrera y que la carpeta Config.MSI "maliciosa" con el script de reversión modificado se haya escrito. Si todo sale bien, podemos presionar CTRL+ALT+SUPR, abrir el menú de Accesibilidad en la esquina inferior derecha y abrir el Teclado en pantalla. Debido a que hemos sobrescrito el HID.DLL en C:\Program Files\Common Files\microsoft shared\ink\HID.DLL usando el script de reversión malicioso, aparecerá una ventana CMD como SYSTEM, finalizando nuestro exploit.

Ejecutando y monitoreando FolderContentsDeleteToFolderDelete.exe
Ejecutando y monitoreando FolderOrFileDeleteToSystem.exe
Obteniendo una shell SYSTEM