Las contraseñas y claves de API que los desarrolladores escribieron en comandos que aprobaron en Claude Code están en repositorios públicos de GitHub, donde cualquiera puede leerlas. La empresa de seguridad Apiiro publicó la investigación el 5 de noviembre de 2026. Encontró 1,122 copias públicas de un archivo de configuración de Claude Code que contenían al menos un secreto.
La causa no es un ataque. Es un clic normal de aprobación. Cuando Claude Code pide ejecutar un comando de terminal y el usuario elige “Yes, and don’t ask again,” la herramienta puede guardar ese comando exacto como una regla de permiso. Si el comando contenía una contraseña o un token, el secreto se guarda con él, en texto simple.
El anuncio
Claude Code es el agente de programación de Anthropic que se ejecuta en la terminal. Por defecto pide permiso antes de ejecutar la mayoría de los comandos de terminal. Su documentación de permisos dice que la opción “don’t ask again” guarda una regla de permiso en .claude/settings.local.json dentro del proyecto, para que los comandos que coincidan puedan ejecutarse sin preguntar en sesiones posteriores.
A veces esa regla es un patrón, como un comando de prueba. A veces es un comando exacto. Apiiro dice que ese segundo caso es el problema, porque la regla guardada contiene el comando palabra por palabra. Una contraseña de base de datos escrita después de una bandera, o un token colocado en una línea de comando, entra en el archivo sin cambios.
La herramienta sí intenta mantener el archivo fuera de git. Su documentación de configuración dice que la primera vez que escribe el archivo en un repositorio git, agrega la ruta del archivo al archivo global de exclusiones de git para ese usuario. Esa protección vive en una cuenta de usuario en una computadora. No viaja con el proyecto, y no hace nada por un archivo que ya fue confirmado. Apiiro también señala que Claude Code nunca agrega el archivo al propio archivo de ignorados a nivel de proyecto.
En 539 de los 1,105 repositorios con filtraciones que los investigadores rastrearon, una confirmación que listaba a Claude como coautor cambió el archivo. Eso sugiere que el agente a menudo participó en confirmar el mismo archivo que contenía el secreto. Apiiro dice que reprodujo el comportamiento de guardado con Opus 5.5 y Fable 5.1, y que el comportamiento pertenece a Claude Code en sí, no al modelo detrás de él.
El problema de escala en una imagen: el secreto no está en un archivo, está en el historial, las bifurcaciones y las copias. Ilustración: Dirty Static
Qué encontró el escaneo
Apiiro reunió datos públicos de GitHub del 1 al 3 de noviembre de 2026. Un valor contaba como secreto cuando coincidía con un formato de clave conocido, o cuando una contraseña o un token estaba junto a la dirección de un servidor público, con un revisor de IA también de acuerdo. Ese método importa. Apiiro no probó las credenciales, así que el conteo muestra exposición, no un mal uso probado. Los investigadores no dicen si alguien ha usado estos secretos.
Los casos más fuertes siguen siendo contundentes. Incluyen una clave de nube de nivel administrador de un proveedor de bases de datos, una contraseña de producción de Azure Postgres, un token de producción de Square y la contraseña del propietario de una base de datos que contenía expedientes médicos, según Apiiro. En total, 63 organizaciones están afectadas, la mayoría de ellas empresas de software.
Secretos en los 1,122 archivos actuales, por tipo
Conteos informados por Apiiro, publicados el 5 de noviembre de 2026. Los tipos se superponen con el total más amplio de 1,379 secretos distintos en esos archivos.
La antigüedad empeora el hallazgo. En la instantánea del 2 de noviembre, cada archivo con un secreto seguía en la rama por defecto de su repositorio. En la mitad de esos repositorios, el archivo había estado allí durante al menos 217 días. Las versiones más antiguas contenían 734 secretos más en 509 repositorios, por lo general en archivos que desde entonces habían sido eliminados de la copia actual.
Al contar esas versiones más antiguas, más los secretos en el archivo compartido .claude/settings.json y en los registros de chat de agentes guardados, Apiiro sitúa el total en 2,539 secretos en 1,994 repositorios. Las bifurcaciones extendieron parte de ello aún más, con 211 bifurcaciones de 74 repositorios que llevaban los mismos secretos que los originales.
Detalles importantes
| Fact | What Apiiro reported |
|---|---|
| Copias públicas escaneadas | 104,185 archivos en 103,617 repositorios |
| Archivos actuales con un secreto | 1,122 archivos, alrededor de 1.1 por ciento |
| Secretos distintos en esos archivos | 1,379 |
| Total más amplio con historial y otros archivos | 2,539 secretos en 1,994 repositorios |
| Organizaciones afectadas | 63 |
| Credenciales probadas por Apiiro | Ninguna |
| Clave activa confirmada | Una, informada por una empresa notificada |
Los escáneres normales de secretos pasaron por alto una parte grande. Apiiro ejecutó gitleaks y TruffleHog sobre las copias. Gitleaks marcó 564 de los 1,122 archivos y TruffleHog marcó 643, mientras 215 no fueron marcados por ninguno. Las omisiones tienen sentido cuando ves la forma. Los escáneres buscan formatos de clave conocidos. Una contraseña simple dentro de una línea de comando normal puede parecer una palabra ordinaria.
Hemos cubierto antes el problema más amplio de higiene alrededor de los agentes de programación, en Elimina Postman, plugins y hooks en Codex y Claude Code y en Ejecuta Claude Code, Codex y OpenCode con Corgi. Este caso es más limitado y más agudo. El archivo riesgoso no es un plugin ni un hook. Es el registro de permisos que la herramienta escribe por ti.
Qué hacer primero
Apiiro da un orden claro, y el orden importa. Rota primero. Cambia cada contraseña, token y clave que el archivo haya contenido alguna vez, antes de limpiar el repositorio. Un secreto que estuvo en el historial público debe tratarse como público, incluso si el archivo actual parece limpio.
Después, busca en tu organización de GitHub .claude/settings.local.json y .claude/settings.json, y revisa el historial de git además de los archivos actuales. Deja de rastrear el archivo local, agrégalo al archivo de ignorados del propio repositorio, y abre la copia en tu propia máquina para eliminar cualquier regla que contenga un secreto.
Luego cambia el hábito que alimentó la filtración. Mantén los secretos fuera de las líneas de comando y refiérete a ellos a través de variables de un gestor de secretos, para que una regla guardada contenga un nombre de variable y no un valor. Aprueba patrones cuando puedas, en lugar de un comando exacto que resulta contener una credencial.
Qué sigue
Los usuarios informaron este comportamiento mucho antes del escaneo. Un informe de error presentado el 11 de agosto de 2025 decía que los comandos aprobados con claves de API y tokens se estaban guardando palabra por palabra en el mismo archivo. Apiiro cita cuatro informes relacionados y dice que ninguno recibió una respuesta de Anthropic, y que los cuatro ahora han sido cerrados por el mismo bot automatizado, el más reciente esta semana.
Esa historia es la parte que Anthropic aún debe responder. Hechos verificados el 8 de noviembre de 2026: ninguna respuesta pública de Anthropic y ningún cambio en la documentación sobre este punto se había informado en la cobertura anterior. Un valor por defecto más seguro ocultaría los secretos de las reglas guardadas, o se negaría a guardar un comando que parece contener uno. Hasta que eso llegue, la protección es tuya, y empieza con una búsqueda en tus propios repositorios hoy.
Fuentes
- Apiiro research, “Coding agents leaking secrets on GitHub,” published November 5, 2026: https://apiiro.com/blog/coding-agents-leaking-secrets-github-dont-ask-again
- The Hacker News, “Claude Code’s ‘Don’t Ask Again’ File Exposes Passwords and Keys in 1,122 Public Copies on GitHub,” November 2026: https://thehackernews.com/2026/11/claude-codes-dont-ask-again-file.html
- Claude Code permissions and settings documentation, linked from the reporting above: https://code.claude.com/docs/en/permissions
Body illustration: Dirty Static. Hero image: Dirty Static.
FIN DE LA TRANSMISIÓN
Mantén la curiosidad. Cuestiónalo todo.


