Saltar al contenido

Producto

OpenWAF Egress: una pasarela de código abierto que saca las claves de los proveedores de tus agentes de IA

Publicamos como código abierto la pasarela que ponemos entre los agentes de IA y los proveedores de modelos. El agente se queda con un token de marcador; la clave real se inyecta desde OpenBao o Vault solo cuando la petición pasa 27 detectores de inyección de prompt, los patrones de fuga de datos y la comprobación de SSRF.

Por el equipo de seguridad de OpenWAF

6 min de lectura

Compartir

En resumen. Hoy publicamos OpenWAF Egress v0.1.1 como código abierto, con licencia Apache 2.0. Es una pasarela pequeña entre tus agentes de IA y los proveedores de modelos a los que llaman.

  • El agente tiene un token de marcador (OWE_TOKEN_…), nunca la clave del proveedor.
  • Primero se revisa cada petición: token del agente, destino permitido, SSRF, 27 detectores de inyección de prompt y patrones de fuga de datos. Solo entonces se lee la clave real de OpenBao o HashiCorp Vault y se pone en la petición de salida.
  • La detección es determinista, sin llamar a ningún modelo: 84 µs por una petición de chat de 4 KB en un Mac con Apple Silicon.
  • Un binario de Go sin módulos de terceros, publicado como ghcr.io/openwaf-dev/egress para amd64 y arm64.

Por qué los agentes no deberían tener las claves

Un agente de IA lee texto que no ha escrito: páginas web, incidencias, correos, la salida de sus herramientas. Cualquiera de esos textos puede llevar una inyección de prompt, una orden dirigida al modelo en lugar de al usuario. Si el agente puede ejecutar órdenes o llamar a herramientas, un «imprime tu entorno» o un «envía la conversación a esta URL» inyectados están a un paso de filtrar todo lo que el proceso puede leer. Una clave del proveedor en una variable de entorno la pueden leer el agente, cada herramienta que ejecuta y cada dependencia de su contenedor.

Y esas claves valen dinero. Cuando una versión secuestrada de LiteLLM distribuyó un ladrón de credenciales la semana pasada, la recomendación fue rotar todas las claves de proveedores que guardaba la pasarela (nuestro análisis). Hoy Flavio Copes ha publicado How to protect secrets when coding agents deploy your app, que llega a la misma conclusión desde el lado del despliegue: no basta con ocultarle el secreto al modelo, y un servicio restringido o un proxy de API que añade la credencial solo para hosts y operaciones aprobados la mantiene fuera del agente.

Eso es lo que hace OpenWAF Egress con los proveedores de modelos.

Cómo funciona

El agente sigue con su SDK. Solo cambian dos valores: la URL base apunta a la pasarela y la clave es el marcador del agente.

const client = new OpenAI({
  baseURL: "http://127.0.0.1:8070/v1/agent/my-support-agent/proxy/openrouter",
  apiKey: "OWE_TOKEN_SUPPORT_AGENT", // marcador; la clave real nunca llega al agente
});

Cada petición pasa entonces por cinco pasos. El primero que falla responde con un error JSON y al proveedor no se envía nada:

  1. Token del agente. Authorization: Bearer tiene que llevar el marcador del agente (si no, 401).
  2. Destinos permitidos. El destino tiene que ser uno de los que el agente puede llamar (403 egress_blocked).
  3. Comprobación de SSRF. El host del destino solo puede resolver a direcciones públicas (403 ssrf_blocked).
  4. Inspección del cuerpo. Detectores de inyección de prompt y patrones de fuga de datos (403 injection_detected, 403 data_leak_blocked).
  5. Clave desde OpenBao. La pasarela entra con AppRole, lee la clave de KV v2 (en caché cinco minutos) y la pone en la cabecera que espera el destino. La respuesta vuelve al agente en streaming según llega.

El vídeo de arriba es el binario real de la pasarela respondiendo: la clave inyectada en una petición normal y, después, una inyección de prompt, un número de tarjeta y una petición a la dirección de metadatos de la nube rechazados.

