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.
Ukratko
- Neki middleware lanci čuvaju autentifikovani
Subject/Principalu statičkomThreadLocali osvežavaju ga samo kada stigne proprietarni SOAP header. - Pošto WebLogic/JBoss/GlassFish recikliraju worker thread-ove, izostavljanje tog headera uzrokuje da se poslednji privilegovani
Subjectobrađen od strane threada tiho ponovo iskoristi. - Napadajte ranjiv endpoint bez headera ali sa ispravno formiranim SOAP telima dok ponovo upotrebljeni thread ne dodeli ukradeni administratorski kontekst.
- 2025 HID ActivID/IASP (HID-PSA-2025-002) je stvarni primer: JAX-WS handler kešira
SubjectHolderThreadLocal, što omogućava neautentifikovanim SOAP pozivima da naslede identitet postavljen prethodnim console/SSP zahtevima.
Uzrok
Handleri slični sledećem prepisuju thread-local identitet samo kada je prisutan custom header, tako da kontekst prethodnog zahteva opstaje:
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
- Izlistajte reverse proxy / routing rules kako biste pronašli skrivene SOAP tree-ove koji mogu blokirati
?wsdlali prihvataju POST-ove (mapirajte ih uz tok u 80,443 - Pentesting Web Methodology). - Raspakujte EAR/WAR/EJB artifacts (
unzip *.ear) i pregledajteapplication.xml,web.xml,@WebServiceannotations, i handler chains (npr.LoginHandlerChain.xml) da otkrijete handler class, SOAP header QName, i backing EJB names. - Ako metadata nedostaje, brute-force-ujte verovatne
ServiceName?wsdlpaths ili privremeno opustite lab proxies, zatim importujte bilo koji povraćeni WSDL u tooling kao što je Burp Suite Wsdler da generišete baseline envelopes. - Pregledajte handler source-ove radi
ThreadLocalkeepers (npr.SubjectHolder.setSubject()) koji se nikada ne clear-uju kada authentication header nedostaje ili je malformed.
Exploitation
- Pošaljite validan zahtev with proprietarnim header-om da biste saznali normalne response codes i eventualne greške koje se koriste za invalid tokens.
- Ponovo pošaljite isti SOAP body dok izostavljate header. Održavajte XML well-formed i poštujte required namespaces tako da handler exits cleanly.
- Loop-ujte zahtev; kada stigne na thread koji je ranije izvršio privilegovanu akciju, ponovo upotrebljeni
Subjectotključava protected operations kao što su user ili credential managers.
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 studija slučaja (HID-PSA-2025-002)
- Synacktiv je pokazao da JAX-WS
LoginHandleru ActivID 8.6–8.7 postavljaSubjectHolder.subjectkada je prisutan SOAP headermySubjectHeaderili kada se promet sa konzole/SSP autentifikuje, ali ga nikada ne briše kada header izostane. - Bilo koji naredni SOAP poziv koji nema header na istoj radničkoj niti nasleđuje taj keširani
Subject, što omogućava neautentifikovano kreiranje administratorskih korisnika ili import credential-a preko endpoint-a kao što suUserManageriliCredentialManager. - Pouzdan obrazac eksploatacije uočen:
- Pokrenuti autentifikovani kontekst na mnogim nitima (npr. spamovati
/sspili se ulogovati na/aiconsolekao admin u drugom tabu pregledača). - Preplaviti SOAP tela bez header-a ka
/ac-iasp-backend-jaxws/UserManagerili drugim EJB-backed JAX-WS endpoint-ima sa visokim paralelizmom; svaki hit koji ponovo iskoristi “infektovanu” nit izvršava se sa povišenimSubject. - Ponavljati dok ne dobijete privilegovane odgovore; ponovo koristiti Keep-Alive konekcije i velike radne pool-ove da maksimizujete verovatnoću ponovne upotrebe niti.
- Istaknuti delovi handler-a i toka procesa:
LoginHandlerChain.xml→LoginHandler.handleMessage()unmarshalujemySubjectHeaderi čuvaSubjectuSubjectHolder(statickiThreadLocal).ProcessManager.triggerProcess()kasnije ubrizgavaSubjectHolder.getSubject()u poslovne procese, pa izostanak header-a ostavlja zastarele identitete netaknutim.- PoC iz terena iz advisora koristi dvo-stepenu SOAP zloupotrebu: prvo
getUsersda bi se leak-ovala informacija, zatimcreateUser+importCredentialda se postavi lažni admin kada privilegovana nit bude iskorišćena.
Validacija buga
- Prikačiti JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) ili slične debugging hook-ove da se posmatra sadržajThreadLocalpre i posle svakog poziva, potvrđujući da je neautentifikovani zahtev nasledio prethodni administratorskiSubject. - Na producionim aparatima možete takođe instrumentovati sa JFR ili BTrace da dump-ujete
SubjectHolder.getSubject()po zahtevu, verifikujući ponovnu upotrebu bez header-a.
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
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.


