SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
W skrócie
- Niektóre łańcuchy middleware przechowują uwierzytelniony
Subject/Principalwewnątrz statycznegoThreadLocali odświeżają go tylko, gdy nadejdzie właśniwy nagłówek SOAP. - Ponieważ WebLogic/JBoss/GlassFish recyklingują wątki robocze, pominięcie tego nagłówka powoduje, że ostatni uprzywilejowany
Subjectobsłużony przez dany wątek jest cicho ponownie używany. - Zalewaj podatny endpoint poprawnie sformułowanymi, pozbawionymi nagłówków SOAP body, aż ponownie użyty wątek przyzna ci skradziony kontekst administratora.
Przyczyna
Handlery podobne do poniższego nadpisują tożsamość w ThreadLocal tylko wtedy, gdy niestandardowy nagłówek jest obecny, więc kontekst poprzedniego żądania przetrwa:
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;
}
Rozpoznanie
- Wylistuj reguły reverse proxy / routingu, aby zlokalizować ukryte drzewa SOAP, które mogą blokować
?wsdl, lecz akceptować POSTy (mapuj je równolegle z przepływem w 80,443 - Pentesting Web Methodology). - Rozpakuj artefakty EAR/WAR/EJB (
unzip *.ear) i sprawdźapplication.xml,web.xml, adnotacje@WebServiceoraz handler chains (np.LoginHandlerChain.xml), aby odkryć klasę handlera, SOAP header QName i nazwy backing EJB. - Jeśli metadata jest nieobecna, brute-force’uj prawdopodobne ścieżki
ServiceName?wsdllub tymczasowo poluzuj lab proxies, następnie zaimportuj odzyskany WSDL do narzędzi takich jak Burp Suite Wsdler, aby wygenerować podstawowe koperty SOAP. - Przejrzyj źródła handlera pod kątem
ThreadLocalkeeperów (np.SubjectHolder.setSubject()), które nigdy nie są czyszczone, gdy nagłówek uwierzytelniający jest nieobecny lub sformatowany niepoprawnie.
Eksploatacja
- Wyślij prawidłowe żądanie z proprietarnym nagłówkiem, aby poznać normalne kody odpowiedzi i błędy używane przy nieprawidłowych tokenach.
- Ponownie wyślij ten sam SOAP body, pomijając nagłówek. Zachowaj poprawność XML i wymagane namespace’y, aby handler zakończył działanie czysto.
- Pętlij żądanie; gdy trafi na wątek, który wcześniej wykonał uprzywilejowaną akcję, ponownie użyty
Subjectodblokuje chronione operacje, takie jak menedżery użytkowników lub poświadczeń.
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>
Weryfikacja błędu
- Podłącz JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) lub podobne debugging hooks, aby obserwować zawartośćThreadLocalprzed i po każdym wywołaniu, potwierdzając, że nieautoryzowane żądanie odziedziczyło wcześniejszego administratoraSubject.
Referencje
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


