Ciberseguridad

Claude Code dejó contraseñas a la vista en 1.122 archivos públicos de GitHub

Susan Hill
Añádenos en Google

Claude Code, de Anthropic, pide permiso antes de ejecutar la mayoría de los comandos de shell y ofrece, entre las respuestas posibles, «Sí, y no volver a preguntar». Si eliges esa opción para un comando que contiene una contraseña, como los datos de acceso a una base de datos, Claude Code puede guardar el comando entero —contraseña incluida— en un archivo de configuración de texto sin formato dentro del proyecto. Ahora, investigadores de seguridad han descubierto miles de esas contraseñas y claves en repositorios públicos de código en GitHub, donde cualquiera puede leerlas.

Si usas Claude Code, el archivo que debes buscar se llama settings.local.json. Está dentro de una carpeta oculta llamada .claude, en la raíz del repositorio, y se traslada con el proyecto a menos que lo impidas. El comportamiento es el mismo en todos los países donde está disponible la herramienta. Cambiar tus hábitos lleva un minuto; solucionar la filtración de una contraseña lleva mucho más, porque borrar el archivo no lo elimina del historial de git ni de las bifurcaciones que otras personas hayan hecho.

La empresa de seguridad de software Apiiro rastreó GitHub público y encontró 104.185 copias del archivo en 103.617 repositorios, según la investigación, de la que se hizo eco The Hacker News. Alrededor del 1,1 %, es decir, 1.122 copias, contienen al menos un secreto, con un total de 1.379 credenciales distintas. Más de un tercio permitiría acceder directamente a una base de datos; entre ellas hay 379 contraseñas de bases de datos. El conjunto incluye también 43 credenciales SSH para servidores públicos, 42 tokens de GitHub, GitLab y npm, y 23 claves de Amazon Web Services.

Los propietarios no son solo aficionados. Apiiro vinculó los archivos con 63 organizaciones, en su mayoría empresas de software de todos los tamaños. Entre los peores casos hallados figuran una clave en la nube con permisos de administrador de un proveedor de bases de datos y la contraseña del propietario de una base de datos de historiales médicos. Las versiones antiguas del archivo conservadas en el historial de git contienen otros 734 secretos repartidos en 509 repositorios, y 211 bifurcaciones de 74 repositorios incluyen los mismos secretos que los originales. Si se añaden el archivo de configuración compartido que algunos equipos suben a propósito y los registros guardados de chats con agentes, la cifra asciende a 2.539 secretos en 1.994 repositorios.

Claude Code sí intenta evitar que el archivo entre en el control de versiones. La documentación de configuración de Anthropic explica que, la primera vez que la herramienta lo crea, añade una regla a las exclusiones globales de git del usuario para que git lo ignore en ese ordenador. Esa regla no acompaña al proyecto al portátil de un compañero, a un servidor de compilación ni a un equipo nuevo, y tampoco sirve de nada si el archivo ya se había subido. En 539 de los 1.105 repositorios que rastrearon los investigadores, un commit que incluía a Claude como coautor modificó el archivo, lo que apunta a que el propio agente lo sube a menudo. De los 16 agentes de programación cuya documentación comparó Apiiro, Claude Code es el único del que se ha confirmado que, de forma predeterminada, guarda el comando completo aprobado en un archivo del proyecto.

Las medidas de seguridad habituales no detectan buena parte del problema. Apiiro ejecutó dos conocidos escáneres de secretos de código abierto, gitleaks y TruffleHog, en todas las copias: gitleaks señaló 564 de los 1.122 archivos, TruffleHog detectó 643 y a ambos se les escaparon 215. La mayoría de los casos no detectados eran contraseñas escritas después de PGPASSWORD=, sshpass -p o mysql -p, que a una herramienta que busca formatos de clave conocidos le parecen palabras corrientes.

Los hallazgos tienen algunas salvedades. Apiiro vende herramientas de seguridad para el desarrollo asistido por IA, así que la investigación también funciona como argumento de venta. No comprobó si las credenciales seguían activas, aunque una de las empresas a las que avisó confirmó que su clave todavía funcionaba. Se consideró que un valor era un secreto si coincidía con un formato de clave conocido o si aparecía junto a la dirección de un servidor público y un revisor de IA lo confirmaba, lo que deja cierto margen para falsos positivos. Apiiro también señala que la cifra de coautoría no demuestra que Claude introdujera todas las credenciales expuestas. Y GitHub es solo la parte visible: como el archivo es un JSON sin formato dentro de la carpeta del proyecto, también puede acabar incluido en un paquete npm, una imagen de Docker, un archivo zip o una carpeta sincronizada.

La primera recomendación de los investigadores es rotar las credenciales: cambia todas las contraseñas, tokens y claves que hayan aparecido alguna vez en el archivo antes de limpiar nada, porque un secreto que ha sido público está comprometido, reescribas o no el historial. Después, deja de incluir el archivo en el seguimiento de git con git rm –cached, añádelo al .gitignore del propio repositorio y abre /permissions dentro de Claude Code para borrar cualquier regla guardada que contenga un secreto. Si haces referencia a las credenciales mediante variables de entorno, una regla guardada conservará un nombre como $DB_URL en vez de la contraseña. Y aprobar patrones, en lugar de comandos puntuales, evita que los argumentos literales lleguen al archivo.

Los usuarios ya habían advertido del problema. Un informe de errores presentado el 11 de agosto de 2025 señalaba que los comandos aprobados que contenían claves de API y tokens se guardaban palabra por palabra en settings.local.json. Un bot automatizado lo cerró como «no está previsto» el 3 de enero, tras 60 días sin actividad. Apiiro, que publicó sus hallazgos el 6 de noviembre, afirma que los cuatro informes relacionados que cita fueron cerrados por el mismo bot; el más reciente, el 6 de noviembre, sin que Anthropic respondiera. A fecha de 2 de noviembre, todos los archivos expuestos que encontró seguían en la rama principal de sus respectivos repositorios; en la mitad de los casos, llevaban allí al menos 217 días.

Ni The Hacker News ni Apiiro informan de que Anthropic haya respondido, y el comportamiento descrito no ha cambiado: la próxima vez que elijas «no volver a preguntar» para un comando en el que hayas escrito una contraseña, esa contraseña también se guardará.

Etiquetas: , , , , ,

Añádenos en Google

Debate

Hay 0 comentarios.