Meteora Web

Claude Code, los archivos de configuración exponen miles de secretos en GitHub

Apiiro encontró más de 100.000 archivos settings.local.json de Claude Code en GitHub, unos 1.100 con secretos. Esto es lo que debes revisar en tus repositorios.

Ing. Calogero Bono 6 min de lectura
Claude Code, los archivos de configuración exponen miles de secretos en GitHub

Según los investigadores de seguridad de Apiiro, Claude Code está dejando secretos en los repositorios públicos de GitHub. El problema nace de un archivo de configuración local, que acaba en línea sin que el desarrollador se dé cuenta. Entre los datos encontrados hay contraseñas de bases de datos, tokens de API y accesos root. Importa a cualquiera que use un asistente de programación con IA, porque un solo commit despistado puede hacer públicas credenciales que siguen siendo válidas.

Algunos términos, antes de entrar en los hechos. .gitignore es el archivo que le dice a Git qué archivos no guardar en los commits. Repositorio es la carpeta de un proyecto seguida por Git. Secreto indica una credencial, como una contraseña, un token de API o una clave privada. Fork es la copia de un proyecto que otro usuario crea en GitHub. Commit es el guardado de un conjunto de cambios en el historial del proyecto.

Zenithby Meteora Web El sistema operativo de tu negocio. Redes sociales, clientes, reservas y facturas en una sola plataforma. Gimnasios, barberías, profesionales. Descubre Zenith → Demo gratis · sin tarjeta

¿Qué se ha descubierto sobre Claude Code y GitHub?

Lo cuenta Ars Technica, que recoge el trabajo de Apiiro. Los investigadores encontraron más de 100.000 casos en los que el archivo local de configuración de Claude Code se había subido a un repositorio público de GitHub.

No todos contienen datos sensibles. Solo unos 1.100 archivos, procedentes de 63 organizaciones distintas, incluían secretos como tokens de API públicos, contraseñas de bases de datos o claves privadas. La cifra es pequeña frente al total, pero se trata de credenciales reales, no de ejemplos.

¿Por qué acaba el archivo en línea?

Cuando el usuario elige la opción «Sí, y no volver a preguntar» para aprobar un comando de shell, la elección se convierte en una regla en el archivo local .claude/settings.local.json. A veces la regla se escribe como un patrón genérico. Con frecuencia, sin embargo, el comando se guarda tal cual, con todo lo que contiene, incluidas las posibles credenciales.

Mientras el archivo quede en el ordenador, el riesgo está contenido, salvo que la máquina se vea comprometida. El problema empieza cuando el archivo entra en un commit.

¿El .gitignore no debería bastar?

En teoría sí. Según Ars Technica, la documentación de Anthropic indica que este archivo se añade al .gitignore global del desarrollador, lo que normalmente evita su publicación.

El punto débil es que la regla no se refleja a nivel de repositorio. Si el proyecto se clona en otra máquina, o si una carpeta se convierte en repositorio más adelante, el archivo puede subirse por error. Apiiro añade que en muchos casos es el propio Claude Code quien hace commit de los cambios en la configuración, sin intervención del usuario.

La documentación oficial de GitHub explica la diferencia. El .gitignore en la raíz del repositorio, una vez incluido en un commit, vale para cualquiera que clone el proyecto. El global en ~/.config/git/ignore solo vale en tu ordenador.

¿Basta con borrar el archivo para solucionarlo?

No. Según Apiiro, incluso después de que los archivos se descubran y se eliminen de un repositorio, los secretos pueden quedar en los forks del proyecto original, si el usuario no tiene cuidado.

La documentación de GitHub recuerda además que un archivo ya seguido por Git primero hay que quitarlo del seguimiento con git rm --cached NOMBRE_ARCHIVO, y solo después la regla de exclusión tiene efecto. Añadir una línea al .gitignore no borra lo que ya está en el historial. Por eso, si una credencial ha terminado en línea, hay que tratarla como comprometida y sustituirla.

