Mantén los secretos fuera del agente: intermediación, rotación e Infisical

Las variables de entorno y los archivos .env colocan la credencial real dentro del proceso del agente. Un proxy mantiene el valor fuera de las solicitudes del agente y, en un servidor, la rotación llega a los agentes en ejecución sin reiniciarlos. Qué cubre Infisical, qué no cubre y cómo probar tu propia configuración.

19 min de lectura
Mantén los secretos fuera del agente: intermediación, rotación e Infisical

Resumen

  • Las variables de entorno y los archivos .env colocan la credencial real en el proceso del agente. Los comandos iniciados desde ese entorno la heredan [INFERENCE], por lo que todos los comandos que inicia el agente pueden leerla.
  • Un proxy mantiene el valor fuera del entorno y las solicitudes del agente. El agente tiene un valor de sustitución y el proxy adjunta la credencial real a las llamadas HTTP(S) salientes. No está documentado si un servicio de destino puede devolver la credencial en su respuesta.
  • La rotación depende de dónde se ejecute el proxy. En un servidor, el proxy de Agent Vault de Infisical comprueba si hay valores actualizados en cada intervalo de consulta, de 60 segundos por defecto, por lo que un valor rotado entra en vigor dentro de un intervalo. En una laptop, el Agent Proxy local obtiene los valores al iniciar la ejecución. Reinicia después de rotar hasta que hagas la prueba al final de este artículo.
  • Agent Vault y el Agent Proxy local solo intermedian tráfico HTTP(S). El acceso agéntico de PAM de Infisical cubre bases de datos y SSH, pero no lo investigamos aquí. No encontramos ninguna auditoría de seguridad independiente de estos proxies.
  • El proxy para laptop instala una raíz de confianza para sus certificados. En macOS, su clave se encuentra en tu directorio personal, fuera del sandbox del agente (una restricción del sistema operativo sobre el proceso del agente). Inferimos que un proceso sin sandbox ejecutado con tu usuario podría leerla [INFERENCE].

La filtración está en el proceso del agente, no solo en git

Las cifras de GitGuardian a continuación solo cubren commits públicos de GitHub. En 2025, el informe encontró 28.65 millones de nuevos secretos codificados directamente en commits públicos, un aumento del 34%. Los commits en coautoría con Claude Code filtraron una credencial en el 3.2% de los casos, frente al 1.5% general. Para diciembre de 2025, esa tasa había bajado a 13 secretos por cada 1,000 commits, prácticamente el nivel de referencia humano, aunque esos commits siguen siendo sistemáticamente más grandes. El mismo informe encontró 24,008 secretos únicos en archivos de configuración relacionados con MCP, y se verificó que 2,117 de ellos funcionaban cuando se detectaron.

La revocación va detrás de la detección. De las credenciales confirmadas como válidas en 2022, más del 64% seguía funcionando cuando se volvieron a probar en enero de 2026. El informe lo considera una señal operativa de que la remediación, y no la detección, sigue siendo el factor limitante de la industria.

El segundo caso ocurre en la propia máquina. El 26 de agosto de 2025, unos paquetes maliciosos de Nx ejecutaron un script de posinstalación que buscaba datos sensibles en los sistemas. El script también intentó usar herramientas locales de IA como Claude y Gemini, y luego subió lo que encontró a repositorios públicos de GitHub. [INFERENCE] La herramienta de IA en tu laptop es un proceso que contiene credenciales y al que podría acceder un script malicioso ejecutado con tu usuario.

Las lecciones son concretas. Lo que está en tu entorno puede ser leído por lo que se ejecuta en él [INFERENCE]. Y los commits son solo uno de los lugares por donde se filtran secretos.

Dónde reside el valor mientras se ejecuta el agente

Haz dos preguntas para cada ubicación: ¿puede el agente leer el valor y qué necesita la rotación?

