SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
TL;DR
- Sommige middleware-kettings stoor die geverifieerde
Subject/Principalbinne ’n statieseThreadLocalen verfris dit slegs wanneer ’n proprietêre SOAP header aankom. - Omdat WebLogic/JBoss/GlassFish werker-drade hergebruik, veroorsaak die weglating van daardie header dat die laaste bevoorregte
Subjectwat deur die draad verwerk is, stilweg hergebruik word. - Bombardeer die kwesbare endpoint met header-loos maar goed-gevormde SOAP bodies totdat ’n hergebruikte draad jou die gesteelde administrateur-konteks gee.
- 2025 HID ActivID/IASP (HID-PSA-2025-002) is ’n werklike voorbeeld: JAX-WS handler kas ’n
SubjectHolderThreadLocal, wat nie-geauthentiseerde SOAP-aanroepe toelaat om die identiteit te erf wat deur vorige console/SSP-versoeke gestel is.
Worteloorsaak
Handlers soortgelyk aan die volgende oorskryf die ThreadLocal-identiteit slegs wanneer die pasgemaakte header teenwoordig is, sodat die konteks van die vorige versoek oorleef:
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;
}
Verkenning
- Lys die reverse proxy / routing rules om verborge SOAP-bome te vind wat dalk
?wsdlblokkeer maar POSTs aanvaar (karter hulle langs die vloei in 80,443 - Pentesting Web Methodology). - Pak die EAR/WAR/EJB artifacts uit (
unzip *.ear) en inspekteerapplication.xml,web.xml,@WebServiceannotations, en handler chains (e.g.,LoginHandlerChain.xml) om die handler-klas, SOAP header QName, en die onderliggende EJB-name te ontbloot. - As metadata ontbreek, brute-force waarskynlike
ServiceName?wsdlpaadjies of maak lab proxies tydelik minder streng, en importeer enige herstelde WSDL in gereedskap soos Burp Suite Wsdler om standaard-enveloppe te genereer. - Hersien die handler sources vir
ThreadLocalhouers (e.g.,SubjectHolder.setSubject()) wat nooit skoongemaak word wanneer die authentication header ontbreek of malformed is.
Eksploitasie
- Stuur ’n geldige request met die proprietary header om die normale response-kodes en enige foutboodskap vir ongeldig tokens te bepaal.
- Stuur dieselfde SOAP-body weer sonder die header. Hou die XML welgevormd en respekteer die vereiste namespaces sodat die handler netjies kan afsluit.
- Herhaal die request; wanneer dit op ’n thread beland wat voorheen ’n bevoorregte aksie uitgevoer het, ontgrendel die hergebruikte
Subjectbeskermde operasies soos gebruikers- of 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 gevallestudie (HID-PSA-2025-002)
- Synacktiv het getoon dat die JAX-WS
LoginHandlerin ActivID 8.6–8.7SubjectHolder.subjectstel wanneer ’nmySubjectHeaderSOAP header teenwoordig is of wanneer console/SSP-verkeer autentiseer, maar dit nooit skoonmaak wanneer die header afwesig is nie. - Enige daaropvolgende SOAP-oproep sonder die header op dieselfde worker thread erf daardie gecachte
Subject, wat ongeauthentiseerde skep van administrateurgebruikers of credential-import moontlik maak via endpoints soosUserManagerofCredentialManager. - Betroubare eksploitasiemodel waargeneem:
- Skep ’n geauthentiseerde konteks op baie threads (bv. spam
/sspof meld aan by/aiconsoleas admin in ’n ander blaaier-oortjie). - Stuur ’n vloed van header-loos SOAP-lywe na
/ac-iasp-backend-jaxws/UserManagerof ander EJB-backed JAX-WS endpunte met hoë parallelisme; elke hit wat ’n “infected” thread hergebruik voer uit met verhoogdeSubject. - Herhaal totdat geprivilegieerde antwoorde teruggestuur word; hergebruik Keep-Alive-verbindinge en groot worker pools om die waarskynlikheid van thread-hergebruik te maksimeer.
- Hoofpunte van handler- en prosesvloei:
LoginHandlerChain.xml→LoginHandler.handleMessage()unmarshalsmySubjectHeaderen stoor dieSubjectinSubjectHolder(a statieseThreadLocal).ProcessManager.triggerProcess()injekteer laterSubjectHolder.getSubject()in besigheidsprosesse, sodat afwesige headers verouderde identiteite onaangeraak laat.- In-veld PoC van die advisory gebruik ’n twee-stap SOAP-misbruik: eerste
getUsersom info te leak, dancreateUser+importCredentialom ’n kwaaddoener admin te plant wanneer die geprivilegieerde thread raak.
Validering van die fout
- Koppel JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) of soortgelyke debugging-hake om dieThreadLocal-inhoude voor en na elke oproep te monitor, en bevestig dat ’n ongeauthentiseerde versoek ’n vorige administrateurSubjectgeërf het. - In produksie appliances kan jy ook met JFR of BTrace instrumenteer om
SubjectHolder.getSubject()per versoek te dump, en header-loos hergebruik te verifieer.
Verwysings
- 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
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