Límites que conviene conocer

Las cifras provienen del análisis de Apiiro, recogido por Ars Technica, y no hemos verificado los datos. No sabemos cuántas de las credenciales encontradas seguían siendo válidas, ni si terceros las han usado. En las fuentes no hay una respuesta de Anthropic sobre posibles cambios en el comportamiento de Claude Code. El panorama podría cambiar si la empresa decidiera intervenir en la forma en que se guardan los comandos aprobados.

Qué cambia para quien trabaja con lo digital

Si usas Claude Code, revisa cuanto antes si .claude/settings.local.json está seguido por Git en algún repositorio, incluso privado. Un proyecto privado puede hacerse público o clonarse en otro lugar. Añade el archivo al .gitignore del proyecto y haz commit de ese cambio, para que la regla valga para todos. Para excluir archivos solo en tu clon, GitHub indica .git/info/exclude.

Después está el hábito de escribir contraseñas dentro de los comandos. Es mejor usar variables de entorno o un gestor de secretos. En empresa, conviene añadir un escaneo automático de secretos antes de cada push.

Nuestra opinión

El caso muestra una limitación del diseño, no solo un descuido de los usuarios. Un archivo que puede contener credenciales debería excluirse donde importa, es decir, en el repositorio, no solo en la configuración personal. Dejarlo todo en manos del usuario funciona poco, sobre todo cuando la herramienta hace commits por su cuenta. Dicho esto, también hay una responsabilidad nuestra. Un comando con una contraseña en texto plano es un hábito que hay que corregir, con o sin asistente de IA. La velocidad que prometen estas herramientas hace más urgente la disciplina con los secretos, no menos.

Preguntas frecuentes

¿Qué archivo de Claude Code contiene los secretos?

El archivo es .claude/settings.local.json. Guarda las reglas que se crean cuando apruebas un comando con «Sí, y no volver a preguntar». A veces el comando se escribe completo, con las credenciales dentro.

¿Cuántos archivos expuestos encontró Apiiro?

Más de 100.000 archivos subidos a repositorios públicos de GitHub. Unos 1.100, de 63 organizaciones, contenían secretos como tokens de API, contraseñas de bases de datos o claves privadas.

¿El .gitignore global protege del problema?

Solo en parte. Funciona en tu ordenador, pero no en el repositorio. Si el proyecto se clona en otro lugar o una carpeta se convierte en repositorio más tarde, el archivo puede acabar en un commit.

¿Borrar el archivo del repositorio elimina los secretos?

No. Según Apiiro, los secretos pueden seguir en los forks del proyecto. Si una credencial se ha publicado, debe considerarse comprometida y sustituirse.

¿Cómo excluyo un archivo que ya está seguido por Git?

Primero lo quitas del seguimiento con git rm --cached NOMBRE_ARCHIVO. Luego añades la regla al .gitignore. Sin el primer paso, la regla no tiene efecto sobre el archivo ya seguido.

Qué vigilar en los próximos meses sobre la seguridad de Claude Code

La clave es si Anthropic cambiará la forma en que guarda los comandos aprobados. Mientras tanto, conviene estar atento a las actualizaciones de la herramienta.

  • Lee las notas de la versión de Claude Code, para ver si cambia la gestión de settings.local.json, empezando por nuestro artículo sobre la versión 2.1.319.
  • Busca en el historial de tus repositorios los archivos .claude ya subidos, y rota las credenciales que aparezcan.
  • Revisa las reglas de protección de ramas, usando nuestra guía de pull request en GitHub.

Fuentes

Zenithby Meteora Web El sistema operativo de tu negocio. Redes sociales, clientes, reservas y facturas en una sola plataforma. Gimnasios, barberías, profesionales. Descubre Zenith → Demo gratis · sin tarjeta

Lee también

Del blog

Últimos artículos