Qué revisar en tus repositorios antes de que tu contraseña de Claude Code aparezca en GitHub

Una investigación de Apiiro encontró contraseñas y llaves reales dentro de archivos públicos que Claude Code genera por default en GitHub.

1,122 repositorios ya tienen un secreto real adentro

Seguridad · Claude Code
Claude Code guardó tus contraseñas: qué revisar hoy en GitHub

Apiiro halló 1,122 archivos públicos con secretos reales. Borrar el archivo no alcanza: primero hay que rotar las llaves.

Claude CodeGitHubApiiro

Claude Code, el asistente de programación de Anthropic, guarda en un archivo del proyecto los comandos que aprobaste con la opción «sí, y no preguntes de nuevo», y si ese comando llevaba una contraseña, la guarda también, en texto plano. La firma de seguridad Apiiro revisó copias públicas de ese archivo en GitHub y encontró 1,122 con al menos un secreto real adentro, según su investigación publicada por The Hacker News el 7 de noviembre de 2026.

En resumen

Apiiro encontró 1,122 copias públicas en GitHub del archivo .claude/settings.local.json con al menos una contraseña o llave real, de 104,185 copias revisadas. En total suman 1,379 secretos, entre ellos 379 contraseñas de bases de datos y 23 llaves de Amazon Web Services. El problema sigue sin corregirse: Apiiro reprodujo el mismo comportamiento en los modelos más nuevos de Anthropic, Opus 5.5 y Fable 5.1.

  • 1,122 de 104,185 copias del archivo tenían secretos reales
  • Borrar el archivo no revoca las llaves ya expuestas
  • El comportamiento se repite en Opus 5.5 y Fable 5.1

Qué encontró Apiiro en Claude Code

Por default, Claude Code pregunta antes de ejecutar la mayoría de los comandos de terminal. Cuando el desarrollador elige «sí, y no preguntes de nuevo», la herramienta guarda una regla de permiso en el archivo .claude/settings.local.json, dentro del proyecto, según la propia documentación de permisos de Claude Code. Esa regla hace que los comandos que coincidan vuelvan a ejecutarse sin pedir confirmación en sesiones futuras.

El problema es qué guarda exactamente esa regla. A veces es un patrón general, como npm test *, pero otras veces es el comando exacto, completo. Cuando es el comando exacto, cualquier contraseña o token que el desarrollador haya escrito ahí queda guardado también, en texto plano, dentro del archivo.

Apiiro buscó copias públicas de ese archivo en GitHub y encontró 104,185, repartidas en 103,617 repositorios. De esas, 1,122 (poco más del 1%) tenían al menos un secreto real, y en conjunto suman 1,379 secretos distintos, repartidos entre 63 organizaciones, casi todas empresas de software. Los casos más graves que documentó Apiiro incluyen la llave de administrador en la nube de un proveedor de bases de datos, y la contraseña de administrador de una base de datos de expedientes médicos.

No es un ataque, es una opción aceptada sin pensarlo

La fuga no viene de que alguien haya hackeado nada. Viene de aceptar una sola vez la opción «no preguntes de nuevo» en un comando que ya llevaba una contraseña adentro. Apiiro reprodujo el mismo comportamiento con los modelos más recientes de Anthropic, Opus 5.5 y Fable 5.1, así que no es un caso aislado de una versión vieja.

Cómo llega una contraseña a ese archivo

Claude Code intenta mantener ese archivo fuera de git: la primera vez que lo escribe dentro de un repositorio, lo agrega a la exclusión global de git del usuario, según su propia documentación de configuración. Esa protección solo vive en la computadora de esa persona, y no hace nada por un archivo que ya quedó comentado antes. Además, Claude Code nunca agrega el archivo al .gitignore propio del proyecto, así que la protección no viaja cuando otro desarrollador clona el repositorio.

Apiiro rastreó 1,105 de esos repositorios y encontró que en 539 de ellos, un commit que lista a «Claude» como coautor fue el que modificó el archivo. Para los investigadores, esto quiere decir que es el propio asistente el que sube el archivo al repositorio, no siempre una persona.

Qué tipo de secretos quedaron expuestos

Tipo de secretoCantidad encontrada
Contraseñas de bases de datos379
Accesos SSH a servidores públicos43
Tokens de GitHub, GitLab y npm42
Llaves de Amazon Web Services (AWS)23

La magnitud del hallazgo

Copias del archivo revisadas104,185
Copias con un secreto real1,122
Secretos distintos encontrados1,379
Organizaciones afectadas63

Apiiro avisó esta semana a una de las empresas afectadas. Esa empresa confirmó que su llave seguía activa meses después de haber quedado expuesta en el repositorio público.

Por qué borrar el archivo no basta

Quitar el archivo del repositorio no deshace la fuga, porque las versiones anteriores siguen vivas en el historial de git y en cualquier fork. Apiiro encontró 734 secretos adicionales en versiones viejas de 509 repositorios, que ya no aparecen en la copia actual porque el archivo fue borrado en algún momento. Y 211 forks de 74 repositorios siguen cargando los mismos secretos que el repositorio original.

Rotar primero, limpiar después

El consejo de Apiiro es claro: antes de borrar nada, hay que cambiar cada contraseña, token y llave que ese archivo haya tenido alguna vez. Borrar el archivo sin rotar las credenciales deja la puerta abierta exactamente igual, solo que ahora es más difícil encontrarla.

