Múltiples nuevas vulnerabilidades de escape del sandbox en macOS
(jhftss.github.io)- En la investigación de escapes del sandbox de macOS, los servicios XPC de dominio PID, que se habían visto relativamente poco, surgieron como superficie de ataque y llevaron al descubrimiento de más de 10 nuevas vulnerabilidades
- El objetivo principal no son los servicios Mach de los dominios System/User, sino los servicios XPC de tipo Application que se registran en el dominio PID al cargar una app o un framework
- Los casos vulnerables incluyen CVE-2023-27944, CVE-2023-32414, CVE-2023-32404, CVE-2023-41077, CVE-2023-42961, CVE-2024-27864, CVE-2023-42977, entre otros; algunos se vinculan incluso con bypass de TCC, permisos relacionados con SIP e impacto en iOS
- El punto de falla repetido fue que servicios no aislados, al procesar archivos, directorios, archivos comprimidos y DMG, no manejaban de forma segura el atributo extendido quarantine, las cadenas de rutas ni la verificación de permisos del cliente
- La respuesta de Apple incluyó eliminar servicios XPC vulnerables, normalizar entradas, trasladar la validación al lado del servidor y exigir private entitlement, aunque todavía quedan 5 reportes pendientes de parche
Modelo de sandbox de macOS y objetivo del escape
- En macOS, muchos procesos, incluidos servicios propios de Apple y apps de terceros, se ejecutan en un entorno de sandbox restringido
- Aunque un atacante obtenga ejecución remota de código (RCE) en un proceso con sandbox, las capacidades de ejecución y los permisos de acceso a archivos están limitados, por lo que el siguiente paso es un escape del sandbox para obtener permisos más amplios
-
App Sandbox
- Por los requisitos de Mac App Store, muchas apps se ejecutan con restricciones de App Sandbox
- Una app con sandbox debe tener el entitlement
com.apple.security.app-sandbox - Las restricciones se aplican durante la fase de inicialización de dyld, antes de la función
mainde la app - Al entrar en App Sandbox, la app queda contenedorizada y las operaciones de archivos se limitan a la ruta del contenedor de datos
- Los archivos creados por una app con sandbox reciben por defecto el atributo extendido
com.apple.quarantine - El perfil de sandbox incluye reglas que impiden eliminar este atributo extendido
- Los permisos detallados de App Sandbox se definen en
/System/Library/Sandbox/Profiles/application.sb - Se restringen la red, el hardware, el sistema de archivos y los servicios Mach accesibles
- Los procesos hijos creados con
forkheredan las restricciones de App Sandbox del padre - Los procesos ejecutados mediante
LaunchService.frameworkno heredan las restricciones; por ejemplo, se puede ejecutar directamente una app del sistema sin sandbox con el comando del sistemaopen
-
Service Sandbox
- Muchos servicios daemon de Apple se ejecutan en el contexto de Service Sandbox
- Los perfiles de sandbox de servicios se encuentran principalmente en
/System/Library/Sandbox/Profiles/*.sby/usr/share/sandbox/*.sb - Las restricciones de Service Sandbox se aplican manualmente llamando a la API
sandbox_init_XXXdesde la funciónmaindel servicio - Los servicios que entran en Service Sandbox generalmente no quedan contenedorizados
- Una diferencia importante es que los archivos creados en Service Sandbox no se marcan por defecto con quarantine
- Si no se llama manualmente a las API relacionadas con quarantine, los archivos creados no reciben quarantine
Rutas existentes de escape del sandbox en macOS
-
Ataques a LaunchService.framework
- Uno de los métodos comunes existentes consiste en atacar apps sin sandbox mediante LaunchService.framework
- CVE-2021-30864 fue un caso de manipulación de la variable de entorno
$HOMEcontra Terminal.app, una app del sistema sin sandbox - Al ejecutar Terminal, una carga maliciosa bajo
$HOME/.profilecontrolable se ejecuta sin restricciones de sandbox - Otro escenario consiste en soltar una nueva app sin sandbox y luego ejecutarla
- Sin embargo, una app recién soltada por una app con sandbox queda en quarantine y se bloquea su ejecución
- Si se pueden soltar archivos o carpetas sin quarantine, se puede eludir por completo App Sandbox
- CVE-2023-32364 fue un caso en el que se aprovechó que devfs no soporta atributos extendidos para soltar una carpeta sin quarantine
-
Ataques a servicios Mach accesibles
- El segundo método común consiste en atacar servicios Mach listados en el perfil de App Sandbox
- La información de los servicios Mach del sistema se almacena en
/System/Library/xpc/launchd.plist - Con la API
bootstrap_look_upse puede verificar desde una app con sandbox si es posible acceder a un servicio Mach específico - Estos servicios Mach existen en el dominio System o en el dominio User
- El punto de partida de esta investigación es que hay más servicios XPC accesibles desde App Sandbox fuera de estos dos dominios
Nueva superficie de ataque: servicios XPC de dominio PID
- Los servicios XPC pasados por alto existen en el dominio PID
- A diferencia de los servicios XPC de los dominios System/User observados habitualmente, estos tienen tipo de servicio Application
- Los servicios XPC de tipo Application se ejecutan cuando una app los solicita y terminan junto con la app solicitante cuando esta finaliza
- Los servicios XPC de los dominios System/User solo son accesibles desde apps con sandbox si están definidos en
application.sb - Todos los servicios XPC que requieren las apps y frameworks aparecen en el dominio PID de esa app
- Muchos servicios XPC del dominio PID no esperan ser llamados desde apps con sandbox, por lo que pueden no tener comprobaciones de entitlement ni de sandbox sobre los clientes XPC entrantes
-
Caso de SystemShoveService.xpc
SystemShoveService.xpces un bundle XPC dentro del framework privado del sistemaShoveService.framework- El tipo de servicio en Info.plist es Application y el identificador del bundle es
com.apple.installandsetup.shoveservice.system - Si se carga
/System/Library/PrivateFrameworks/ShoveService.frameworkdesde una app con sandbox, el servicio XPC correspondiente se registra automáticamente en el dominio PID SystemShoveService.xpcno verificaba al cliente XPC solicitante, por lo que podía explotarse para escapar de App Sandbox- Este servicio tenía el potente entitlement relacionado con SIP
com.apple.rootless.install, por lo que también podía vincularse con un bypass de la protección SIP - La vulnerabilidad fue asignada como CVE-2022-26712, y los detalles están resumidos en un artículo anterior
-
Método de búsqueda
- Todos los servicios XPC cuyo Service Type es Application son objetivos potenciales para escapes de App Sandbox
- Se pueden encontrar enumerando los servicios XPC en frameworks del sistema y frameworks privados
/System/Library/Frameworks/System/Library/PrivateFrameworks
- Si existe un servicio XPC de dominio PID que no verifica a los clientes XPC entrantes, se puede intentar atacarlo de las siguientes formas
- Soltar una carpeta de app sin quarantine para obtener un escape completo del sandbox
- Soltar sin quarantine un archivo ZIP o DMG que contenga una app sin sandbox
2 vulnerabilidades solo beta
-
Beta-No-CVE-1: ejecución arbitraria de comandos en StorageKit
- Apple registró esta vulnerabilidad en additional recognitions, pero no le asignó un CVE
- Según Apple, los CVE solo se asignan a vulnerabilidades de software lanzado a producción, y no a vulnerabilidades de software solo beta
- Solo afecta a las versiones beta de macOS Sonoma
- La ruta del servicio XPC vulnerable es
/System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpc - Este servicio podía ejecutarse sin restricciones de sandbox y aceptaba a todos los clientes XPC en el método delegate
- El único método de
SKRemoteTaskRunnerProtocol,runTask:arguments:withReply:, estaba diseñado para ejecutar comandos arbitrarios con la ruta del ejecutable y los argumentos especificados - Como la ruta del ejecutable y los argumentos podían ser controlados por un cliente XPC en sandbox, era posible ejecutar comandos arbitrarios del sistema sin restricciones de sandbox
- Apple eliminó por completo el servicio XPC vulnerable del sistema operativo antes del lanzamiento estable de macOS Sonoma 14.0
-
Beta-No-CVE-2: abuso de la creación de ZIP en AudioAnalyticsHelperService
- Esta vulnerabilidad tampoco recibió un CVE por el mismo motivo de ser solo beta
- La ruta del servicio XPC vulnerable es
/System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpc - El servicio podía ejecutarse sin restricciones de sandbox y aceptaba a todos los clientes XPC
- El método
createZipAtPath:hourThreshold:withReply:comprimía una ruta arbitraria especificada por el cliente XPC - Si no existía una carpeta
compresseden la ruta indicada, la creaba, buscaba archivos.json, los movía a esa carpeta y luego creaba un archivo ZIP - Un atacante podía reemplazar la carpeta
compressedpor un symlink para mover archivos arbitrarios a ubicaciones arbitrarias - El contenido del archivo de origen no se verifica, y la ruta del archivo de destino debe tener el sufijo
.json - Como el servicio no estaba en sandbox, el archivo ZIP recién creado no quedaba en quarantine
- Antes del lanzamiento de macOS Sonoma 14.0, Apple lo parchó para verificar el entitlement
com.apple.audioanalytics.helper.servicede los clientes XPC entrantes - En las versiones recientes de macOS, el framework privado
AudioAnalyticsInternal.frameworky su servicio XPC fueron eliminados por completo
CVE-2023-27944: TrialArchivingService
- El servicio vulnerable es
/System/Library/PrivateFrameworks/TrialServer.framework/XPCServices/TrialArchivingService.xpc - Este servicio entra en un Service Sandbox con el perfil
/System/Library/Sandbox/Profiles/com.apple.trial.TrialArchivingService.sb - Al ser un Service Sandbox, los archivos soltados no quedan en quarantine
- El servicio acepta a todos los clientes XPC entrantes
- El método
extractArchiveFromHandle:withArchiveName:toDirectory:destDirExtension:postExtractionCompression:completion:extrae en una ubicación especificada el archivo de archivo comprimido entregado por una app en sandbox - Como el atributo extendido de quarantine no se transmitía al contenido extraído, podía resultar en el drop de archivos sin quarantine
-
Condiciones de explotación y bypass
- Al abusar de este método, los archivos Mach-O dentro del archivo comprimido pierden el permiso de ejecución después de extraerse, por lo que no se pueden ejecutar directamente
- Una técnica con symlink, como la de CVE-2021-30990, puede servir como bypass
- Sin embargo, este método XPC solo extrae directorios y archivos normales, y no permite extraer symlinks desde el archivo comprimido
- Un método de bypass es extraer la app payload en la ruta del contenedor de la app en sandbox
- Como la app en sandbox tiene permisos de lectura y escritura sobre esa ruta, puede crear directamente un symlink o conceder permisos de ejecución con
chmod - Otro método es archivar dos veces la app payload
- Descomprimir el ZIP externo con el método XPC vulnerable
- Descomprimir el ZIP interno con el comando del sistema
open
-
Parche
- En macOS Ventura 13.3, Apple lo parchó para verificar el entitlement
com.apple.TrialArchivingService.internalde los clientes XPC entrantes - Si no existe ese entitlement, rechaza la conexión XPC
- En macOS Ventura 13.3, Apple lo parchó para verificar el entitlement
CVE-2023-32414: ArchiveService
- El servicio vulnerable es
/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/XPCServices/ArchiveService.xpc - Este servicio entra en un Service Sandbox, pero los archivos soltados no quedan en quarantine
- El servicio acepta a todos los clientes XPC
- El método
unarchiveItemWithURLWrapper:…descomprime en una ubicación especificada el elemento entregado por una app en sandbox - Como no transmitía el atributo extendido de quarantine al contenido extraído, una app en sandbox podía soltar archivos arbitrarios sin quarantine
- El cliente XPC ya estaba implementado en la clase Objective-C
DSArchiveServicedeDesktopServicesPriv.framework -
Parche
- En macOS Ventura 13.4, Apple lo parchó para verificar el entitlement
com.apple.private.ArchiveService.XPCde los clientes XPC entrantes - Si no existe ese entitlement, rechaza la conexión XPC
- En macOS Ventura 13.4, Apple lo parchó para verificar el entitlement
CVE-2023-32404: ShortcutsFileAccessHelper
- El servicio vulnerable es
/System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc - Este servicio podía ejecutarse sin restricciones de sandbox, por lo que podía usarse para escapar de App Sandbox
- La firma de código también incluía un entitlement especial de TCC para Full Disk Access
- Por lo tanto, esta vulnerabilidad también podía usarse para evadir por completo las protecciones de TCC
- El servicio acepta a todos los clientes XPC
- El único método de
WFFileAccessHelperProtocol,extendAccessToURL:completion:, estaba diseñado para otorgar al cliente XPC permisos de lectura y escritura sobre una URL arbitraria- Internamente llama a la API
sandbox_extension_issue_filepara emitir un token de acceso a archivos - La URL arbitraria la especifica el cliente XPC en sandbox
- Internamente llama a la API
-
Parche
- En macOS Ventura 13.4, Apple lo parchó para verificar el entitlement
com.apple.shortcuts.file-access-helperde los clientes XPC entrantes - Si no existe ese entitlement, rechaza la conexión XPC
- En macOS Ventura 13.4, Apple lo parchó para verificar el entitlement
CVE-2023-41077: mscamerad-xpc y evasión repetida de parches
- El servicio vulnerable es
/System/Library/Frameworks/ImageCaptureCore.framework/XPCServices/mscamerad-xpc.xpc - Este servicio podía ejecutarse sin restricciones de sandbox, por lo que podía explotarse para escapar del App Sandbox
- La firma de código tenía entitlements TCC especiales que permitían acceder a Photos y Removable Volumes sin solicitar confirmación al usuario
- Por lo tanto, esas protecciones TCC también podían evadirse
-
Flujo vulnerable
- El nombre predeterminado del servicio es
com.apple.mscamerad-xpc - El servicio acepta todos los clientes XPC
openDevice:withReply:deICXPCDeviceManagerProtocolabre y configura un nuevoMSCameraDevice- Durante la inicialización del nuevo dispositivo, se abre otro servicio XPC anónimo para proporcionar rutinas de servicio para el dispositivo de cámara
- Ese servicio XPC anónimo también acepta todos los clientes XPC
- El método
requestReadDataFromObjectHandle:options:withReply:deICCameraDeviceProtocollee el contenido del elemento de archivo solicitado y lo devuelve al cliente XPC - La ruta del archivo solicitado podía ser controlada por el cliente XPC, por lo que una app en sandbox podía leer archivos arbitrarios fuera de su contenedor
- Debido a los potentes entitlements TCC del servicio, también podía leer Photos del usuario sin solicitar confirmación
- El nombre predeterminado del servicio es
-
Configuración de un dispositivo de cámara falso
MSCameraDevicepodía emularse creando y montando un archivo DMG- Si una ruta de archivo dentro del volumen DMG coincidía con una expresión regular específica, el elemento de archivo se indexaba como
ICCameraFile - Ejemplos de nombres de carpeta:
123abcde,DCIM,dcIm - Ejemplos de nombres de archivo:
abcd1234.mp3,1234E5678.HEIC - Una app en sandbox podía disparar el problema soltando, abriendo y montando el archivo DMG
- El cliente XPC ya estaba implementado en el framework
ImageCaptureCore
-
Parches y evasiones
- Apple agregó una nueva verificación en
acceptConnection:en macOS Sonoma 14 - Permite el acceso si el cliente tiene el entitlement privado
com.apple.private.imagecapturecore.authorization_bypass - O si el cliente es un platform binary
- La condición de platform binary podía evadirse porque era posible inyectar una biblioteca dinámica en un binario firmado por Apple
- Se elegía
/bin/ls, un binario firmado por Apple sin entitlement - Se inyectaba una dylib con el código del exploit anterior mediante la variable de entorno
DYLD_INSERT_LIBRARIES - Luego se comunicaba con el servicio XPC como antes
- Se elegía
- Apple asignó CVE-2024-23253 a este reporte de evasión
- En macOS 14.4, la segunda condición se reforzó: el cliente XPC no solo debía ser un platform binary, sino que también debía estar firmado con las flags
CS_REQUIRE_LVoCS_FORCED_LV - Este parche también podía evadirse
- Se inyectaba una dylib en
/bin/ls - En tiempo de ejecución, se configuraban manualmente las flags requeridas con la API
csops - Luego se pasaba la verificación del servicio XPC
- Se inyectaba una dylib en
- Apple asignó CVE-2024-40831 a esta segunda evasión
- En macOS Sequoia 15, se volvió a parchear para permitir únicamente clientes XPC con el entitlement privado
com.apple.private.imagecapturecore.authorization_bypass
- Apple agregó una nueva verificación en
CVE-2023-42961: intents_helper
- Esta vulnerabilidad también puede explotarse en iOS
- El servicio vulnerable es
/System/Library/Frameworks/Intents.framework/XPCServices/intents_helper.xpc - El servicio puede ejecutarse sin restricciones de sandbox y acepta todos los clientes XPC
- Debido a un path traversal en la función
filePathForImageWithFileName, era posible acceder a rutas arbitrarias - El parámetro
fileNamees una cadena arbitraria que puede controlar el cliente XPC -
Métodos afectados
- La función vulnerable era alcanzable desde dos métodos XPC
retrieveImageWithIdentifier:completion:podía explotarse para leer archivos arbitrarios con extensión.png- Los datos leídos se almacenaban en una variable miembro de una instancia de
INImagey se devolvían al cliente XPC purgeImageWithIdentifier:completion:podía explotarse para borrar rutas de archivos arbitrarias
-
Parche
- Apple lo parchó en macOS Sonoma 14.0 normalizando las cadenas de entrada del cliente XPC
- Recorta los caracteres especiales usados para path traversal
CVE-2024-27864: diskimagescontroller
- Al momento de escribir el artículo, la entrada CVE aún estaba pendiente de publicación
- El servicio vulnerable es
/System/Library/PrivateFrameworks/DiskImages2.framework/XPCServices/diskimagescontroller.xpc - Este servicio tiene el entitlement
com.apple.diskimages.creator-ucen su firma de código, lo que le permite realizar acciones potentes - Las funciones principales de ese entitlement son dos
- Comunicarse con
/usr/libexec/diskimagesiod, que tiene FDA entitlement y realiza la operación real de attach - Conectarse al servicio IOKit
AppleDiskImagesControllerpara crear dispositivos para archivos DMG y aplicar quarantine
- Comunicarse con
-
Causa de la vulnerabilidad
- El servicio acepta todos los clientes XPC
- El método
attachWithParams:reply:deDIControllerProtocolera el punto de ataque - Internamente llama a
checkAttachEntitlementWithError, pero, pese a su nombre, esta función siempre devuelve TRUE - En
DiskImages2.framework, el cliente XPC ya está implementado con la clase Objective-CDIAttachParams - El código cliente del framework verifica si la URL de entrada está en estado de quarantine
- Si la URL de entrada está en quarantine, antes del attach configura un parámetro de quarantine, y ese parámetro le indica al servicio XPC que aplique quarantine al dispositivo de destino
- Al crear un cliente XPC propio, era posible omitir la configuración del parámetro de quarantine y llamar directamente a
attachWithParams:reply: - Como resultado, era posible adjuntar un archivo DMG en quarantine sin aplicar quarantine al dispositivo correspondiente
-
Parche
- En macOS Sonoma 14.4, Apple movió la lógica de validación del lado del cliente al lado del servidor
- Si la ruta del archivo de entrada está en estado de quarantine, el servidor aplica directamente quarantine al dispositivo correspondiente
CVE-2023-42977: PerfPowerServicesSignpostReader
- El servicio vulnerable es
/System/Library/PrivateFrameworks/PowerlogCore.framework/XPCServices/PerfPowerServicesSignpostReader.xpc - El servicio podía ejecutarse sin restricciones de sandbox y aceptaba cualquier cliente XPC
XPCSignpostReaderProtocoltiene 6 métodos, pero Apple solo implementósubmitSignpostDataWithConfig:withReply:; los otros 5 tienen implementaciones vacías- La lógica central de este método consiste en recopilar datos de logs y archivarlos en un archivo gzip
- Con la cadena
tagUUIDcontrolada por el cliente XPC, se podía secuestrar la ruta depowerloghacia una ruta arbitraria -
Eliminación de rutas arbitrarias
- Dentro de la función se llama a
archiveDirectoryAt:deleteOriginal:para eliminar la ruta depowerlog - Si se incluye una cadena de path traversal en
TagUUID, se puede obtener una primitive de eliminación de rutas arbitrarias
- Dentro de la función se llama a
-
Creación de directorios arbitrarios y escape completo del sandbox
- La función
createSignpostFile:crea un directorio en la ruta depowerlog - Con esto se podía crear un directorio arbitrario sin el atributo extendido de quarantine
- Una primitive de creación de directorios arbitrarios sin quarantine puede derivar en un escape completo del sandbox
- En el artículo se usa la técnica de CVE-2023-32364
- Crea una carpeta
.appsin quarantine - Crea un symlink a
/bin/bashdebajo deContents/MacOS - Configura
BASH_ENVenLSEnvironment - La ejecuta con
open ./poc.app
- Crea una carpeta
- La función
-
Parche
- Apple lo corrigió en macOS Sonoma 14.0 normalizando la cadena UUID del cliente XPC
- Si la cadena de entrada no es un UUID válido, la función sale sin continuar
Patrón repetido
- La superficie de ataque principal no son los servicios XPC del dominio System o User, sino los servicios XPC del dominio PID dentro de frameworks del sistema y privados
- Los servicios XPC cuyo Service Type es Application pueden registrarse en el dominio PID de una app en sandbox con solo cargar el framework
- Muchos de los servicios vulnerables no esperaban llamadas de clientes en sandbox y omitieron las siguientes verificaciones
- Verificación de entitlements del cliente XPC
- Verificación de si el cliente está en sandbox
- Normalización de rutas de entrada
- Validación del estado de quarantine del lado del servidor
- Las condiciones explotadas repetidamente fueron las siguientes
- El drop de archivos o carpetas sin quarantine puede conducir a un escape completo del sandbox
- Si el atributo extendido de quarantine desaparece durante la descompresión, puede derivar en una omisión de Gatekeeper y un escape del sandbox
- Los archivos creados por Service Sandbox no se marcan con quarantine de forma predeterminada
- Todavía quedan 5 reportes pendientes de parche
Comentarios adicionales sobre App Sandbox y Service Sandbox
- Sobre un reporte, Apple determinó que era expected behavior, porque la aplicación recién lanzada no está en el contexto del proceso actual y no puede compartir los entitlements ni los permisos del proceso actual
- En App Sandbox, los archivos soltados reciben quarantine de forma predeterminada
- En Service Sandbox, los archivos soltados no reciben quarantine de forma predeterminada
- Se resume que el hecho de que un proceso recién lanzado no esté en el contexto de ejecución del servicio actual y no comparta los entitlements o privilegios de ese servicio no es, en sí mismo, una falla
- En cambio, el hecho de que un atacante pueda obtener RCE en el contexto de un servicio restringido por sandbox, luego soltar y ejecutar una nueva app sin sandbox para salir de las restricciones de sandbox del servicio objetivo, sí puede considerarse una falla
- Como ejemplo, se menciona IMTranscoderAgent, que fue objetivo de un exploit 0-click de NSO Group
com.apple.WebDriver.HTTPService.xpcaparece como ejemplo de llamada manual a la APIWBSEnableSandboxStyleFileQuarantine- Se resume que escapar de App Sandbox a Service Sandbox en macOS equivale, en la práctica, a pasar a Non Sandbox
1 comentarios
Comentarios en Hacker News
La respuesta de ir parcheando servicios XPC uno por uno aquí se siente un poco rara
Parece más bien un problema de diseño del sandbox, y queda la duda de por qué tantos servicios XPC que aparentan ser para uso interno de las apps son accesibles desde apps dentro del sandbox
En Windows también hay mecanismos parecidos, como el sandbox de WinRT, el sandbox para apps Win32, el kernel de seguridad y la protección de drivers, pero si quieres ejecutar un solo binario a través de varias configuraciones, terminan apareciendo huecos de compatibilidad hacia atrás
En los sistemas operativos móviles es mucho más fácil, porque no hay compatibilidad hacia atrás y se puede restringir fuertemente el modelo de ejecución
macOS debería tener algo como contenedores de Darwin basados en capabilities, en vez de parecer un enorme montón de listas de bloqueo
https://news.ycombinator.com/item?id=37655477
No existe un modelo de seguridad que funcione bien en el escritorio
Como decía otro comentario, iOS pudo ofrecer un modelo de seguridad razonable porque no cargaba con tantos restos viejos
En cambio, si Telegram pide acceso total a contactos y fotos, la gente realmente lo permite
Buen trabajo
Pero queda la duda de si esta arquitectura va en la dirección correcta. Parece que cada vez que se crea un framework de seguridad para bloquear cierto tipo de ataque, termina apareciendo una clase completamente nueva de problemas, y no da la impresión de que al final estemos más seguros
Es como el sistema fiscal neerlandés: una estructura sobre la que se siguen apilando parches para impedir abusos, y quizá ya hasta haya adquirido conciencia
La forma correcta de hacerlo suele fracasar en el mercado por la compatibilidad hacia atrás o porque los desarrolladores se niegan a adoptar las restricciones. El sandbox de WinRT es un ejemplo de eso
La seguridad en teléfonos lo tuvo más fácil porque no necesitaba preocuparse por compatibilidad hacia atrás y, hasta ahora, el gatekeeping de las app stores ha obligado a los desarrolladores que quieren participar a seguir las reglas
Todos los sistemas operativos que hoy están en uso tendrían que rehacerse desde cero para ser seguros hasta el próximo siglo, y en ese proceso habría que tirar mucho código. Ese es el costo
Se puede especular que también podría haber fuerzas poderosas interesadas en meter más vulnerabilidades en la computación de consumo
Algunos ejemplos conocidos son estos
https://en.wikipedia.org/wiki/Dutch_Sandwich
https://en.wikipedia.org/wiki/Intel_Management_Engine#Assert...
macOS, o sea NeXTstep, fue creado desde el principio como un sistema operativo abierto y extremadamente extensible
Había incontables formas de añadir extensiones o hooks de terceros, y como el software podía accederse desde varios runtimes, en ese momento ya era un logro técnico impresionante que todo eso funcionara de manera fluida en conjunto
Java, Mac clásico, X11 y la base de código de NeXTstep corrían juntos sin problemas gracias a varios puntos de entrada de extensión del kernel
Además, la plataforma también tenía APIs para que las apps se comunicaran entre sí sin problemas
Pero Apple se ha ido alejando poco a poco de esa filosofía y sigue cerrando cada vez más el sistema. Ha sido un recorrido bastante interesante
SBPL (sandbox profile language) es interesante. Aquí hay más detalles: https://github.com/0xbf00/simbple
Me pregunto si en algún lugar dentro de macOS hay un intérprete de Scheme que procese esto
P. D.: parece que quien hace este trabajo es
sandbox-exec. Referencia: https://reverse.put.as/wp-content/uploads/2011/09/Apple-Sand...Hallazgo impresionante. Como también se insinúa en el artículo, parece muy probable que todavía queden fallas similares circulando por ahí
Si Apple no rediseña su enfoque para reforzar estos servicios, da la impresión de que seguirán apareciendo CVE relacionados con XPC
Me gustan y no me gustan los sandboxes
Son una excelente segunda línea de defensa, pero las organizaciones grandes tienden a negarse a corregir vulnerabilidades de ejecución remota de código si no se puede escapar del sandbox y hacer algo realmente útil. Entonces el sandbox acaba usándose como defensa principal, y eso da tristeza
Hasta donde sé, Apple, Microsoft y Google tienen programas de bug bounty, y aunque pagan más por escapes de sandbox, también pagan por vulnerabilidades que quedan contenidas por el sandbox
Todo el mundo sabe que los atacantes pueden guardar vulnerabilidades de ejecución remota de código que hoy todavía no sirven y combinarlas después cuando se descubra una vía de escape del sandbox
Un poco fuera de tema, pero si algún experto en sandbox conoce una estrategia para eludir el límite de maximum "pattern serialization length", este problema me dio dolores de cabeza durante bastante tiempo: https://github.com/NixOS/nix/issues/4119
Por desgracia,
sandbox-execcasi no está documentado y además se habla de que será descontinuado, así que resolverlo ha sido bastante complicadoEn macOS siguen apareciendo bypasses sin fin. Este sistema operativo ni siquiera fue diseñado originalmente para este tipo de permisos granulares
No es algo que simplemente puedas montar después sobre tecnología heredada de Mac OS y NeXTSTEP
Ni siquiera soy investigador de seguridad, solo un desarrollador de apps antiguas, y aun así encontré varios bypasses por mi cuenta. Digamos que sé dónde están enterrados los cadáveres
Pero al final dejé de buscarlos. El sistema de reporte de vulnerabilidades de Apple es un desastre total y parecía interesado solo en mantenerte callado el mayor tiempo posible. Es una pérdida de tiempo
En general, macOS da la impresión de haberse convertido en víctima del teatro de seguridad. Perjudica tanto a usuarios como a desarrolladores legítimos con software debilitado y solicitudes interminables de permisos, mientras que los atacantes reales pueden saltárselo fácilmente cuando quieran. Se parece a la vieja parodia de Windows Vista que hacía Apple
Que una empresa quiera el mayor tiempo posible para corregir errores también es parte del juego. ¿De verdad otras empresas querrían que las vulnerabilidades descubiertas se hicieran públicas lo antes posible? Como no pueden controlar qué tan rápido actualizan los usuarios, retrasar la divulgación siempre parece mejor para el usuario final, y eso debería estar por encima del deseo de promoción del investigador
La arquitectura del sandbox de Apple normalmente parece bastante bien diseñada. En este caso, da la impresión de que hubo algún problema en la arquitectura o en la comunicación
Que existan bypasses también se debe a que se les exige demasiada funcionalidad a los sistemas operativos de escritorio. Se puede decir que son sistemas operativos mucho más sofisticados y complejos que las plataformas de servidor. Los navegadores web también tienen muchos CVE por la misma razón. Queremos seguridad y también funcionalidad, así que inevitablemente aparece un punto intermedio donde ambas chocan
La prueba está en que ha ido reforzando gradualmente el software y el hardware de macOS durante los últimos 20 años
Para la mayoría de los usuarios finales ha sido lo bastante gradual como para que casi no lo noten, pero los desarrolladores de macOS conocen muy bien los problemas de seguridad que tienen que lidiar tanto en actualizaciones grandes como pequeñas. Por ejemplo:
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/08/…
https://eclecticlight.co/2024/09/…
Existen sistemas basados en capabilities, pero no hay ninguno de uso realmente extendido
No tengo claro cuál sería la solución. Aun así, intentar agregar seguridad parece mejor que no hacer nada y dejar que una sola vulnerabilidad de una aplicación se convierta de inmediato en el control total de la cuenta del usuario
Los servicios XPC que se pasaron por alto en el dominio pid son una forma ingeniosa de eludir las restricciones del sandbox de macOS
El truco de inyección de
dyldpara evitar las comprobaciones de permisos también está muy pulidoEl parche de Apple aquí se siente como una solución temporal, y quizá haga falta revisar de fondo cómo funciona la herencia del sandbox