Investigadores de Aikido Security descubrieron una campaña maliciosa dirigida a desarrolladores que usan OpenAI Codex. El paquete de npm codexui-android, presentado como una interfaz web remota para OpenAI Codex y que alcanzaba más de 29 000 descargas semanales, estuvo extrayendo de forma encubierta, durante aproximadamente un mes, tokens de autenticación y enviándolos a un servidor controlado por los atacantes. Además del paquete npm, se detectó el mismo esquema de exfiltración en aplicaciones Android de Google Play con una audiencia acumulada de más de 60 000 instalaciones. Cualquiera que haya utilizado este paquete o las aplicaciones relacionadas debe revocar inmediatamente sus tokens de OpenAI.
Mecanismo de ataque: la confianza como arma
La característica clave de esta campaña es que no se basa en técnicas de typosquatting ni en paquetes trampa desechables. Según los investigadores, codexui-android era un paquete funcional, sometido a un desarrollo activo, con un repositorio limpio en GitHub. El código malicioso se introdujo aproximadamente un mes después de la primera publicación del paquete en el registro de npm, presumiblemente para generar primero la confianza de los usuarios y ampliar su alcance.
A partir de la versión 0.1.82, el paquete incluía código que leía el contenido del archivo ~/.codex/auth.json y lo enviaba al servidor remoto sentry.anyclaw[.]store/startlog, camuflado como la legítima plataforma de monitorización Sentry. Entre los datos robados se encontraban:
- access_token
- refresh_token
- id_token
- identificador de cuenta (account ID)
Tal como advierte OpenAI en su documentación, cuando se utiliza almacenamiento basado en archivos, el archivo ~/.codex/auth.json contiene los tokens de acceso en texto claro y debe tratarse como una contraseña. Cada vez que el usuario inicia sesión en la aplicación Codex, la CLI o una extensión de IDE mediante ChatGPT o una API key, las credenciales se almacenan en caché localmente en este archivo.
El investigador de Aikido Charlie Eriksen subrayó que, según su estimación, el refresh_token robado no tendría fecha de caducidad, lo que potencialmente otorgaría al atacante acceso indefinido a todas las capacidades de la cuenta comprometida. Cabe matizar que esta afirmación no está respaldada por la documentación oficial de OpenAI.
Vector a través de aplicaciones Android
El paquete de npm no fue el único canal de distribución. Según Aikido, la aplicación Android OpenClaw Codex Claude AI Agent (nombre de paquete: gptos.intelligence.assistant), publicada por un desarrollador bajo el nombre BrutalStrike, ejecutaba el paquete npm dentro de un entorno aislado PRoot y enviaba las credenciales de Codex al mismo endpoint.
Técnicamente, la aplicación, de unos 26 MB, extraía en el primer inicio un entorno de usuario Linux basado en Termux en el almacenamiento privado y lanzaba Node.js a través de PRoot. La versión del paquete npm no estaba fijada: la aplicación descargaba la versión publicada en ese momento, lo que incorporó automáticamente el código malicioso tras su introducción en la versión 0.1.82.
Según los investigadores, esta aplicación superó las 50 000 instalaciones. Se detectó una cadena de exfiltración similar en una segunda aplicación del mismo desarrollador —Codex (nombre de paquete: codex.app)— con más de 10 000 descargas. Se informa de que las otras tres aplicaciones de BrutalStrike no contenían funcionalidad maliciosa.
Reacción del autor y rastro digital
Al contactar con el autor del paquete a través de GitHub, su comportamiento generó dudas adicionales. Inicialmente afirmó haber perdido el acceso a su cuenta de npm, para después editar la respuesta indicando que estaba “llevando a cabo una investigación interna” y que “había empezado a eliminar la funcionalidad afectada y los datos relacionados”. El autor sostuvo que las credenciales no se habían transferido a terceros, pero no explicó por qué el código para acceder a los tokens de Codex se había introducido únicamente en la build de npm del paquete.
Resulta llamativo que el perfil del autor en la red social X incluya el dominio anyclaw[.]store, el mismo al que se enviaban los datos robados. Según los registros WHOIS, el dominio se registró tan solo dos días después de la publicación de la primera versión del paquete npm (0.1.72), lo que apunta a una planificación anticipada de la infraestructura.
Indicadores de compromiso
- Dominio de exfiltración:
sentry.anyclaw[.]store - Endpoint:
sentry.anyclaw[.]store/startlog - Dominio de infraestructura:
anyclaw[.]store - Paquete npm afectado: codexui-android (a partir de la versión 0.1.82)
- Aplicaciones Android afectadas:
gptos.intelligence.assistant,codex.app
Recomendaciones
- Elimine de inmediato el paquete codexui-android de todos los proyectos y revise las dependencias para comprobar si está presente.
- Revoque y vuelva a emitir todos los tokens de OpenAI. Elimine el archivo
~/.codex/auth.jsony vuelva a autenticarse tras la limpieza. - Revise los registros de red en busca de conexiones a los dominios
anyclaw.storeysentry.anyclaw.store. - Elimine las aplicaciones Android OpenClaw Codex Claude AI Agent y Codex del desarrollador BrutalStrike, si estaban instaladas.
- Realice una auditoría de la actividad de las cuentas de OpenAI en busca de acciones no autorizadas durante el último mes.
- Valore migrar el almacenamiento de credenciales de Codex al sistema de keychain de la OS en lugar de mantenerlas en archivos en texto claro.
Este incidente demuestra una táctica madura de ataque a la cadena de suministro: un paquete funcional, un periodo inicial de acumulación de confianza, una inyección maliciosa limitada a la build de npm con un repositorio limpio en GitHub y una distribución paralela a través de aplicaciones móviles. Los desarrolladores que utilicen herramientas basadas en IA deberían aplicarles los mismos principios de mínima confianza que a cualquier código de terceros: fijar las versiones de las dependencias, comprobar las diferencias entre el código fuente del repositorio y el paquete publicado, y almacenar los tokens de autenticación exclusivamente en almacenes protegidos del sistema operativo.