Ataque con AGENTS.md en Downloads: revisa Codex y Claude Code

Revisa los archivos de instrucciones descargados antes de iniciar un agente de programación. Comprueba la configuración de usuario de Codex, la prioridad de los ajustes de Claude Code y los indicios de instalación de function-color. Distingue el incidente observado de las pruebas de laboratorio, revoca las credenciales afectadas y verifica tu gateway sin tratar los ajustes de usuario como una barrera de seguridad.

Índice
Ataque con AGENTS.md en Downloads: revisa Codex y Claude Code

No inicies Codex ni Claude Code en ~/Downloads ni en otra carpeta que acumule archivos sin revisar. Para comprobar tu exposición al ataque mediante AGENTS.md en Downloads, inspecciona las instrucciones y la configuración antes de reiniciar cualquiera de las herramientas. Si encuentras un endpoint no autorizado o indicios de instalación de un paquete malicioso, detén las sesiones afectadas y revoca las credenciales correspondientes.

Este procedimiento cubre las instalaciones locales de Codex y Claude Code, con la configuración verificada a fecha de 2026-10-28. Obtendrás una lista de archivos que revisar, una revisión de la configuración y criterios para decidir si necesitas responder a un incidente.

Qué demostró el ataque a través de Downloads

El ataque combina instrucciones no fiables con cambios en la configuración del propio agente. Markdown no se ejecuta por sí solo; el agente aporta las herramientas.

El informe del 22 de octubre de Forever Security describe un intento de instalación bloqueado que desencadenó el archivo ~/Downloads/AGENTS.md de un cliente. Sigue sin saberse cómo llegó ese archivo al equipo.

  • Reproducción en Codex: las instrucciones registraron un servidor de herramientas Model Context Protocol (MCP) en ~/.codex/config.toml. Usaban launchctl y npm para instalar function-color. Un proceso hijo ejecutó codex exec con --dangerously-bypass-approvals-and-sandbox.
  • Reproducción en Claude Code: CLAUDE.md indujo un cambio de ANTHROPIC_BASE_URL en .claude/settings.json. Los investigadores capturaron un token OAuth, que autentica la cuenta conectada, y devolvieron llamadas falsificadas a Bash. En ocasiones, un subagente abrió la conexión redirigida dentro de la misma sesión. Según el informe, la escritura de esa configuración requirió aprobación humana.

El éxito registrado superó el 90% en Codex y rondó el 50% para el cambio de configuración de Claude. La ejecución dentro de la misma sesión de Claude funcionó aproximadamente en una quinta parte de los intentos. La mayoría de las pruebas usó una calculadora como sustituto; el paquete real se ejecutó una vez en una máquina virtual aislada. Son resultados de las pruebas de los investigadores, no estimaciones de tu riesgo personal.

El comportamiento del navegador también depende de su configuración. La documentación de Chrome describe un destino de descarga configurable, avisos opcionales para elegir dónde guardar archivos y notificaciones de descarga. Descargar un archivo y comprometer un agente son sucesos distintos.

Las protecciones actuales importan. Codex 0.165.0 omite las instrucciones de los proyectos marcados explícitamente como no fiables. OpenAI también documenta las rutas .codex protegidas por su política predeterminada workspace-write. Mantén esas protecciones activadas: una carpeta revisada anteriormente puede recibir contenido nuevo sin revisar.

Haz una primera revisión de unos cinco minutos

Inspecciona los archivos desde una terminal normal y un editor de texto, con los agentes detenidos. Unos cinco minutos es una estimación para un espacio de trabajo que conoces; investigar hallazgos y reparar un equipo lleva más tiempo.

1. Localiza los archivos de instrucciones antes de abrir un agente

Empieza por el directorio de trabajo real y el destino de las descargas. En Bash para macOS o Linux, este inventario muestra solo nombres de archivo si tienes instalado ripgrep, rg:

pwd -P
rg --files --hidden --no-ignore \
  -g 'AGENTS.md' -g 'AGENTS.override.md' \
  -g 'CLAUDE.md' -g 'CLAUDE.local.md' \
  -g '**/.claude/settings*.json' \
  -g '**/.codex/config.toml' -g '.mcp.json' \
  -g '!**/.git/**' -g '!**/node_modules/**' \
  "$HOME/Downloads"

Sustituye la última ruta si tu navegador descarga en otro lugar. Repite la búsqueda en el directorio del proyecto descargado o clonado. Si no tienes rg, busca esos nombres en un administrador de archivos con los archivos ocultos visibles.

El comando enumera rutas sin iniciar un agente ni mostrar valores de configuración. Resuelve los errores de permisos o directorios inexistentes antes de interpretar un resultado vacío. No inspecciona archivos comprimidos, no sigue enlaces simbólicos anidados ni demuestra que el equipo esté limpio.

Abre los archivos encontrados como texto sin formato. Busca instrucciones para reescribir ajustes del agente, cambiar proveedores, instalar herramientas inesperadas o desactivar aprobaciones. Revisa por separado los archivos de instrucciones importados o enlazados.

Inspecciona también las instrucciones globales del directorio de configuración de Codex y ~/.claude/CLAUDE.md. Codex busca las instrucciones del proyecto desde la raíz detectada hasta el directorio de trabajo. Si no detecta una raíz, solo comprueba el directorio actual. Incluye AGENTS.override.md y cualquier nombre de archivo alternativo configurado.

Claude Code también carga archivos de instrucciones de directorios superiores. Por tanto, entrar en una subcarpeta de Downloads no garantiza que deje de leer esas instrucciones. Mantén el espacio de trabajo revisado fuera del árbol de descargas.

2. Revisa la configuración de Codex que afecta a varios proyectos

Abre ~/.codex/config.toml antes de iniciar Codex. Es configuración de usuario, por lo que un cambio puede afectar a otros proyectos de ese usuario. Si has definido CODEX_HOME, inspecciona el archivo config.toml de ese directorio.

Revisa también el archivo de perfil seleccionado al iniciar Codex y los archivos .codex/config.toml de proyecto que correspondan. La guía de configuración de OpenAI explica qué capas se cargan. Su guía avanzada describe los directorios de configuración y los perfiles.

AjusteQué comprobar
[mcp_servers.<name>]Reconoce el servidor y revisa por completo su command, args, cwd, env o url remota.
chatgpt_base_urlConfirma que cualquier cambio de la dirección del servicio ChatGPT fue intencionado.
openai_base_url, model_provider y model_providers.<id>.base_urlComprueba que la ruta de la API corresponde al proveedor que aprobaste.
projects.<path>.trust_levelRevisa las decisiones de confianza guardadas, sobre todo para carpetas amplias como Downloads.

MCP conecta los agentes con herramientas. La configuración de un servidor MCP local puede iniciar un proceso. Comprueba sus argumentos y su destino, además del nombre que lo identifica.

Investiga los servidores que no reconozcas. Un nombre genérico o la presencia de npm, npx o launchctl no bastan para demostrar que hay malware.

A fecha de 2026-10-28, la referencia de configuración de Codex indica que los ajustes locales del proyecto no pueden sobrescribir chatgpt_base_url ni las claves de enrutamiento de proveedores. Esa restricción no revierte un cambio no autorizado en la configuración de usuario.

3. Revisa los ajustes de Claude Code y su prioridad

Comprueba todas las fuentes de configuración que pueden aportar el endpoint. Para una sesión iniciada en la raíz de un proyecto, revisa estos archivos:

ArchivoÁmbito
~/.claude/settings.jsonTus ajustes para todos los proyectos.
.claude/settings.jsonAjustes compartidos de este proyecto.
.claude/settings.local.jsonTus ajustes locales para este proyecto.

Si usas CLAUDE_CONFIG_DIR, busca allí el archivo de configuración de usuario. En un equipo de empresa, pregunta al administrador por los ajustes administrados.

