La empresa de seguridad de aplicaciones Apiiro ha encontrado 1.122 copias públicas en GitHub del fichero .claude/settings.local.json de Claude Code que contienen secretos reales: contraseñas de bases de datos, claves de servicios en la nube, tokens de API y credenciales SSH. Llegaron ahí porque Claude Code guarda tal cual los comandos que el usuario aprueba con la opción «Yes, and don’t ask again», incluida cualquier contraseña escrita en ellos, y ese fichero acabó subido a repositorios públicos.
Las claves de la filtración de secretos de Claude Code en 20 segundos
- Apiiro localizó 104.185 copias del fichero en GitHub; 1.122 tenían secretos reales.
- Gitleaks y TruffleHog no detectaron 215 de esos ficheros.
- Anthropic estudia añadir un escáner de secretos integrado.
- Borrar el fichero no basta: hay que rotar las credenciales.
El problema no es un fallo de software en sentido estricto, sino una combinación de un comportamiento documentado y un descuido muy habitual. Claude Code, el agente de programación de Anthropic, pide permiso antes de ejecutar comandos en la terminal. Si el usuario elige «Yes, and don’t ask again», la herramienta añade una regla de permiso al fichero .claude/settings.local.json del proyecto para no volver a preguntar, tal como recoge su documentación. Según Apiiro, esa regla es la cadena del comando completa. Si el comando era una conexión a PostgreSQL con la contraseña en línea o una llamada a una API con el token en la cabecera, el secreto queda escrito en texto plano.
Un fichero pensado para no salir del portátil
El fichero settings.local.json es, por diseño, personal y local. Claude Code intenta mantenerlo fuera de Git: la primera vez que lo escribe en un repositorio que no lo ignora, lo añade a la lista global de exclusiones de Git del usuario. Esa protección tiene huecos. Funciona en la máquina donde se creó, pero no viaja con el proyecto: si el repositorio se clona en otro equipo, o si una carpeta se convierte más tarde en repositorio, el fichero puede acabar en un commit y publicarse. Apiiro y la cobertura posterior señalan además casos en los que fue el propio Claude Code quien hizo commit de cambios en ese fichero.
Las cifras de Apiiro: 104.185 copias del fichero repartidas en 103.617 repositorios públicos, de las que 1.122 (alrededor del 1,1 %) contenían al menos un secreto válido, con 1.379 secretos distintos en esos ficheros. Al ampliar la búsqueda al historial de Git y a otros ficheros compartidos de los mismos proyectos, el recuento sube a 2.539 credenciales distintas en casi 2.000 repositorios, según recogen Notebookcheck y otros medios. Las dos cifras miden cosas diferentes y no se contradicen. Entre los repositorios afectados hay algunos de empresas, incluidos desarrolladores de software y proveedores de servicios.

Hay un dato que preocupa más que el volumen: Gitleaks y TruffleHog, dos de los escáneres de secretos más usados, no marcaron 215 de los 1.122 ficheros con credenciales. La razón es que una contraseña metida en mitad de un comando, por ejemplo tras -p en un cliente de MySQL o dentro de una cadena de conexión, no siempre tiene la forma reconocible de una clave de AWS o de un token de GitHub. Quien confíe solo en estas herramientas puede creer que su repositorio está limpio sin estarlo.
Conviene leer el informe con cierta cautela. Apiiro vende seguridad de aplicaciones y tiene interés comercial en este tipo de hallazgos, y su metodología solo es pública en la medida en que la describe su propio blog. Aun así, el mecanismo es sencillo de reproducir y coincide con lo que documenta Anthropic, y varios medios técnicos lo han comprobado de forma independiente con credenciales de prueba.
Qué dice Anthropic
Boris Cherny, responsable de Claude Code, ha explicado que el equipo estudia incorporar un escáner de secretos y cambiar la forma en que la herramienta gestiona los permisos de comandos. Mientras tanto, recomienda usar escáneres de seguridad y mantener los ficheros de configuración local fuera de los repositorios. Anthropic no ha dado fecha para esos cambios. El caso se suma a otros recientes que tienen a los asistentes de programación como vector, como la extensión falsa de Claude Code que instalaba puertas traseras SSH en Cursor, y a la creciente preocupación por el robo de claves de servicios de IA en la nube, el llamado LLMjacking.
Cómo comprobar si un repositorio está afectado
El primer paso es buscar el fichero en los repositorios propios. En un proyecto local, git ls-files | grep settings.local.json indica si está bajo control de versiones, y git log --all -- .claude/settings.local.json muestra si lo estuvo alguna vez. Para una organización en GitHub, la búsqueda de código por nombre de fichero permite localizarlo en todos los repositorios. Hay que abrirlo y revisar las reglas allow en busca de contraseñas, tokens o cadenas de conexión.
Si aparece algún secreto, lo prioritario es cambiarlo: contraseña nueva, clave revocada y token reemplazado, porque hay que asumir que ya está comprometido. Borrar el fichero en un nuevo commit no lo elimina del historial de Git ni de las bifurcaciones (forks) que otros hayan hecho del proyecto. Después conviene sacar el fichero del seguimiento con git rm --cached, añadirlo al .gitignore del propio repositorio, no solo al global, y, si se quiere limpiar el historial, reescribirlo con herramientas como git filter-repo.
La prevención pasa por no escribir secretos en la línea de comandos. Las variables de entorno o los gestores de secretos evitan que la contraseña forme parte del comando aprobado, y Claude Code permite reglas de denegación para impedir que lea ficheros como .env. Y antes de pulsar «no volver a preguntar», merece la pena mirar qué se está aprobando exactamente.
Preguntas frecuentes
¿Qué fichero de Claude Code filtra los secretos?
.claude/settings.local.json, donde Claude Code guarda los comandos aprobados con «Yes, and don’t ask again», incluidas las contraseñas escritas en ellos.
¿Cuántos secretos ha encontrado Apiiro?
1.122 ficheros públicos con secretos reales y 1.379 secretos distintos en ellos. Contando el historial de Git y otros ficheros, 2.539 credenciales en casi 2.000 repositorios.
¿Basta con borrar el fichero del repositorio?
No. El secreto sigue en el historial de Git y en los forks, así que hay que cambiar las contraseñas y claves expuestas.
¿Lo va a corregir Anthropic?
Boris Cherny, responsable de Claude Code, dice que estudian un escáner de secretos integrado y cambios en los permisos, sin fecha anunciada.
Fuentes:

