Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en la autenticación en un token JWT en Envoy (CVE-2021-21378)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-287 Autenticación incorrecta
Fecha de publicación:
11/03/2021
Última modificación:
24/10/2022

Descripción

Envoy es un proxy edge/middle/service de servicio de alto rendimiento nativo de la nube. En versión 1.17.0 de Envoy, un atacante puede omitir la autenticación presentando un token JWT con un emisor que no está en la lista de proveedores cuando el filtro de autenticación JWT de Envoy está configurado con el requisito "allow_missing" en "require_any" debido a un error en la implementación. El filtro de autenticación JWT de Envoy puede ser configurado con el requisito "allow_missing" que se cumplirá si falta JWT (error JwtMissed) y presentará un fallo si JWT existe o no es válido. Debido a un error en la implementación, un error de JwtUnknownIssuer se convirtió por error a JwtMissed cuando se configuró "require_any". Entonces, si se configuró "allow_missing" en "require_any", un atacante puede omitir la autenticación al presentar un token JWT con un emisor que no está en la lista de proveedores. La integridad puede ser impactada según la configuración si el token JWT se usa para proteger contra escrituras o modificaciones. Esta regresión fue introducida el 12/11/2020 en PR 13839, que corrigió el manejo de "allow_missing" en RequireAny en un JwtRequirement (consulte el problema 13458). AnyVerifier agrega los resultados de los comprobadores secundarios a un estado final donde JwtMissing es el error predeterminado. Sin embargo, un JwtUnknownIssuer se trató por error igual que un error JwtMissing y la agregación final resultante fue el JwtMissing predeterminado. Como resultado, "allow_missing" permitiría un token JWT con un estado de emisor desconocido. Esto es corregido en versión 1.17.1 por PR 15194. La corrección funciona al preferir JwtUnknownIssuer sobre un error de JwtMissing, corrigiendo la conversión accidental y omitiendo con "allow_missing". Un usuario podría detectar si se produjo una omisión si posee los registros de Envoy habilitados con verbosidad de depuración Los usuarios pueden habilitar registros de depuración a nivel de componente para JWT. Los registros del filtro JWT indicarán que se presenta una petición con un token JWT y un fallo de que falta el token JWT

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:envoyproxy:envoy:1.17.0:*:*:*:*:*:*:*