Ubicación¿Puede el agente leer el valor?Qué necesita la rotaciónProducto de Infisical
Entorno del proceso (sm run, op run)SíSe inyecta al iniciar; una nueva ejecución obtiene el nuevo valorinfisical sm run
Archivo generadoSí, si la ruta es legibleInfisical Agent consulta cada 5 minutos por defecto y luego ejecuta un hook de recarga: un comando que ejecuta cuando cambia un secretoInfisical Agent
Proxy de Agent Vault en un servidorNo; solo un valor de sustituciónConsulta cada 60 segundos por defecto; no requiere reinicioAgent Vault
Agent Proxy independiente en un servidorNo; solo un valor de sustituciónVuelve a obtener los valores cada 60 segundos; no requiere reinicioAgent Proxy (start, connect)
Agent Proxy local en una laptopNo; solo un valor de sustitución; donde el host lo permite, el sandbox bloquea las rutas directasSe obtiene al iniciar la ejecución; reinicia hasta que lo hayas probadoAgent Proxy (run)

Agent Vault y Agent Proxy son productos distintos. La referencia de la CLI dice que Agent Vault «es un producto distinto del agent proxy que ejecuta infisical sm agent-proxy». Confundir sus configuraciones puede hacer que la rotación no funcione como esperas.

flowchart LR
  subgraph server["Servidor: proxy de Agent Vault"]
    S1["Agente: solo valor de sustitución"] --> S2["Proxy en un host separado<br/>adjunta la credencial"]
    S2 --> S3["API de destino"]
    SI["Infisical"] -- "consulta cada 60 s" --> S2
  end
  subgraph laptop["Laptop: Agent Proxy local"]
    L1["Agente en sandbox del SO: solo valor de sustitución"] --> L2["Proxy en la misma máquina<br/>adjunta la credencial"]
    L2 --> L3["API de destino"]
    LI["Infisical"] -- "obtiene al iniciar la ejecución" --> L2
    L1 -. "ruta directa bloqueada donde se admite" .-> L3
  end

El patrón no es exclusivo de Infisical. La versión alojada de Claude Code de Anthropic mantiene las credenciales de git fuera de su sandbox y las adjunta mediante un proxy (artículo de ingeniería de Anthropic, publicado el 2025-10-20). Sus entornos en la nube también ofrecen secretos de red: las claves que agregas permanecen fuera del sandbox y se adjuntan a las solicitudes correspondientes (documentación de Claude Code, consultada el 2026-10-30). Los entornos autoalojados no tienen secretos de red.

Laptop: el Agent Proxy local

run inicia un proxy, ejecuta tu agente dentro de un sandbox del sistema operativo y detiene ambos cuando el agente termina:

infisical sm agent-proxy run --projectId=<project-id> --env=dev --path=/coding-agent -- claude

El sandbox cubre al agente y a todos los comandos que ejecuta. No cubre los comandos que ejecutas en tu propia shell, como npm install. Durante la ejecución:

  • El agente recibe valores de sustitución para las credenciales que usan sustitución de secretos, no los valores reales. Los servicios que reescriben encabezados no necesitan nada en el entorno, porque el proxy configura el encabezado por sí mismo.
  • La ejecución elimina las variables cuyos nombres parecen credenciales, incluidas las que contienen TOKEN, SECRET, PASSWORD o API_KEY. Puedes volver a pasar alguna con --pass-env si aceptas el riesgo.
  • Se deniega el acceso a rutas de credenciales como ~/.aws, ~/.ssh y ~/.infisical. La documentación del Agent Proxy local enumera el conjunto completo, así que compáralo con tus propios almacenes. Donde el host lo permite, el proxy es la única ruta de salida. En Linux, si no hay un namespace de red privado, el sandbox recurre a una red compartida y muestra una advertencia; entonces las herramientas que ignoran las variables del proxy se conectan directamente. En Windows, run se niega a iniciar sin --no-sandbox.

La raíz de confianza. El proxy debe terminar TLS para adjuntar credenciales, por lo que firma certificados con una raíz local autofirmada. Dónde reside esa raíz depende de tu sistema operativo:

  • macOS: run almacena la raíz en ~/.infisical/agent-proxy, una ruta que el agente dentro del sandbox no puede leer, y la agrega una sola vez a tu llavero de inicio de sesión. La primera ejecución solicita tu contraseña y la confianza persiste. [INFERENCE] Quien tenga la clave de la raíz puede emitir certificados que las herramientas que confían en el sistema acepten para cualquier host, por lo que se podrían interceptar gh y los binarios de Go. Rechaza la solicitud a menos que necesites usar esas herramientas a través del proxy. Si la rechazas, las herramientas que usan el almacén de confianza del sistema fallan, mientras que curl, Python y Node siguen funcionando mediante variables de entorno. La documentación que leímos no describe cómo eliminarla; revisa Acceso a Llaveros para buscar la raíz si dejas de usar el proxy para laptop.
  • Linux: la raíz se genera en memoria para cada ejecución y la documentación dice que las variables de entorno son suficientes.

La documentación dice que la clave privada de la CA nunca se escribe en el directorio temporal de cada ejecución, pero también dice que volver a permitir el acceso a ~/.infisical le daría al agente la clave privada de la CA local. [INFERENCE] Inferimos que un proceso sin sandbox ejecutado con tu usuario podría leer esa clave, como un script de instalación malicioso del tipo usado en el incidente de Nx. Los comandos que ejecutas en tu propia shell, como npm install, están fuera del sandbox. En una máquina donde instalas paquetes que no son de confianza, asume que esos paquetes pueden leer la clave.

Para ver cómo funciona el patrón de sustitución, esta comprobación adapta el ejemplo de GitHub de la documentación local para imprimir solo el código de estado. El comando solo envía el valor de sustitución:

infisical sm agent-proxy run -e dev -- \
  sh -c 'curl -sS -o /dev/null -w "%{http_code}\n" https://api.github.com/user -H "Authorization: Bearer $GITHUB_TOKEN"'

Esto presupone un servicio configurado para pasar por el proxy para api.github.com, cuyo secreto se llama GITHUB_TOKEN. La documentación dice que GitHub sigue respondiendo como si fueras tú. No lo hemos ejecutado aquí, así que un 200 lo confirmaría.

Rotación en una laptop. La ejecución local obtiene los valores de los servicios configurados para pasar por el proxy al iniciar, y las concesiones dinámicas se renuevan antes de vencer. La documentación no dice si los valores estáticos se actualizan durante la ejecución. Hasta que hagas la prueba de la última sección, reinicia después de rotar.

Servidor o CI: el proxy de Agent Vault

En un servidor, ejecuta el proxy en un host dedicado y mantenlo en una red privada a la que solo puedan acceder tus agentes. Mantén el token del proxy fuera del historial de la shell y de los listados de procesos: léelo desde un archivo que solo tu usuario pueda leer (chmod 600) y pásalo como variable de entorno, no como flag, porque en la mayoría de los sistemas otros usuarios pueden ver los argumentos de la línea de comandos.

INFISICAL_AGENT_VAULT_PROXY_TOKEN="$(cat ~/.config/agent-vault/proxy-token)" \
  infisical agent-vault proxy --domain <your-instance-url>

Luego, los agentes se ejecutan a través del proxy. El token de sesión se establece solo para ese comando, no para toda tu shell:

INFISICAL_AGENT_VAULT_SESSION_TOKEN="$(cat ~/.config/agent-vault/session-token)" \
  infisical agent-vault run --proxy <proxy-host>:17323 -- claude

Antes de depender de él, conoce estos comportamientos:

  • Actualización. El proxy consulta Infisical en busca de valores actualizados en cada intervalo de consulta, de 60 segundos por defecto, configurable entre 10 y 300. Un valor rotado entra en vigor dentro de un intervalo.
  • Fallo. Si el proxy no puede comunicarse con Infisical, usa los últimos datos que tiene durante 5 intervalos y luego devuelve 502. No reenvía solicitudes sin credenciales.
  • Protocolos. Adjunta credenciales a solicitudes HTTP/1.1 sobre HTTPS y HTTP sin cifrar. Las conexiones WebSocket y los clientes que solo admiten HTTP/2, como gRPC, fallan al pasar por él. Si una API ofrece tanto WebSocket como HTTPS, configura el agente para usar HTTPS, ya que muchos SDK recurren a HTTPS cuando falla WebSocket. Codex puede registrar errores de conexión antes de recurrir a HTTPS.
  • Otros hosts. Las solicitudes a hosts fuera del paquete de acceso de la sesión pasan sin credenciales, a menos que una política de tráfico las bloquee.
  • Exposición de red. Los agentes envían su token de sesión al proxy sin cifrar con cada solicitud. Si alguien puede leer ese tráfico y acceder al proxy, puede usar el token para llamar a todas las API del paquete de acceso de la sesión hasta que esta venza o sea revocada, así que mantén el tráfico en una red privada. La documentación de seguridad del Agent Vault independiente dice que el encabezado Proxy-Authorization del token viaja en texto claro entre el agente y el intermediario.
  • Ubicación. Mantén el proxy fuera de la máquina del agente. La guía de Agent Vault con Claude Code dice que, en la misma máquina, el agente podría leer el token del proxy y la clave privada de la autoridad certificadora del proxy. Por otra parte, [INFERENCE] un agente ejecutado con tu usuario podría leer tu token de inicio de sesión de Infisical, en ~/.infisical o en el llavero de macOS, a menos que un sandbox bloquee ese acceso.

