Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/abraxas/keycloak-manage-users-composite
Autenticación y AutorizaciónEscalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebGestión de Identidad y Acceso (IAM)Labs y Práctica

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 →
GitHub
abraxas/keycloak-manage-users-composite

keycloak-manage-users-composite

Ver Repositorio
2hace 1 díaAún no revisado

Acerca de

Keycloak 26.8.1 Medio 6.6 Autenticación remota autenticada residual. Un administrador de mesa de ayuda con manage-users puede fijarse a sí mismo un compuesto preconstruido de manage-realm y luego leer el documento completo del realm. Requiere que ese compuesto ya exista. PoC en loopback.

Compartir

Abraxas Labs - keycloak-manage-users-composite

keycloak-manage-users-composite

Una cuenta de help-desk que solo debería restablecer contraseñas y crear usuarios puede promocionarse a sí misma. Alguien con el rol manage-users de Keycloak encuentra un cargo residual en el realm (un rol compuesto que incluye silenciosamente manage-realm), fija ese cargo en su propia cuenta y luego lee el documento completo del realm que le había sido ocultado una petición antes. No puede crear ese compuesto. Un administrador real del realm tiene que haberlo construido primero. Este es el hermano de mapeo de roles de CVE-2026-94000, que cerró el mismo truco en la unión a grupos.

Clase: Residuo de autenticación Alcance: Remoto (manage-users autenticado)

Keycloak 26.8.1 (24ed1dad) - Red Hat

IDaún sin CVE
ClaseResiduo de autenticación
AlcanceRemoto (Admin REST autenticado; requiere manage-users más un compuesto preconstruido)
CWECWE-269 / CWE-266
CVSSMedio: 6.6 CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
ProductoKeycloak
Afectado26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b); imagen quay.io/keycloak/keycloak:26.8.1
Autenticaciónadmin delegado con realm-management / manage-users. FGAP v2 es el evaluador por defecto.
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1:18082

Qué puede hacer un atacante

Requiere una cuenta de Keycloak existente que ya posea manage-users, y un rol de realm o de cliente cuyo propio nombre no sea un rol de administrador y cuyos compuestos incluyan manage-realm o realm-admin. No necesita manage-realm en el token. No puede crear ese compuesto. La asignación directa de un rol llamado manage-realm / realm-admin sigue siendo rechazada.

PrivilegioMétodo / sinkReconocimiento / integridad / disponibilidadProbado en laboratorio o inferido
Mapear un compuesto no administrativo sobre uno mismoPOST /admin/realms/{realm}/users/{id}/role-mappings/realm con el id y nombre del compuestoIntegridad (concesión de rol)Probado en laboratorio. HTTP 204. Testigo kcr02m7q4
Misma concesión sobre un rol de clientePOST /admin/realms/{realm}/users/{id}/role-mappings/clients/{client}IntegridadCódigo fuente. Mismo canMapRole en ClientRoleMappingsResource.java:184
Leer el documento completo del realm con el mismo token de accesoGET /admin/realms/{realm} tras el mapeoReconocimientoProbado en laboratorio. Antes: HTTP 200 parcial (sin atributos, sin accessTokenLifespan). Después: HTTP 200 completo, atributo plantado presente
Usar manage-realm anidado en llamadas administrativas posterioresUserAdapter.hasRole recorre los compuestos; KeycloakIdentity.hasClientRole confía en el modelo de usuarioIntegridadInferido del código fuente. El oráculo del laboratorio es el GET completo del realm
realm-admin anidado cuando ese es el compuestoMismo recorridoIntegridadInferido. El laboratorio usó manage-realm
Control negativoUn segundo usuario con manage-users que no mapea el compueston/aProbado en laboratorio. El GET de control permanece parcial

Sigue cerrado en este residuo

EjeMétodo / sinkPor qué está cerrado
IntegridadMapeo directo de manage-realm / realm-admin / otros AdminRoles.ALL_ROLESRolePermissionsV2.isRealmAdminRole sigue rechazándolo
IntegridadCrear el compuesto que incluye un rol de administradorcanMapComposite sigue llamando a checkAdminRoles
IntegridadUnirse a un grupo cuyo compuesto incluye un rol de administradorCVE-2026-94000 recorre los compuestos en GroupUtils.checkAdminGroupRoles
IntegridadCrear un usuario que ya está en ese grupoMismo recorrido en UsersResource.createUser
ReconocimientoAdmin REST anónimoRequiere un token de manage-users
IntegridadRCE en el host, realm-admin creando realm-adminFuera de clase

GET /admin/realms/{realm} no devuelve HTTP 403 para manage-users. Ese rol es en sí mismo un rol de administrador, por lo que el servidor devuelve 200 con un documento parcial. Lo que queda son los campos que solo aparecen después de que se mapea el compuesto.

Cómo lo encontré

Fijé Keycloak 26.8.1. Los permisos de administrador de grano fino v2 están activados por defecto. RolePermissionsV2.canMapRole devuelve true para cada rol que falla isRealmAdminRole y nunca recorre los compuestos. La corrección de CVE-2026-94000 los recorre solo en la ruta de grupos.

Errores ya registrados: tratar isRealmAdminRole de v1 como la comprobación activa (v2 lo anula); esperar HTTP 403 en el GET del realm antes de la concesión (el resultado real es un 200 parcial); volver a presentar CVE-2026-94000 (unión de grupos, ya cerrado); una reverse shell. Teatro.

Laboratorio

python3 keycloak-manage-users-composite-Abraxas-Labs.py

o:

cd lab
./run.sh

Dirígete solo a http://127.0.0.1:18082. Imagen quay.io/keycloak/keycloak:26.8.1. Se requiere Docker. El lanzador hace chdir a lab/ y ejecuta run.sh.

IOC image=quay.io/keycloak/keycloak:26.8.1 label-version=26.8.1
IOC serverinfo-version=26.8.1
IOC admin-composite=manage-realm
IOC limited-direct=manage-users
IOC control-direct=manage-users
IOC before-status=200 witness=0 full=0
IOC available=sneaky-composite
IOC post-status=204
IOC after-get attempt=1 status=200 witness=1 full=1
IOC control-status=200 witness=0 full=0 same-token=1
SUCCESS KC-H02-ROLEMAP kcr02m7q4

La solución

Recorrer los composites en RolePermissionsV2.canMapRole de la misma manera que GroupUtils.checkAdminGroupRoles ya lo hace para la unión a grupos. Un rol que incluye manage-realm o realm-admin es un rol de administrador incluso cuando su propio nombre no lo es.

Referencias

  • github.com/keycloak/keycloak etiqueta 26.8.1 (24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b)
  • RolePermissionsV2.canMapRole (RolePermissionsV2.java:59-61)
  • RoleMapperResource.addRealmRoleMappings (RoleMapperResource.java:289-290)
  • Relacionado (no esta ruta): CVE-2026-94000 recorrido de composites en la unión a grupos
  • CWE-269 · CWE-266

Licencia

GNU Affero GPL v3.0. Consulte LICENSE. Solo laboratorio de loopback. Sin garantía.

Abraxas Labs [email protected]

Por favor, acredite el CVE a Abraxas Labs.

Descargar herramienta