SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
TL;DR
- Algunas cadenas de middleware almacenan el
Subject/Principalautenticado dentro de unThreadLocalestático y solo lo actualizan cuando llega un encabezado SOAP propietario. - Debido a que WebLogic/JBoss/GlassFish reciclan los hilos de trabajo, la ausencia de ese encabezado provoca que el último
Subjectprivilegiado procesado por el hilo sea reutilizado silenciosamente. - Satura el endpoint vulnerable con cuerpos SOAP bien formados pero sin encabezado hasta que un hilo reutilizado te conceda el contexto de administrador robado.
- 2025 HID ActivID/IASP (HID-PSA-2025-002) es un caso real: el handler JAX-WS almacena en caché un
SubjectHolderThreadLocal, permitiendo que llamadas SOAP no autenticadas hereden la identidad establecida por solicitudes previas desde la consola/SSP.
Causa raíz
Handlers similares al siguiente solo sobrescriben la identidad a nivel de hilo cuando el encabezado personalizado está presente, por lo que el contexto de la solicitud anterior sobrevive:
public boolean handleMessage(SOAPMessageContext ctx) {
if (!outbound) {
SOAPHeader hdr = ctx.getMessage().getSOAPPart().getEnvelope().getHeader();
SOAPHeaderElement e = findHeader(hdr, subjectName);
if (e != null) {
SubjectHolder.setSubject(unmarshal(e));
}
}
return true;
}
Recon
- Enumera las reglas de reverse proxy / routing para localizar árboles SOAP ocultos que puedan bloquear
?wsdlpero aceptar POSTs (mapeálos junto al flujo en 80,443 - Pentesting Web Methodology). - Desempaqueta los artefactos EAR/WAR/EJB (
unzip *.ear) e inspeccionaapplication.xml,web.xml, las anotaciones@WebServicey handler chains (p. ej.,LoginHandlerChain.xml) para descubrir la clase handler, el QName del encabezado SOAP y los nombres de los EJB de respaldo. - Si falta metadata, fuerza rutas probables
ServiceName?wsdlo relaja temporalmente los proxies del laboratorio, luego importa cualquier WSDL recuperado en herramientas como Burp Suite Wsdler para generar plantillas de SOAP Envelope. - Revisa las fuentes del handler buscando
ThreadLocalkeepers (p. ej.,SubjectHolder.setSubject()) que nunca se limpian cuando falta el encabezado de autenticación o está mal formado.
Exploitation
- Envía una petición válida con el encabezado propietario para conocer los códigos de respuesta normales y cualquier error usado para tokens inválidos.
- Reenvía el mismo body SOAP omitiendo el header. Mantén el XML bien formado y respeta los namespaces requeridos para que el handler termine limpiamente.
- Bucle la petición; cuando caiga en un hilo que previamente ejecutó una acción privilegiada, el
Subjectreutilizado desbloquea operaciones protegidas como gestores de usuarios o de credenciales.
POST /ac-iasp-backend-jaxws/UserManager HTTP/1.1
Host: target
Content-Type: text/xml;charset=UTF-8
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:jax="http://jaxws.user.frontend.iasp.service.actividentity.com">
<soapenv:Header/>
<soapenv:Body>
<jax:findUserIds>
<arg0></arg0>
<arg1>spl*</arg1>
</jax:findUserIds>
</soapenv:Body>
</soapenv:Envelope>
2025 HID ActivID/IASP estudio de caso (HID-PSA-2025-002)
- Synacktiv mostró que el JAX-WS
LoginHandleren ActivID 8.6–8.7 estableceSubjectHolder.subjectcuando está presente un encabezado SOAPmySubjectHeadero cuando el tráfico de la consola/SSP se autentica, pero nunca lo borra cuando el encabezado está ausente. - Cualquier llamada SOAP subsiguiente que carezca del encabezado en el mismo hilo de trabajo hereda ese
Subjecten caché, lo que permite la creación no autenticada de usuarios administradores o la importación de credenciales a través de endpoints comoUserManageroCredentialManager. - Patrón de explotación observado de forma confiable:
- Generar un contexto autenticado en muchos hilos (p. ej., spamear
/sspo iniciar sesión en/aiconsolecomo admin en otra pestaña del navegador). - Enviar en masa cuerpos SOAP sin encabezado a
/ac-iasp-backend-jaxws/UserManageru otros endpoints JAX-WS respaldados por EJB con alto paralelismo; cada petición que reutilice un hilo “infectado” se ejecuta con unSubjectelevado. - Repetir hasta que se reciban respuestas privilegiadas; reutilizar conexiones Keep-Alive y pools de trabajadores grandes para maximizar la probabilidad de reutilización de hilos.
- Puntos destacados del handler y del flujo de proceso:
LoginHandlerChain.xml→LoginHandler.handleMessage()desempaqueta (unmarshals)mySubjectHeadery almacena elSubjectenSubjectHolder(unThreadLocalestático).ProcessManager.triggerProcess()luego inyectaSubjectHolder.getSubject()en los procesos de negocio, por lo que los encabezados ausentes dejan identidades obsoletas intactas.- El PoC en campo del advisory usa un abuso SOAP en dos pasos: primero
getUserspara leak info, luegocreateUser+importCredentialpara plantar un administrador malicioso cuando el hilo privilegiado recibe la petición.
Validación del bug
- Adjuntar JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) u hooks de depuración similares para observar el contenido delThreadLocalantes y después de cada llamada, confirmando que una petición no autenticada heredó unSubjectde administrador previo. - En appliances de producción también se puede instrumentar con JFR o BTrace para volcar
SubjectHolder.getSubject()por petición, verificando la reutilización sin encabezado.
References
- Synacktiv – ActivID authentication bypass (HID-PSA-2025-002)
- HID Global – Product Security Advisory HID-PSA-2025-002 SOAP-API Authentication Bypass
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