Inspecciona env.ANTHROPIC_BASE_URL, HTTP_PROXY y HTTPS_PROXY. Comprueba qué variables de autenticación están configuradas sin copiar sus valores secretos en chats ni registros. Revisa también los hooks inesperados y los cambios en las reglas de permisos.

Anthropic documenta ANTHROPIC_BASE_URL como una variable que sustituye el endpoint de la API. Su presencia es normal si usas un gateway aprobado. Investiga cualquier nombre de host desconocido, cambio sin explicación o endpoint indicado por instrucciones descargadas.

La prioridad de los ajustes de Claude Code sitúa los ajustes locales del proyecto por encima de los compartidos. Ambos tienen prioridad sobre los ajustes de usuario. En la mayoría de las sesiones, un valor env de un archivo de ajustes también sustituye la misma variable heredada del shell. Por tanto, un endpoint en la configuración de usuario o exportado desde el shell no queda protegido contra cambios por ese hecho.

Si encuentras integraciones MCP inesperadas, inspecciona también .mcp.json. La guía de seguridad de MCP de Anthropic explica que otros ámbitos y plugins pueden añadir servidores fuera de ese archivo.

4. Busca indicios de instalación

Busca en los metadatos de paquetes y los registros si un agente se ejecutó en un directorio sospechoso. Desde ese directorio, este comando de Bash muestra solo los nombres de los archivos que coinciden:

rg -l --hidden --no-ignore -F 'function-color' \
  -g 'package.json' -g '*lock*' \
  -g 'npm-shrinkwrap.json' -g '*.log' \
  -g '!**/.git/**' \
  .

Revisa las coincidencias localmente. Inspecciona también /tmp/ptools y los registros de instalación de npm pertinentes, si existen. Una búsqueda limitada al proyecto puede omitir instalaciones en otros lugares.

El análisis del paquete realizado por Checkmarx identifica las versiones 1.0.0 y 1.7.3 de function-color como envoltorios maliciosos de function-flag. El descargador analizado está dirigido a Windows. No deduzcas que se ejecutó una carga maliciosa concreta solo porque una configuración de macOS menciona el paquete.

Una mención en un artículo es distinta de una dependencia instalada o un registro de instalación. Un archivo de bloqueo de dependencias, por sí solo, no demuestra que se ejecutara un script de instalación. Los indicios de instalación justifican tratar el equipo como potencialmente comprometido hasta investigarlo. No instales ni importes el paquete para probarlo. Una búsqueda sin resultados no descarta cargas maliciosas renombradas ni pruebas eliminadas.

Actúa según lo encontrado antes de volver a iniciar sesión

Revoca las credenciales expuestas desde un dispositivo fiable antes de reutilizar la configuración afectada. Sigue la opción que corresponda a tus indicios:

  • Instrucciones desconocidas, sin indicios de que se hayan usado: conserva el archivo para revisarlo y mantenlo fuera de las rutas donde el agente busca instrucciones. Inspecciona la configuración antes de decidir si hubo exposición de credenciales.
  • Un endpoint no autorizado que pudo recibir solicitudes autenticadas: considera que la credencial afectada pudo quedar expuesta. Revócala y revisa la actividad de la cuenta.
  • Indicios de que se ejecutó código de un paquete malicioso: aísla el equipo y avisa al equipo de seguridad. Conserva los archivos y registros pertinentes antes de limpiarlo. Borrar el archivo Markdown no elimina el código instalado ni invalida las credenciales robadas.

Para la autenticación de una suscripción de Claude, usa los controles de sesiones de la cuenta de Claude. En Configuración → Cuenta, revoca las sesiones afectadas o cierra todas las sesiones de la cuenta. Si los tokens de Claude Code aparecen en Configuración → Claude Code, elimina allí la autorización afectada. Anthropic indica que el cierre de todas las sesiones incluye los tokens de Claude Code y setup-token.

Las claves API requieren una acción aparte. Las instrucciones de Anthropic para claves comprometidas indican que debes eliminar la clave afectada y crear otra. Cerrar las sesiones de la cuenta no revoca las claves API.