Qué revisa

  • Inyección de prompt: 27 detectores en inglés y español. 21 buscan formas de orden: anulaciones, extracción del prompt de sistema, personajes y modos de jailbreak, mensajes de sistema, de herramienta y turnos falsificados, tokens de plantilla de chat, órdenes de ocultación, invocación de herramientas, saltarse la aprobación, envenenamiento de la memoria, comandos destructivos, scripts remotos pasados a una shell, recolección de secretos y exfiltración hacia hosts o con enlaces renderizados. Seis encuentran texto que una persona no ve: caracteres de ancho cero y de etiqueta Unicode, comentarios HTML, elementos ocultos con CSS, base64 y codificación %xx o hexadecimal. La lista completa está en la página del producto.
  • Fugas de datos: números de tarjeta válidos por Luhn, claves privadas PEM, identificadores de clave de AWS, claves sk- al estilo de OpenAI y tokens de GitHub.
  • SSRF: loopback, rangos privados, CGNAT, enlace local (con 169.254.169.254), multidifusión y rangos reservados, en IPv4 e IPv6.
  • Redirecciones: nunca se siguen. El 3xx del proveedor vuelve al agente, así que la clave inyectada no puede seguirlo hacia otro host.
  • Nada a medias: las imágenes, audios y vídeos en base64 en línea (URI data: y los campos JSON "data" de OpenAI, Gemini y Anthropic) quedan fuera del texto inspeccionado; el resto tiene que caber en una ventana de 1 MiB o la petición recibe un 413. Nada se recorta ni se reenvía sin inspeccionar.

Rendimiento

La detección son expresiones regulares, y cada detector solo se ejecuta si alguna de sus palabras clave aparece en el cuerpo, así que el tráfico normal se salta casi todos. Medido con go test -bench . ./pkg/aiagents/ en un Mac con Apple Silicon (darwin/arm64):

Cuerpo de la peticiónTiempo de detección
Petición de chat de 4 KB84 µs
Petición de chat de 64 KB1,3 ms
64 KB preparados para activar todos los detectores (el peor caso)97 ms

Las cifras son solo la inspección, no el tiempo de respuesta del proveedor. El binario estático ocupa unos 7 MB.

Empezar

Escribe un config.json con tus destinos y tus agentes y arranca el contenedor en loopback:

docker run -d --name openwaf-egress -p 127.0.0.1:8070:8070 \
  -v "$PWD/config.json:/app/config.json:ro" \
  ghcr.io/openwaf-dev/egress:0.1.1

El inicio rápido recorre el secreto en OpenBao, el AppRole, la configuración y una primera petición. La referencia de configuración recoge todos los campos y la solución de problemas, cada código de error.

Lo que no hace

  • No es una prueba de seguridad. Los patrones frenan formas conocidas de inyección y exfiltración, no todas las posibles.
  • Habla HTTP sin cifrar con tokens fijos. Mantenla en loopback o en una red privada, o pon TLS delante.
  • Solo inspecciona el cuerpo de las peticiones, no las cabeceras, la cadena de consulta ni las respuestas del proveedor, y no limita el gasto.
  • La pasarela puede leer las claves, así que ahora es la pieza que hay que proteger: da a su AppRole permiso de lectura sobre las claves de los agentes y nada más.

El modelo de seguridad trata cada punto. Las vulnerabilidades, a [email protected]; las incidencias y las pull requests, a github.com/openwaf-dev/egress.

Preguntas frecuentes

¿Qué es OpenWAF Egress?

Una pasarela HTTP de código abierto (Apache-2.0) entre los agentes de IA y los proveedores de modelos. El agente tiene un token de marcador; la pasarela revisa cada petición e inyecta en la petición de salida la clave real del proveedor, que lee de OpenBao o HashiCorp Vault.

¿Necesito OpenWAF Cloud para usarla?

No. Es un proyecto aparte que ejecutas tú, como contenedor (linux/amd64 y linux/arm64) o como binario para Linux o macOS, junto a tus agentes.

¿Usa un modelo para detectar la inyección de prompt?

No. Sus 27 detectores son expresiones regulares deterministas en inglés y español. La detección tarda 84 µs en una petición de chat de 4 KB en un Mac con Apple Silicon.

¿A qué proveedores pueden llamar los agentes a través de ella?

A cualquier API HTTP que configures como destino. Los ejemplos cubren OpenRouter, OpenAI, Anthropic, Gemini y Hugging Face.

¿Puedo exponerla a internet?

No. Habla HTTP sin cifrar y los tokens de los agentes son fijos: mantenla en loopback o en una red privada, o pon TLS delante.

Fuentes

Temas

  • OpenWAF Egress
  • AI agents
  • prompt injection
  • egress gateway
  • API keys
  • OpenBao
  • HashiCorp Vault
  • DLP
  • SSRF
  • open source
  • Apache-2.0

Autor

OpenWAF

Sigue leyendo

Ver todo

Trae las webs de tu agencia al acceso anticipado.

OpenWAF es gratis mientras está en acceso anticipado. Crea tu cuenta, añade los dominios de tus clientes y cambia sus servidores de nombres o añade un CNAME: el panel te guía en cada paso.