Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-23552 — CVE-2026-23552 - Aceptación de tokens entre reinos en camel-keycloak | Kitploit
Herramientas/GitHubGitHub/oscerd/cve-2026-23552
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónSeguridad WebAprendizaje y EducaciónSeguridad de APIs
GitHuboscerd/cve-2026-23552

CVE-2026-23552

CVE-2026-23552 - Aceptación de tokens entre reinos en camel-keycloak

Ver Repositorio
hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-23552 - Aceptación de tokens entre reinos en camel-keycloak

Resumen

La KeycloakSecurityPolicy de Apache Camel no valida la reclamación iss (emisor) de los tokens JWT contra el reino configurado. Esto significa que un token emitido por un reino de Keycloak es aceptado silenciosamente por una política configurada para un reino completamente diferente, rompiendo el aislamiento entre inquilinos.

Versiones afectadas: 4.15.0, 4.16.0, 4.17.0

Seguimiento en: https://issues.apache.org/jira/browse/CAMEL-22854

Causa raíz

En KeycloakSecurityHelper.parseAccessToken(), cuando no se proporciona explícitamente una clave pública (que es la configuración predeterminada), el token solo se decodifica desde Base64 -- nunca se verifica:

root@kitploit:~
public static AccessToken parseAccessToken(String tokenString, PublicKey publicKey)
        throws VerificationException {
    if (publicKey != null) {
        return TokenVerifier.create(tokenString, AccessToken.class)
                .publicKey(publicKey)
                .verify()
                .getToken();
    } else {
        // no signature verification, no issuer check
        return TokenVerifier.create(tokenString, AccessToken.class).getToken();
    }
}

Dado que la ruta de código predeterminada llega a la rama else, tres cosas quedan sin comprobar:

  1. La firma del token nunca se verifica
  2. La reclamación iss nunca se compara con el esperado {serverUrl}/realms/{realm}
  3. No se obtiene ninguna clave pública JWKS de Keycloak

La comprobación de roles sigue pasando porque solo examina los nombres de los roles dentro del payload del token. Si el nombre del rol (tenant-user) coincide entre reinos -- lo cual es común en configuraciones multiinquilino -- la solicitud pasa.

Impacto

En una aplicación multiinquilino donde cada inquilino se asigna a un reino de Keycloak separado, un usuario del inquilino A puede acceder a rutas protegidas para el inquilino B. Concretamente:

  • Acceso a datos entre inquilinos en aplicaciones SaaS multiinquilino
  • Escalada de privilegios cuando diferentes reinos tienen diferentes configuraciones de roles
  • Bypass completo del aislamiento de seguridad basado en reinos

Reproducción

Este proyecto demuestra la vulnerabilidad usando Apache Camel 4.17.0 y una instancia local de Keycloak.

Requisitos previos

  • Java 17+
  • Maven 3.9+
  • CLI de Camel JBang (jbang app install camel@apache/camel)
  • Docker o Podman (usados por camel infra internamente)

Configuración

Inicie un Keycloak local:

root@kitploit:~
camel infra run keycloak

Esto inicia Keycloak en localhost:8080 con las credenciales de administrador admin/admin.

Ejecución

root@kitploit:~
mvn verify

Qué sucede

La prueba de integración (CrossRealmTokenBypassIT) hace lo siguiente:

  1. Se conecta al Keycloak local y crea dos reinos: acme y globex
  2. Crea un cliente confidencial en cada reino con concesión de acceso directo habilitada
  3. Crea el rol de reino tenant-user en ambos reinos
  4. Crea a la usuaria alice (contraseña alice123) en el reino acme y le asigna el rol tenant-user
  5. Configura una ruta Camel (direct:globex-protected) protegida por una KeycloakSecurityPolicy vinculada al reino globex
  6. Obtiene un token JWT para alice del reino acme (emisor: http://localhost:8080/realms/acme)

La solicitud tiene éxito. El token de acme pasa la política de globex sin ningún error.

Resultados esperados de las pruebas en 4.17.0

TestResultadoSignificado

En una versión parcheada (4.18.0+), la segunda prueba fallaría y la tercera pasaría.

Limpieza

root@kitploit:~
camel infra stop keycloak

La prueba también elimina los reinos acme y globex en @AfterAll.

Corrección

La KeycloakSecurityPolicy debería rechazar los tokens donde la reclamación iss no coincida con {serverUrl}/realms/{realm}. La corrección está registrada en CAMEL-22854 y se incluirá con Camel 4.18.0 (la próxima versión LTS).

Descargar herramienta
  • Envía ese token a la ruta protegida de globex
  • testAcmeTokenIsObtainablePASSComprobación de cordura -- la obtención del token funciona
    testCrossRealmTokenAcceptedPASSConfirma que la vulnerabilidad está presente
    testCrossRealmTokenShouldBeRejectedFAILDocumenta el comportamiento correcto -- en 4.17.0 no se lanza ninguna excepción