El permiso era para las copias de seguridad
El 2 de octubre Apple anunció nuevos controles sobre el Acceso total al disco de macOS, un ajuste creado para que funcionen las apps de copia de seguridad, porque “a medida que los agentes de IA se vuelven más capaces y autónomos, los riesgos asociados a este nivel de acceso crecerán de forma considerable”. El detonante fue Muse, de Meta, que según un periodista sincronizó su base de datos de Mensajes hasta la fila 187.462, y un fallo de la app de ChatGPT para Mac que encontró Patrick Wardle. Un agente de código puede heredar ese mismo alcance de la terminal que lo lanzó, y los secretos de desarrollador que puede leer nunca estuvieron detrás de ese permiso. En Bromure Agentic Coding el agente no es un proceso del Mac: se ejecuta en una VM Linux que contiene las carpetas que compartiste y credenciales de sustitución.
Apple creó el Acceso total al disco para que las apps de copia de seguridad pudieran leerlo todo. Hoy los agentes de IA piden ese mismo alcance, y en el Mac de un desarrollador muchas veces lo obtienen de la terminal sin pedirlo.
El 2 de octubre, Apple publicó una breve nota en su página de noticias para desarrolladores titulada Updates to Full Disk Access in macOS. Explica por qué existe el ajuste: “El Acceso total al disco elude en gran medida estos controles para permitir que las apps de copia de seguridad funcionen correctamente en el Mac”. Después describe lo que algunos desarrolladores han hecho con él: “exponer todo lo que hay en sus sistemas, incluidos archivos, correo, mensajes e incluso el historial de navegación, sin que los usuarios lo sepan ni lo comprendan del todo”.
Apple añadirá controles para que los usuarios que quieran conceder este acceso “solo puedan hacerlo mediante una acción muy explícita”. También dio una razón para actuar ahora: “A medida que los agentes de IA se vuelven más capaces y autónomos, los riesgos asociados a este nivel de acceso crecerán de forma considerable”.
Apple no ha dado fecha, ni ha dicho qué pasará con los permisos ya concedidos. Lo que sí deja claro la nota es lo que Apple piensa del Acceso total al disco en manos de un agente.
Dos historias en dos semanas
La cobertura de la nota, empezando por TechCrunch, la relacionó con dos incidentes.
Muse y la base de datos de Mensajes. El 19 de septiembre, Jason Aten, columnista de Inc., contó que el agente Muse de Meta, en su Mac, le envió una notificación que proponía una columna basada en una conversación que acababa de tener con el copresentador de su pódcast. Dice que había negado a Muse el acceso a Mensajes y que, aun así, descubrió que Muse había sincronizado su base de datos de Mensajes hasta la fila 187.462, mientras los propios ajustes de Muse mostraban el Acceso total al disco desactivado. Meta discute ese relato. David Singleton, de Meta Superintelligence Labs, afirmó que Muse solo puede leer Mensajes después de “tres pasos distintos de permisos a nivel de aplicación y protecciones integradas a nivel del sistema macOS” que “no se pueden eludir aunque la aplicación Muse tuviera un bug”. El propio Muse le dijo a Aten que había estado sincronizando sus “notificaciones del dispositivo”.
Patrick Wardle, de la Objective-See Foundation, resumió lo que significa el permiso una vez que una app lo tiene: “cualquier archivo (que no sea de root) se puede leer, el historial de navegación, las cookies del navegador, los chats, etc.”.
La app de ChatGPT para Mac. Esa misma semana, Wired informó de un fallo que Wardle encontró en la app de ChatGPT de OpenAI para macOS, CVE-2026-100754. La app decidía en qué procesos locales confiar según su firma de código y su ascendencia de procesos. A un intérprete de scripts de confianza se le podía pasar una entrada no fiable, lo que permitía que código corriente que ya se ejecutaba en el Mac se colara en una cadena de procesos aceptada y manejara las funciones de confianza de la app: el historial de chats y las integraciones conectadas, como las sesiones del navegador. OpenAI lo corrigió en la build 26.924.20706, en producción desde el 25 de septiembre. Nadie ha informado de explotación real.
Ambas historias comparten una premisa. Un agente en el Mac se ejecuta como tú, y todo lo que puede leer también lo puede leer cualquier código que tome el control del agente.
La terminal ya había dicho que sí
Muse pidió el Acceso total al disco a través de Ajustes del Sistema, como espera el modelo de Apple. Un agente de código de terminal no pide nada y se ejecuta con los permisos de la terminal.
macOS comprueba los permisos de privacidad contra la app responsable, que para
una herramienta de línea de comandos es la terminal que la lanzó. Muchos
desarrolladores concedieron hace años el Acceso total al disco a Terminal, a
iTerm o a su editor para quitarse de encima los avisos que find, rsync o un
script de copia de seguridad provocarían de otro modo. Todo proceso lanzado
desde esa ventana hereda el permiso. Eso incluye Claude Code, Codex y Gemini
CLI, además de cada script postinstall de npm install, cada servidor MCP que
lanzan y cada comando de una línea que un README los convenció de ejecutar.
Con esa configuración, los archivos que enumeró Apple quedan al alcance del agente y de todo lo que el agente ejecuta:
~/Library/Messages/chat.db, el historial de Mensajes que Muse habría sincronizado~/Library/Mail, todos los buzones- el historial y las cookies de Safari, en
~/Library/Safariy en su contenedor - Notas, las fototecas de Fotos y los contenedores privados de otras apps
Los secretos nunca estuvieron detrás del aviso
El cambio de Apple es el correcto, y cubre los archivos que la gente considera privados. Las credenciales de trabajo de un desarrollador están en otro sitio. Estas rutas no están protegidas por el Acceso total al disco ni por ningún otro permiso de privacidad de macOS:
~/.ssh/id_ed25519~/.aws/credentialsy~/.aws/sso/cache/~/.config/gh/hosts.yml,~/.git-credentials,~/.npmrc,~/.docker/config.json,~/.kube/config- el archivo
.envde cada proyecto que hayas clonado - los tokens OAuth y las transcripciones de sesión del propio agente
Cualquier proceso que se ejecute con tu usuario puede leerlos, con o sin Acceso total al disco. Los nuevos controles de Apple harán más difícil conceder un permiso grande. Un agente de código en un portátil no necesitaba ese permiso para llegar a los archivos que permiten a un atacante hacer push a tus repositorios o entrar en tu cuenta de AWS. Los infostealers dirigidos a agentes de código ya recolectan estos archivos: tokens de acceso y de refresco, configuraciones de MCP, historiales de prompts.
Antes de revisar qué apps tienen Acceso total al disco, mira qué contiene el ordenador del agente.
En Bromure, el agente no es un proceso del Mac
Bromure Agentic Coding ejecuta los agentes de cada máquina dentro de una VM Ubuntu con el Virtualization.framework de Apple. Claude Code, Codex, Grok y los demás son procesos Linux sobre un kernel Linux. Los permisos de privacidad de macOS no se les aplican porque nunca abren un archivo en el sistema de archivos del Mac. No hay permiso que heredar ni terminal cuyos permisos se filtren al agente, porque la terminal que ves en Bromure está conectada a la VM, no a la shell de tu Mac.
Lo que la VM puede ver cabe en una lista corta:
- Su propio disco de sistema, un clon copy-on-write de una imagen de Ubuntu firmada.
- Su propio home,
/home/ubuntu, en una imagen de disco privada. - Las carpetas que compartiste con esa máquina, hasta ocho, cada una montada
por su nombre dentro del home. Si compartes
~/code/payments, el agente ve~/payments. No ve~/code, y nunca ve~/Library. - Un pequeño recurso compartido de configuración por arranque, de solo lectura, con los ajustes del proxy y las credenciales de sustitución.
chat.db no está en esa lista, y tampoco Mail ni el historial de Safari. Un
proceso de sincronización al estilo de Muse, o un agente víctima de una
inyección de prompt al que se le pide “resumir mis mensajes recientes como
contexto”, descubre que ~/Library/Messages no existe. La VM no tiene ninguna
ruta que lleve hasta allí.
Los secretos de desarrollador son sustitutos
Eso cubre la lista de Apple. Bromure cubre también la lista que la nota de Apple deja fuera: los dotfiles.
Las credenciales reales se quedan cifradas en el Mac. La VM recibe sustitutos
con el formato correcto: GH_TOKEN es ghp_ más 36 caracteres que GitHub
rechazaría, ANTHROPIC_API_KEY es sk-ant-api03-brm-…, y ~/.git-credentials,
~/.docker/config.json y ~/.kube/config contienen valores falsos. El proxy en
el Mac pone el valor real en una petición después de que esta salga de la VM, y
solo cuando la petición va al host al que pertenece esa credencial. En palabras
del manual: “Ningún archivo, variable de entorno o proceso dentro de la VM
contiene jamás una clave de API, un token OAuth, un secreto de AWS o una clave
privada SSH reales”.
Dos detalles responden a la preocupación de Apple por los permisos amplios:
- La importación de AWS pide una sola carpeta, en el Mac. Para importar tus
perfiles de AWS, Bromure pide un permiso security-scoped solo para
~/.aws. La carpeta se lee en el Mac y nunca se monta en la VM. Es el permiso estrecho y explícito que pide la nota de Apple, y lo recibe la app anfitriona, nunca el agente. - Las claves SSH se quedan en el Mac. El
SSH_AUTH_SOCKde la VM es un puente hacia un agente en el Mac. El invitado puede pedir firmas, y los bytes de la clave privada nunca entran en la VM. Tu ssh-agent de la sesión de macOS nunca queda expuesto a ella.
Cuando Claude Code inicia sesión a través de Bromure, el flujo OAuth se ejecuta
en el navegador de tu Mac y los tokens se guardan en el Mac. El ~/.claude de
la VM no contiene ningún token real. Ese es el archivo que buscan los
infostealers dirigidos a agentes de código.
El navegador también tiene su propio disco
Apple mencionó el historial de navegación, y Wardle las cookies. En Bromure, el
agente tiene un navegador, un Chromium completo que maneja a través del servidor
MCP browser integrado. Se ejecuta en una segunda VM desechable, separada de la
máquina del agente y de tu Mac. Por defecto, su disco es un clon temporal que se
borra al cerrar el navegador, así que las cookies, los inicios de sesión y el
historial desaparecen con él. No tiene acceso al historial de Safari ni a tu
perfil de Chrome de escritorio, porque esos viven en el Mac.
Todo lo que sale pasa por el Mac
Supongamos que un agente sí reúne algo que valga la pena robar en la carpeta de proyecto que compartiste. Tiene una sola salida. El switch virtual de la VM desvía cada conexión web al proxy del Mac, y el invitado no puede desactivarlo.
- Con el nivel de trazado por defecto, cada petición se escribe en una traza cifrada en el Mac, con los intercambios con el modelo desglosados en las llamadas a herramientas y los comandos de shell que emitió el agente. El Trace Inspector muestra un POST a un host desconocido en el momento en que ocurre.
- El firewall de salida de la máquina, aplicado en el Mac, puede permitir solo los hosts que necesita el proyecto y descartar todo lo demás.
- Si la carga lleva una de las credenciales de sustitución, el proxy ve una credencial que se dirige a un host para el que no se emitió. Responde con un HTTP 451, pausa la VM y abre una alerta en el Mac: This environment may have been compromised.
El truco de IPC local necesita un proceso del Mac
CVE-2026-100754 dependía de que “código sin privilegios que ya se ejecuta en un Mac” alcanzara el canal de confianza local de la app de ChatGPT. En un portátil, la fuente más activa de código que se ejecuta como tú suele ser el agente de código: las dependencias que instala, los scripts que ejecuta, las herramientas que descarga. En Bromure ese código se ejecuta en el invitado Linux. Los servicios XPC y los sockets Unix del Mac, y las apps de escritorio que hay detrás, viven en otro kernel. Un script postinstall malicioso en la VM no puede unirse a una cadena de procesos en el Mac.
Una máquina por trabajo
Las carpetas compartidas son donde decides cuánto ve el agente. Cada máquina de Bromure tiene su propia lista de carpetas, sus propias credenciales y su propio home, así que el hábito es fácil:
- Da a cada proyecto su propia máquina y comparte solo la carpeta de ese proyecto.
- Da a una máquina solo las credenciales que usa su proyecto. La máquina de pruebas donde ensayas nuevos servidores MCP y plugins de agente no recibe ninguna.
- Deja Prompt before write activado, el valor por defecto de las máquinas nuevas para GitHub, proveedores cloud, registros, Kubernetes y bases de datos. Los push y los borrados se detienen entonces ante un diálogo de macOS que muestra la operación exacta.
- No compartas nunca tu carpeta de inicio. El agente no la necesita.
Cada arranque de una máquina toma además un punto de control copy-on-write de su home, así que Rewind home… puede recuperar lo que un agente haya borrado ahí.
Ningún permiso de macOS que heredar
El agente es un proceso Linux en una VM. Nunca se ejecuta con el Acceso total al disco de tu terminal, y los datos de Mensajes, Mail y Safari no están en su disco.
Solo las carpetas que elegiste
Cada máquina ve su propio home y hasta ocho carpetas que compartiste por
nombre. El resto de tu Mac, ~/Library incluido, no está ahí.
Los dotfiles contienen falsos
Las credenciales de Git, cloud, registros y modelos son sustitutos. Las claves privadas SSH nunca entran en la VM. El proxy del Mac añade los valores reales en la red.
Cada salida queda registrada
El tráfico web pasa por el proxy del host: trazado, filtrado por el firewall de salida y detenido con la VM en pausa si un sustituto va hacia el host equivocado.
Dale al agente un ordenador propio
La nota de Apple es un fabricante de sistemas operativos diciendo a los desarrolladores que un permiso diseñado para software de copia de seguridad no pertenece a agentes autónomos. Apple tiene razón. Su solución es un aviso más claro, y el usuario sigue teniendo que acertar con cada app, en un Mac que guarda todo lo que tiene.
Bromure le da al agente un ordenador propio. Contiene el proyecto que compartiste y claves que solo funcionan cuando el proxy de tu Mac las cambia por las reales. Cuando llegue el nuevo diálogo de Apple, tu agente de código no estará entre las apps que lo muestren.