Anthropic Claude Code (agente de programación por línea de comandos) · Credenciales en claro expuestas en GitHub vía permisos
Una opción de comodidad de Claude Code puede guardar comandos con contraseñas incrustadas en un archivo del proyecto que algunos desarrolladores acaban publicando en GitHub.
La empresa de seguridad Apiiro sostiene que la opción «Sí, y no volver a preguntar» de Claude Code —el agente de programación de Anthropic— puede almacenar comandos con credenciales en claro dentro del archivo .claude/settings.local.json del proyecto. Rastreando repositorios públicos de GitHub, Apiiro dice haber encontrado 1.122 copias de ese archivo con secretos reales (contraseñas de bases de datos, claves de API, tokens). No es, en rigor, una vulnerabilidad explotable a distancia ni tiene CVE asignado: es un patrón de exposición de información que combina el comportamiento por defecto de la herramienta con malas prácticas de los desarrolladores. Anthropic afirma que ese archivo se marca para ignorar automáticamente cuando Claude lo crea, por lo que los casos detectados serían, en su versión, archivos creados o subidos a mano.
Materias: Inteligencia artificial, Desarrollo de software, Fuga de datos, Credenciales y contraseñas, GitHub, DevSecOps, Protección de datos (RGPD)
Guardar una contraseña para no tener que teclearla otra vez es una comodidad cotidiana. Pero cuando quien la guarda es un agente de inteligencia artificial que programa por ti, esa contraseña puede terminar escrita —en texto plano— en un archivo del proyecto que, con un descuido, acaba publicado en GitHub a la vista de cualquiera. Es lo que, según la firma de seguridad Apiiro, está ocurriendo con una opción de Claude Code, el asistente de programación de Anthropic.
Descripción
Qué es. Claude Code es un «agente de programación» de Anthropic: un asistente de inteligencia artificial que se ejecuta en la línea de comandos (la consola de texto del ordenador del desarrollador) y que puede leer, escribir y ejecutar código y comandos del sistema. Por seguridad, antes de ejecutar un comando pide permiso al usuario. Una de las respuestas posibles es «Sí, y no volver a preguntar» (en inglés, Yes, and don't ask again), pensada para no repetir la misma pregunta una y otra vez.
El problema. Al elegir esa opción, Claude Code guarda una regla de permiso con el comando aprobado escrito literalmente. Si ese comando incluía una credencial —por ejemplo una cadena de conexión a una base de datos o una variable del tipo PGPASSWORD=...—, la contraseña queda almacenada en claro dentro del archivo de configuración del proyecto, llamado .claude/settings.local.json. Ese archivo está pensado para quedarse en el equipo del desarrollador, pero nada en su contenido lo marca como secreto, de modo que puede terminar incluido («commiteado») en el repositorio de código y, si el repositorio es público, quedar expuesto.
A quién afecta. A desarrolladores y organizaciones que usan Claude Code y que suben a un repositorio público (de GitHub u otro servicio) el archivo de permisos del proyecto. Según Apiiro, el comportamiento es de la propia herramienta y no del modelo de lenguaje: dice haberlo reproducido con los modelos Opus 5.5 y Fable 5.1. No se indican «versiones afectadas» concretas de Claude Code ni una «versión corregida», porque a la fecha del informe no constaba un parche específico.
Clasificación. No hay CVE ni CWE asignados de forma oficial. Conceptualmente, el caso encaja en la familia de exposición de información sensible y almacenamiento de credenciales en texto claro (en la taxonomía CWE, próximo a CWE-312, «almacenamiento en claro de información sensible», y CWE-200, «exposición de información»). Conviene subrayar que se trata de una caracterización descriptiva, no de un identificador asignado por una autoridad.
Mecánica
Cómo se produce la exposición
El mecanismo descrito por Apiiro tiene varios pasos:
- Aprobación permanente. El desarrollador acepta un comando con «no volver a preguntar». Claude Code guarda ese comando textualmente como regla de permiso en
.claude/settings.local.json, incluida cualquier credencial que el comando contuviera. - El archivo se publica. El archivo acaba en el repositorio. Apiiro afirma que en una parte de los casos fue el propio agente quien lo subió: dice haber rastreado 539 de 1.105 repositorios con secretos reales en los que un «commit» coescrito por Claude modificó ese archivo. Anthropic matiza este punto (ver más abajo).
- Persistencia e propagación. Borrar el archivo no basta: versiones anteriores conservadas en el historial de Git mantendrían, según Apiiro, 734 secretos reales en 509 repositorios, y 211 «forks» (copias) de 74 repositorios arrastrarían los mismos secretos.
Los números de Apiiro
Entre el 1 y el 3 de noviembre de 2026, usando búsquedas de solo lectura en GitHub, Apiiro dice haber analizado 104.185 copias públicas del archivo .claude/settings.local.json (en 103.617 repositorios) y haber clasificado 1.122 (un 1,1 %) como portadoras de al menos un secreto real, con 1.379 secretos distintos. Sumando otras fuentes (historial del archivo, el archivo compartido settings.json y transcripciones de agentes), eleva la cifra a 2.539 secretos reales en 1.994 repositorios públicos de 63 organizaciones.
Por tipos, menciona 379 contraseñas de bases de datos, 122 claves de rol de servicio y 103 tokens de cuenta de Supabase, 43 accesos SSH, 42 tokens de GitHub/GitLab/npm, 23 claves de AWS y 6 claves privadas. Un dato relevante para la detección: de los 1.122 archivos, los escáneres de secretos gitleaks detectaron 564 y TruffleHog 643, y 215 no fueron detectados por ninguno de los dos.
Respuesta del creador
Respuesta de Anthropic
Anthropic no ha publicado un aviso formal. En el debate público del caso (Hacker News), un miembro del equipo de Claude Code, identificado como Boris, respondió con varios matices importantes para valorar el alcance:
- Sostiene que
.claude/settings.local.json«está pensado para quedarse en local; no es un archivo que debas incluir en el control de versiones. Lo añadimos automáticamente a gitignore cuando Claude crea el archivo» —es decir, en su versión, los archivos detectados habrían sido creados o subidos manualmente—. (gitignorees la lista de archivos que Git excluye de las subidas.) - Recomienda usar el «modo automático» (auto mode), activado por defecto, que considera «significativamente más seguro» que la aprobación manual de comandos.
- Reconoce que Claude Code «históricamente no ha hecho depuración de secretos» y afirma que están «estudiando qué pueden hacer para evitar esto»; insiste en que, con cualquier agente, conviene tener activado el escaneo de secretos.
Hay, por tanto, una discrepancia de fondo: Apiiro presenta el comportamiento como un fallo de la herramienta que llega a subir el archivo por sí misma, mientras Anthropic lo enmarca sobre todo como un problema de prácticas del usuario (archivos creados o subidos a mano pese a estar normalmente excluidos). Apiiro también señala que varias incidencias abiertas en el repositorio público de Claude Code desde agosto de 2025 (números #5544, #11982, #13106) no recibieron respuesta y se cerraron por inactividad o duplicidad.
Autoridades
No consta, a la fecha de este aviso, pronunciamiento de CISA (no figura en su catálogo de vulnerabilidades explotadas, CISA KEV), de NVD/MITRE (no hay CVE) ni de INCIBE-CERT sobre este caso concreto.
Parches y mitigaciones
Estado del parche
A la fecha del informe (publicado el 5 de noviembre de 2026) no constaba un parche específico de Anthropic para este comportamiento, sino la declaración de que están estudiando medidas de prevención. No se han publicado «versiones afectadas» ni «versión corregida» concretas.
Qué hacer hoy
Si usas Claude Code (desarrolladores):
- Comprueba y retira el archivo del control de versiones:
git rm --cached .claude/settings.local.jsony añádelo al.gitignoredel propio repositorio (no solo a la exclusión global de tu equipo, que no viaja con el proyecto ni cubre clones y «forks»). - Rota de inmediato toda credencial que ese archivo haya podido contener (contraseñas, claves de API, tokens): cámbialas, no basta con borrarlas del archivo, porque pueden seguir en el historial de Git y en copias.
- Elimina las reglas de permiso que incluyan secretos y revisa el historial del repositorio.
- Evita incrustar secretos en comandos: usa referencias a variables de entorno (
$VARIABLE) en lugar de valores literales, y aprueba patrones de comando (por ejemploBash(npm run:*)) en vez de comandos concretos con la credencial dentro. - Considera el modo automático que recomienda Anthropic frente a la aprobación manual con «no volver a preguntar».
Para equipos de seguridad:
- Trata las carpetas de agentes (
.claude/,.cursor/,.gemini/,.specstory/) como potenciales portadoras de secretos, igual que un.env. - Activa escaneo de secretos en «pre-commit» y en integración continua (CI), incluyendo el historial, y con reglas para contraseñas incrustadas (
PGPASSWORD=,sshpass -p,mysql -p). Recuerda que los escáneres estándar no detectaron 215 de los 1.122 archivos. - Añade estas rutas a las plantillas de
.gitignorede la organización.
Nota jurídica (RGPD)
Si entre las credenciales expuestas hay accesos a sistemas con datos personales, la exposición puede constituir una violación de seguridad de datos. En tal caso aplican los artículos 33 y 34 del RGPD: valoración del riesgo, notificación a la autoridad de control (en España, la AEPD) en un plazo de 72 horas cuando proceda, y comunicación a los afectados si el riesgo es alto. La rotación de credenciales y el registro de la incidencia forman parte de la diligencia debida exigible.
Fuentes
- Apiiro — Coding Agents Are Leaking Your Secrets to GitHub (informe original)
- Hacker News — discusión del informe, con respuesta del equipo de Claude Code
- Cyber Security News — Claude Code's "Yes, and Don't Ask Again" Option Can Leak Passwords and API Keys to GitHub
- Let's Data Science — Apiiro finds Claude Code approvals leaking 2,539 secrets on GitHub
- iTWire — Claude Code approval files found exposing company secrets on GitHub, says Apiiro
- DEV Community — Claude Code's 'Don't Ask Again' Saved Secrets in 1,122 Public Files. 215 Beat Both Scanners