Seguridad

Última actualización: 20 de octubre de 2026

Se te pide entregar a una app de código cerrado un inicio de sesión OAuth y, para las cifras de coste, una clave de API de administrador. Es razonable dudar. Esta página es el registro que de otro modo solo verías después de instalarla: qué se examinó, qué se encontró, qué se corrigió y qué se dejó deliberadamente como estaba.

La mayoría de la gente nunca introduce una clave

La pregunta razonable sobre una app gratuita de código cerrado es qué quiere de ti a cambio. Así que, lo primero: para las dos suscripciones por las que viene la mayoría, Claude y ChatGPT, simplemente inicias sesión. Funciona con OAuth, en las propias páginas de inicio de sesión de los proveedores, y la app nunca ve una contraseña. No se crea ninguna clave de administrador y no se pega nada en ningún sitio.

Cada tarjeta de API es opcional y se queda vacía hasta que decidas otra cosa. Instálala, inicia sesión, listo: para la mayoría, la cuestión de la clave de administrador ni siquiera se plantea. Solo empieza a importar si además quieres ver lo que te cuestan las API, y de eso trata el resto de esta página.

¿Por qué confiar en una app que no puedes leer?

Existen herramientas gratuitas de código abierto, y su argumento más fuerte es genuino: puedes leer lo que hace un programa antes de darle una clave de administrador. Esta app no puede ofrecerlo. Paga en otra moneda: comodidad y salvaguardas de la plataforma, no verificabilidad. El sandbox lo impone macOS, no lo promete un README; llega firmada y notarizada con un clic; y las correcciones de seguridad llegan a todos mediante actualizaciones automáticas, no solo a quienes vigilan una página de versiones. Eso vale para las ediciones del App Store en Mac, iPhone y Watch; la versión de Windows no está en ninguna tienda, así que allí no hay sandbox, ni firma, ni actualización automática.

✓ Y la verdadera respuesta a la pregunta de la confianza: el registro de seguridad.

Un código cerrado no tiene por qué significar «confía en mí». El registro de seguridad documenta cuatro rondas de revisión con sus hallazgos concretos: qué se examinó, qué apareció, qué se corrigió y qué se dejó sin hacer a propósito. No sustituye a leer el código; es lo más honesto que un código cerrado puede poner sobre la mesa.

Y si prefieres juzgar el trabajo antes que las afirmaciones sobre él: los defectos incómodos los dejo por escrito en las notas (en inglés): qué se rompió, qué lo causó de verdad y qué hice al respecto.

Qué es esta revisión y qué no es

Es una revisión de marco documentada y asistida por un modelo, realizada con Claude Fable 5 en cuatro fechas, cada una con un informe escrito. No es una auditoría externa. No se encargó a ninguna empresa independiente y nadie ajeno a este proyecto ha leído el código. Si ese es tu listón, esta app no lo supera, y ninguna palabra de aquí lo cambiará.

Lo que sí te da la revisión es un relato concreto y comprobable, no una insignia. Cada hallazgo de abajo nombra la clase de defecto y lo que se hizo al respecto.

Qué versión se revisó

La última revisión completa se hizo el 10 de agosto de 2026 sobre el código que se publicó como versión 5.0. Hoy (22 de octubre de 2026) las versiones actuales son Mac 7.8 en el Mac App Store, iPhone, iPad y Apple Watch 2.19 y Windows 1.11.0, una descarga de aicockpit.info.

Añadido desde entonces y, por tanto, no cubierto por una revisión formal: las tarjetas de OpenRouter y Grok, la segunda cuenta de Claude, el modo demo, el asistente de configuración, las tarjetas que se reordenan arrastrando, la línea del total mensual, la petición de valoración, GitHub Copilot, la consulta en directo de ChatGPT, el indicador de interrupciones y la propina. Más reciente aún: el estado opcional para el terminal, las cifras de Claude que pueden venir de la línea de estado de Claude Code mediante un pequeño script local (desde la 7.7), la tarjeta de sesiones que lee los archivos de sesión locales de Claude Code y Codex (~/.claude, ~/.codex), el informe de diagnóstico y la edición para Windows con sus claves en el Administrador de credenciales de Windows. El endurecimiento que produjeron las revisiones (sin redirecciones, credenciales solo en el Llavero, análisis acotado de transcripciones ajenas) se aplica a todo ello, porque está en las capas compartidas. Pero lo honesto es decir que ninguna de estas versiones ha pasado por su propia revisión, y decir otra cosa echaría por tierra el sentido de esta página.