Para el acceso a OpenAI, sigue sus instrucciones sobre cuentas comprometidas: cierra las sesiones, elimina las claves API expuestas, revisa la actividad y contacta con soporte. No supongas que borrar un archivo local de credenciales invalida una sesión remota robada.

Restaura una configuración revisada y elimina las integraciones de inicio no autorizadas antes de autenticarte de nuevo en el equipo. Si no puedes determinar qué se ejecutó, no uses el equipo para el desarrollo habitual hasta investigarlo.

Mantén los gateways legítimos bajo tu control

Elige tú la dirección del gateway y verifica de dónde procede ese ajuste. Para uso personal, guarda el endpoint aprobado en tu configuración de usuario o en un entorno de shell que controles. Los equipos con administración centralizada deben seguir su vía de despliegue aprobada.

Trata cualquier endpoint aportado por un proyecto como un cambio de configuración que debes revisar. Puede ser una configuración legítima del equipo, pero no merece aprobación solo por presentarse como un gateway interno.

Por ejemplo, las instrucciones de BetterToken para Claude Code usan https://bettertoken.ai, sin /v1, y tu propia clave API de BetterToken. Ese acceso a la API es independiente de una suscripción de Claude. Usa la credencial del propio gateway; no proporciones un token OAuth de una suscripción.

Si configuras una integración de Codex de forma deliberada, compara el bloque del proveedor con la guía de proveedores personalizados de Codex. No reutilices chatgpt_base_url como ajuste genérico de la API del modelo.

Después de revisar la configuración o completar la recuperación, puedes comprobar la conectividad de Claude Code excluyendo ajustes y personalizaciones del proyecto. Ejecuta lo siguiente desde un directorio de proyecto que ya hayas revisado:

claude --safe-mode --setting-sources user --permission-mode default

La referencia de la CLI documenta estas opciones. El modo seguro omite personalizaciones como archivos de instrucciones, plugins y servidores MCP. La autenticación y los permisos siguen funcionando; tanto la configuración de usuario como las políticas administradas deben ser fiables. El modo de permisos default lleva la etiqueta Manual.

Si tu cliente rechaza una opción, consulta claude --help y las instrucciones oficiales de actualización antes de continuar.

Usa /status para comprobar las fuentes de ajustes cargadas. Después envía un prompt breve, como Reply with OK. Do not use tools. Deberías recibir una respuesta en la terminal. Si el proveedor ofrece registros, compara la hora de la solicitud para confirmar la ruta de esa petición. Esta prueba cuenta como uso normal del modelo.

Que un modelo diga cómo se llama no verifica el endpoint. Si la ruta sigue sin estar clara, consulta las comprobaciones del proveedor activo de Claude Code. Detente si la configuración cambia de forma inesperada. Esta comprobación de conectividad no demuestra que el equipo esté limpio.

Separa las descargas del trabajo diario con agentes

Usa un directorio de proyecto revisado fuera del destino de descargas del navegador. Si has descargado un CSV, revísalo y copia únicamente el archivo necesario a ese espacio de trabajo. Mover una carpeta completa sin revisar también mueve sus archivos de instrucciones.

En Chrome, abre Configuración → Descargas y activa Preguntar dónde se guardará cada archivo antes de descargarlo. Esto añade una decisión antes de guardar el archivo; no sustituye la revisión de los archivos ya descargados.

Mantén activadas las restricciones del entorno aislado y los controles de aprobación. La documentación de seguridad de Codex distingue el aislamiento de comandos de las conexiones MCP y del tráfico de autenticación del cliente. Un entorno de comandos de solo lectura no garantiza que sea seguro inicializar una configuración sin revisar.

Repite esta revisión después de clonar un repositorio, extraer un archivo comprimido o cambiar los ajustes del agente. Si una tarea exige ejecutar código no fiable, usa un entorno aislado sin tus credenciales habituales de desarrollo.

¿Quieres optimizar tu flujo de trabajo con LLM?

Conecta modelos mediante una API, gestiona claves y controla el gasto en IA.

Empezar gratis