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, omitir ese encabezado provoca que el último
Subjectprivilegiado procesado por el hilo sea reutilizado silenciosamente. - Bombardea el endpoint vulnerable con cuerpos SOAP bien formados pero sin encabezado hasta que un hilo reutilizado te conceda el contexto de administrador robado.
Causa raíz
Manejadores similares al siguiente solo sobrescriben la identidad local del hilo cuando el encabezado personalizado está presente, por lo que el contexto de la solicitud anterior persiste:
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;
}
Reconocimiento
- Enumera las reglas de reverse proxy / enrutamiento para localizar árboles SOAP ocultos que puedan bloquear
?wsdlpero aceptar POSTs (asócialos con el flujo en 80,443 - Pentesting Web Methodology). - Desempaqueta los artefactos EAR/WAR/EJB (
unzip *.ear) e inspeccionaapplication.xml,web.xml, las anotaciones@WebServicey las handler chains (p. ej.,LoginHandlerChain.xml) para descubrir la clase del handler, el SOAP header QName y los nombres de los EJB subyacentes. - Si faltan metadatos, prueba por fuerza bruta rutas probables
ServiceName?wsdlo relaja temporalmente los proxies del laboratorio, luego importa cualquier WSDL recuperado en herramientas como Burp Suite Wsdler para generar envelopes base. - Revisa las fuentes del handler buscando
ThreadLocalkeepers (p. ej.,SubjectHolder.setSubject()) que nunca se limpian cuando el header de autenticación falta o está mal formado.
Explotación
- Envía una solicitud 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 cuerpo SOAP omitiendo el header. Mantén el XML bien formado y respeta los namespaces requeridos para que el handler termine sin errores.
- Itera la solicitud; cuando caiga en un thread 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>
Validando el Bug
- Adjunta JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) u ganchos de depuración similares para observar el contenido deThreadLocalantes y después de cada llamada, confirmando que una petición no autenticada heredó unSubjectde administrador previo.
Referencias
- 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.
HackTricks