La otra opción para servidor es el Agent Proxy independiente (infisical sm agent-proxy start, con agentes que usan connect). El agente se autentica con una identidad de máquina. El proxy independiente vuelve a obtener los valores de los secretos cada 60 segundos y aplica un valor rotado dentro de un intervalo, sin reiniciar el agente.

Rotación según la credencial

La cobertura de rotación depende del proveedor. Al 2026-10-30, el sitemap de la documentación enumera 30 páginas de proveedores de rotación y 32 de secretos dinámicos. La rotación de dos fases, que usa la mayoría de los proveedores, mantiene la credencial anterior válida hasta la siguiente rotación, para que los clientes sigan funcionando. La rotación de una sola fase no tiene un período de superposición, por lo que los clientes fallan hasta que obtienen el nuevo valor. Estas son las entradas relevantes para la mayoría de las configuraciones de agentes:

CredencialModo de InfisicalDetalles
Token de API de CloudflareRotación, dos credenciales superpuestasLos tokens generados vencen al doble del intervalo de rotación más un día, con un mínimo de 7 días.
Token personal de GitHubSin página de rotaciónUsa en su lugar tokens de GitHub App provenientes de un secreto dinámico (nuestra recomendación). Su duración está fijada en una hora y no se pueden revocar ni renovar, por lo que uno filtrado sigue siendo utilizable hasta por una hora.
Clave de API de AnthropicSin página de rotación ni de secretos dinámicosRótala manualmente.
Cuenta de servicio de OpenAI; claves de OpenRouter, LiteLLM y FireworksRotaciónAparecen en el sitemap de la documentación.
Postgres, MySQL, MSSQL, MongoDB, OracleRotación con dos usuariosInfisical alterna entre dos usuarios. La contraseña anterior permanece válida como credencial durante un período de gracia hasta el siguiente ciclo.
RedisRotaciónUna credencial nueva en cada ciclo.
IAM en la nube y algunas bases de datosSecretos dinámicosCredenciales emitidas por identidad con una duración corta que Infisical puede invalidar rápidamente después de su uso. El sitemap enumera AWS IAM, GCP IAM y Azure Entra ID.

Los límites de los planes cambian, así que consulta la página de precios antes de comprometerte. Al 2026-10-30, en Secrets Management, la rotación completa y los secretos dinámicos empiezan en el plan Advanced, y Pro solo rota bases de datos públicas. Agent Vault cobra por solicitud intermediada, es decir, cualquier solicitud a la que el proxy adjunta una credencial. Al 2026-10-30, el plan Pro de Agent Vault incluye gratis las primeras 5,000 solicitudes intermediadas al mes y luego cobra $2 por cada 1,000. Según esa definición, una llamada a un LLM que lleve una credencial adjunta contaría [INFERENCE].