Validado frente a

Las rondas

Ronda 2.1: cinco hallazgos, todos corregidos

2 de agosto de 2026 · dos ejecuciones independientes

  • Inyección de comandos a través de la ruta de Codex (CWE-78): se eliminó AppleScript y la ruta ahora se escapa para el shell en un archivo .command.
  • Inyección de HTML en la página de retorno de OAuth: la salida ahora se escapa.
  • Condición de carrera en startup en el conector de Codex: el acceso pasó a la cola.
  • Valor de retorno ignorado de SecRandomCopyBytes: ahora lanza un error en lugar de producir en silencio una aleatoriedad débil.
  • Salto de ruta (path traversal) mediante un agentId tomado de una transcripción ajena: se filtran los caracteres.

Ronda 3.1: ningún hallazgo crítico ni alto, nueve puntos corregidos

4 de agosto de 2026 · dos ejecuciones independientes · 103 pruebas en verde

Se verificó que los cinco hallazgos de la 2.1 seguían cerrados.

  • Trampa de enteros en transcripciones ajenas (CWE-190). Una sola línea con "input_tokens": 1e300 cerraba la app al convertirla, y otra vez en cada reinicio, porque el archivo seguía en la ventana de actividad. Ahora los valores tienen tope y las sumas se saturan.
  • «Abrir carpeta del proyecto» lanzaba lo que nombrara la ruta (CWE-73). La ruta viene del campo cwd de una transcripción ajena; si apuntaba a un paquete de aplicación, el clic iniciaba un programa. Ahora solo lo muestra en el Finder, y solo si es una carpeta de verdad.
  • Redirecciones que llevaban la clave de administrador (CWE-522). Cada cliente usa una sesión que no sigue redirecciones HTTP, de modo que un 301 no puede llevarse una clave a otro servidor.
  • Condición de carrera al cerrar sesión (CWE-613). Una renovación de token en curso volvía a escribir en el Llavero los tokens ya borrados. Ahora descarta su resultado.
  • Condición de carrera de comprobar y asignar al iniciar el servicio de Codex (CWE-362): dos llamadas podían lanzar dos procesos hijos y dejar uno huérfano. Ahora es atómico.
  • Límites de recursos ausentes (CWE-400): 4 MB por pasada de lectura, 200 archivos de subagentes por sesión, un búfer de 4 MB en la conexión de Codex, 25 proyectos de OpenAI, y los registros de Codex se leen solo desde el final del archivo.
  • Enlaces simbólicos (CWE-59): el archivo del historial se abre con O_NOFOLLOW.
  • Marcas de tiempo veraces: los valores del registro de Codex llevan la hora del propio registro, no la de la consulta; el saldo de Kimi y la cuota del plan de coding tienen estados separados, de modo que uno no puede hacer pasar al otro por reciente.
  • Menos información expuesta: la vista previa de la clave muestra solo los últimos cuatro caracteres (el autotest está pensado para enviarse a alguien), y las entradas del Llavero se fijan como solo de este dispositivo.

Ronda 4.1: capa de visualización

9 de agosto de 2026 · dos ejecuciones: errores y mejoras, y después la seguridad de la capa de visualización

Los dos informes se incorporaron antes de la versión. Esta ronda no produjo una lista de hallazgos de seguridad aparte, y presentar una aquí sería relleno.

Ronda 4.2: ningún hallazgo crítico; dos importantes y tres menores corregidos

10 de agosto de 2026 · publicada como versión 5.0

  • Límite de día en UTC en el cálculo del saldo. Los intervalos de la API de costes empiezan a medianoche UTC, pero la fecha de corte se construía con el calendario local: al oeste de UTC, el día de la recarga quedaba fuera de la suma y la app mostraba demasiado saldo. Ahora calcula en UTC, con una prueba en ocho zonas horarias.
  • Int(…) sin límite sobre el tiempo restante en el icono de la barra de menús: un resets_at desmesurado del servidor podía cerrar la app. Limitado a ocho días.
  • Menores: Decimal(Double) distorsiona los importes, así que el importe de la recarga viaja como cadena de texto; se podía mostrar un subtotal obsoleto junto a un importe nuevo; se cerró una interfaz pública innecesariamente.

Se verificó que los hallazgos de la 2.1 a la 4.1 seguían cerrados.

Lo que deliberadamente no se hizo

Son decisiones de criterio, no descuidos. Se enumeran porque una revisión con la que no puedes discrepar no vale nada.

A qué se conecta la app del Mac

Esta es la lista completa, la misma que muestra la app en su página Acerca de. No se siguen redirecciones y el contenido de tus sesiones nunca se transmite.

DirecciónPara quéRequiere
claude.com, platform.claude.com Iniciar y cerrar sesión en ClaudeTu suscripción de Claude
api.anthropic.com Ventanas de uso de la suscripción y, por separado, el coste de la API Inicio de sesión o clave de administrador
auth.openai.com Iniciar sesión en tu cuenta de ChatGPT; la página pertenece a OpenAI Solo durante el inicio de sesión (edición del App Store)
chatgpt.com Cuotas y créditos de la cuenta de ChatGPT con sesión iniciada Inicio de sesión de ChatGPT
api.openai.comCoste de la API de OpenAI y uso de tokens Clave de administrador, opcional
api.moonshot.ai / api.moonshot.cn, api.kimi.com Saldo de Kimi y cuota del plan de codingClave de API, opcional
openrouter.aiCréditos, gasto y el límite de tu clave Una clave normal, opcional
management-api.x.aiSaldo de xAI y tope de gasto Clave de gestión, opcional
api.github.com El nombre de usuario de tu token y el informe de facturación de GitHub Copilot Token de GitHub, opcional
api.deepseek.com Saldo de DeepSeek por divisa, desde la versión 7.2 Clave de API, opcional
status.claude.com, status.openai.com, status.moonshot.cn, www.githubstatus.com Los avisos públicos de incidencias de los proveedores: no se envía nada, solo vuelve un archivo de estado público. GitHub para la tarjeta de Copilot, desde la versión 7.2 Solo mientras está configurada la tarjeta de ese proveedor
localhost:<port>/callback El viaje de vuelta de OAuth, solo por la interfaz de bucle local—
Archivos locales: ~/.claude, ~/.codex Tus sesiones de Claude Code y los límites de la suscripción de ChatGPT, leídos en tu Mac. Nada de ello sale del dispositivo. Acceso de solo lectura que concedes una vez

En esa lista no hay ningún servidor mío. Los límites de ChatGPT en el Mac vienen de tu instalación local de Codex o, si inicias sesión en ChatGPT dentro de la app, directamente de chatgpt.com.

La app del iPhone se conecta a los mismos servicios, DeepSeek incluido desde la 2.11 y www.githubstatus.com desde la 2.13; su propia tabla está en su política de privacidad. La edición para Windows también se conecta a los mismos servicios y, desde la 1.5, a una cosa más: una vez al día lee aicockpit.info/download/windows/latest.json (hasta la 1.10: consultaba api.github.com) para ver si hay una versión más reciente, sin credenciales y con nada más que la dirección IP y el identificador «AI-Cockpit». Esa comprobación se puede desactivar en Ajustes › Acerca de. Desde la 1.6 también lee www.githubstatus.com para la tarjeta de Copilot, y guarda todos sus datos en %APPDATA%\AI-Cockpit (hasta la 1.5: %APPDATA%\AI Dock).

No te fíes de mi palabra. Mira los cables.

El registro de seguridad nombra cada servidor al que la app se conecta, línea por línea, y dice para qué sirve cada uno. Esa lista no es un consuelo: es una afirmación en la que se me puede pillar.

Así que píllame. Pon un monitor de red delante de la app (Little Snitch, LuLu, el que ya uses y en el que confíes) y déjalo correr durante un día de trabajo normal. Todo lo que registre debería estar ya en esa lista. Si algo no lo está, debe saberse en público, y prefiero con mucho leerlo a no saberlo: el formulario de comentarios llega directamente a mí.

Por qué una clave de administrador y qué puede hacer

OpenAI y Anthropic ofrecen las cifras de coste y uso solo a través de sus puntos de acceso de administración; una clave de proyecto normal no devuelve nada ahí. Es una concesión real por tu parte, así que hay dos cosas que conviene saber:

Si no quieres hacer ese trato, deja esas dos tarjetas desactivadas. Cada tarjeta es opcional, y el resto del cockpit funciona sin ellas.

Cómo notificar una vulnerabilidad

Usa el formulario de contacto y di desde el principio que es un informe de seguridad. Deja una dirección en la que puedan localizarte y recibirás allí la respuesta, así que los detalles no tienen por qué ir en el formulario. Dame unos días antes de publicarlo: esto lo hace una sola persona, no un equipo de seguridad.