Hasta el lunes revisado por Apiiro, todos los archivos con un secreto seguían en la rama principal de su repositorio, y en la mitad de esos casos llevaban ahí al menos 217 días. Tampoco conviene confiar solo en los escáneres automáticos: al correr gitleaks y TruffleHog sobre los 1,122 archivos con secretos, gitleaks detectó 564 y TruffleHog 643, pero ninguno de los dos marcó 215 de ellos, porque una contraseña escrita después de PGPASSWORD=, sshpass -p o mysql -p se ve igual que cualquier palabra dentro de un comando normal.

Qué hacer hoy en tus repositorios

1

Busca el archivo en toda tu organización

Revisa cada repositorio en busca de .claude/settings.local.json y .claude/settings.json, y también el historial de git, aunque el archivo ya no esté en la versión actual.

2

Rota cada secreto antes de limpiar nada

Cambia toda contraseña, token o llave que esos archivos hayan contenido alguna vez. Esto va primero: borrar el archivo sin rotar las credenciales no revoca nada.

3

Deja de rastrear el archivo y revisa el tuyo

Quita el archivo del control de versiones, agrégalo al .gitignore del repositorio, y abre tu copia local para borrar cualquier regla que todavía tenga un secreto adentro.

Sacar el archivo del control de versiones
git rm --cached .claude/settings.local.json
echo ".claude/settings.local.json" >> .gitignore
git add .gitignore
git commit -m "Deja de rastrear settings.local.json"
  • Usa variables de un gestor de secretos, como $DB_URL, en vez de escribir la contraseña directo en el comando
  • Aprueba patrones generales, como Bash(npm run:*), en vez de un comando exacto con datos adentro
  • Trata las carpetas de agentes (.claude/, .cursor/, .gemini/, .specstory/) como si fueran un archivo .env
  • Agrega esas carpetas al escaneo de secretos de tu integración continua, incluyendo el historial de git

Qué significa esto para México y Latinoamérica

Esto no es un problema exclusivo de empresas grandes de Silicon Valley. Cualquier agencia, SaaS, equipo de soporte o tienda en línea en México o Latinoamérica que ya programa con Claude Code puede tener este mismo archivo guardado en algún repositorio, público o privado.

Agencias de desarrollo

Si un desarrollador aceptó «no preguntes de nuevo» en un comando con la contraseña de la base de datos de un cliente, ese dato pudo quedar guardado dentro del repositorio del proyecto, listo para subirse por error.

SaaS y startups

Equipos pequeños suben repositorios con más prisa y menos revisión. Una llave de Amazon Web Services expuesta puede significar una factura de nube inesperada o acceso directo a los datos de los usuarios.

Soporte y operaciones

Repositorios internos de automatizaciones con IA pueden guardar accesos SSH a servidores de producción, el mismo tipo de secreto que Apiiro encontró 43 veces en su búsqueda.

Ecommerce

Una contraseña de base de datos expuesta en un repositorio de una tienda en línea puede significar acceso a pedidos, datos de clientes y pagos, no solo al código.

El punto no es dejar de usar Claude Code ni ninguna otra herramienta de IA para programar. El punto es que ningún equipo debería dejar pasar la opción de «no preguntes de nuevo» sin saber qué guarda exactamente, y que cada negocio que programa con asistentes de IA necesita una revisión de repositorios como la que describe este artículo, no solo una vez, sino como parte de su rutina.

¿Qué es el archivo .claude/settings.local.json?

Es el archivo donde Claude Code guarda, dentro de cada proyecto, los comandos que el desarrollador aprobó con la opción «sí, y no preguntes de nuevo». Si el comando llevaba una contraseña o una llave, Claude Code la guarda también, en texto plano.

¿Ya corrigió Anthropic este problema?

No hay confirmación de que lo haya corregido. Apiiro reprodujo el mismo comportamiento en los modelos más recientes de Anthropic, Opus 5.5 y Fable 5.1, y los cuatro reportes anteriores sobre este archivo fueron cerrados como «no planeado» por un bot automático, sin respuesta de Anthropic, según la investigación.

¿Basta con borrar el archivo de mi repositorio?

No. Borrar el archivo no revoca las contraseñas ni las llaves que ya quedaron expuestas, porque las versiones anteriores siguen en el historial de git y en los forks del repositorio. Apiiro recomienda rotar cada secreto primero y limpiar después.

¿Cómo sé si mi contraseña ya quedó pública en GitHub?

Busca en toda tu organización de GitHub los archivos .claude/settings.local.json y .claude/settings.json, y revisa también el historial de git de cada repositorio, porque versiones viejas del archivo pueden seguir ahí aunque la copia actual ya no exista.

¿Los escáneres de secretos detectan este problema?

Solo en parte. Según Apiiro, gitleaks marcó 564 de los 1,122 archivos con secretos reales y TruffleHog marcó 643; ninguno de los dos detectó 215 de ellos, porque muchas contraseñas aparecen escritas como texto normal dentro de un comando, no en un formato de llave reconocible.

¿Qué debo hacer hoy si mi equipo usa Claude Code?

Revisa la carpeta .claude/ de cada repositorio, rota primero cualquier contraseña o llave que haya aparecido ahí, y después deja de rastrear el archivo con git rm --cached y agrégalo a tu .gitignore.

Usa IA para programar sin dejar la puerta abierta

En Zadrig Technology ayudamos a negocios en México y Latinoamérica a adoptar IA en desarrollo con permisos y revisiones que no exponen sus datos. Agenda una demostración y revisamos juntos tus repositorios.

Escríbenos por WhatsApp
WhatsApp +52 81 4641 5229

Leave A Comment