Qué no cubre la intermediación

  • Tráfico que no es HTTP. El proxy de Agent Vault no admite clientes WebSocket ni clientes que solo usan HTTP/2. Tanto la página del Agent Proxy local como la del independiente dicen que «solo se intermedian HTTP y HTTPS». El acceso agéntico de PAM de Infisical cubre bases de datos, servidores y cuentas de Kubernetes mediante proxies locales; no lo investigamos.
  • Herramientas que ignoran las variables del proxy. Dentro del sandbox de la laptop, fallan de forma explícita. En Linux, cuando el namespace de red privado no está disponible, pueden conectarse directamente (ver arriba).
  • Hosts fuera del paquete de acceso. Las solicitudes pasan sin credenciales, a menos que una política de tráfico las bloquee.
  • La raíz de confianza. En macOS, su clave está fuera del sandbox (ver arriba). [INFERENCE] Un proceso sin sandbox ejecutado con tu usuario podría leerla. Un proxy de servidor ejecutado en la máquina del agente podría exponer la clave de su autoridad certificadora de la misma manera; la guía de Claude Code dice que el agente podría leerla.
  • Reflejo de credenciales. No encontramos documentación sobre si un servicio de destino puede devolver una credencial en una respuesta o en el cuerpo de un error.
  • Revisión independiente. La única revisión de código por un tercero que encontramos cubre el Agent Vault independiente (un proyecto de código abierto que, según su documentación, ya no se mantiene al 2026-10-30) en la versión 0.39.3. Encontró que las claves permanecen ocultas para los agentes, pero que su configuración predeterminada es permisiva: las solicitudes a hosts sin coincidencia pasan sin restricciones y los agentes se ejecutan sin sandbox por defecto. No encontramos ninguna revisión del proxy de Agent Vault de la plataforma, del Agent Proxy independiente ni del Agent Proxy local.

Compruébalo tú mismo: ¿tu ejecución en la laptop detecta una clave rotada?

La documentación no aclara si una ejecución en una laptop actualiza los valores estáticos, así que pruébalo. La prueba necesita una ejecución que continúe después de una rotación y haga dos solicitudes:

  1. Crea dos tokens de GitHub de permisos granulares sin permisos de repositorio: token A y token B. Guarda el token A en Infisical como el secreto GITHUB_TOKEN y asígnalo a un servicio configurado para pasar por el proxy para api.github.com. La documentación local dice que la ejecución establece un valor de sustitución para cada credencial de sustitución de secretos en la carpeta, así que comprueba que el nombre de la variable coincida.
  2. Comprueba el token B con una solicitud directa fuera de la ejecución (deberías recibir 200). Si falla, un 401 posterior no demuestra nada.
  3. Inicia la ejecución desde el directorio de tu proyecto, con flags explícitos, y deja una pausa larga:
infisical sm agent-proxy run --projectId=<project-id> --env=dev --path=/<folder> -- sh -c '
  curl -sS -o /dev/null -w "before: %{http_code}\n" https://api.github.com/user -H "Authorization: Bearer $GITHUB_TOKEN"
  sleep 600
  curl -sS -o /dev/null -w "after: %{http_code}\n" https://api.github.com/user -H "Authorization: Bearer $GITHUB_TOKEN"
'

Detente si before no imprime 200.

  1. Durante el primer minuto de la pausa, actualiza el secreto de Infisical con el token B y revoca el token A.
  2. Compara los códigos. before: 200 seguido de after: 200 significa que el proxy obtuvo el nuevo valor durante la ejecución. before: 200 seguido de after: 401 significa que conservó el anterior, así que reinicia después de rotar.

Tres reglas para esta prueba. Rechaza la solicitud del llavero de macOS; curl confía en la raíz mediante variables de entorno, así que la prueba seguirá funcionando. Imprime solo códigos de estado, nunca encabezados ni cuerpos, y evita los endpoints que devuelven los encabezados, ya que imprimirían la credencial. Usa tokens sin permisos y revoca ambos cuando termines.

Lista para elegir la ruta

  • API HTTP, laptop: el Agent Proxy local. Reinicia después de rotar hasta que la prueba anterior dé el resultado esperado.
  • API HTTP, servidor o CI: el proxy de Agent Vault. Un valor rotado se aplica dentro de un intervalo de consulta, de 60 segundos por defecto. El Agent Proxy independiente es la alternativa si tu equipo ya usa identidades de máquina.
  • Consumidor que solo usa archivos: Infisical Agent, con un hook de recarga (un comando que ejecuta cuando hay un cambio).
  • Valor que solo se admite como variable de entorno: sm run u op run. Reinicia el comando después de rotar.
  • Base de datos o SSH: una ruta diferente, como PAM o secretos dinámicos. No se cubre aquí.
  • Servidor MCP de Infisical: establece INFISICAL_MASK_SECRET_VALUES=true. Devuelve los valores de los secretos por defecto y no aplica permisos propios, así que limita estrictamente el alcance de la identidad de máquina.

Fuentes