SOAP/JAX-WS ThreadLocal Authentication Bypass
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
TL;DR
- Bazı middleware zincirleri, kimlik doğrulanmış
Subject/Principal’ı statik birThreadLocaliçinde tutar ve yalnızca özel bir SOAP header geldiğinde bunu yeniler. - WebLogic/JBoss/GlassFish işçi thread’lerini yeniden kullandığı için, o header’ın olmaması thread tarafından işlenen son ayrıcalıklı
Subject’in sessizce tekrar kullanılmasına neden olur. - Header içermeyen ama düzgün biçimlendirilmiş SOAP gövdeleriyle hedef endpoint’e ardışık istekler gönderin; yeniden kullanılan bir thread size çalınmış yönetici bağlamını verene kadar devam edin.
- 2025 HID ActivID/IASP (HID-PSA-2025-002) gerçek dünyadan bir örnektir: JAX-WS handler bir
SubjectHolderThreadLocal’ı cache’ler ve kimlik doğrulanmamış SOAP çağrılarının önceki console/SSP istekleri tarafından ayarlanmış kimliği devralmasına izin verir.
Root Cause
Handlers similar to the following only overwrite the thread-local identity when the custom header is present, so the previous request’s context survives:
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;
}
Keşif
- Reverse proxy / routing kurallarını listeleyin;
?wsdl’yi engelleyip POST’ları kabul edebilecek gizli SOAP ağaçlarını bulun (bunları 80,443 - Pentesting Web Methodology akışıyla birlikte haritalayın). - EAR/WAR/EJB artefaktlarını açın (
unzip *.ear) veapplication.xml,web.xml,@WebServiceanotasyonlarını ve handler zincirlerini (ör.LoginHandlerChain.xml) inceleyin; handler sınıfını, SOAP header QName’ini ve arka plandaki EJB isimlerini ortaya çıkarın. - Eğer metadata eksikse, muhtemel
ServiceName?wsdlyollarını brute-force edin veya geçici olarak lab proxy’lerini gevşetin; ardından kurtarılan herhangi bir WSDL’i Burp Suite Wsdler gibi araçlara import ederek temel SOAP envelope’ları oluşturun. - Handler kaynaklarını, kimlik doğrulama header’ı eksik veya bozuk olduğunda asla temizlenmeyen
ThreadLocaltutucuları (ör.SubjectHolder.setSubject()) için inceleyin.
İstismar
- Normal yanıt kodlarını ve geçersiz tokenlar için kullanılan hatayı öğrenmek amacıyla özel header ile geçerli bir istek gönderin.
- Aynı SOAP gövdesini header’ı atlayarak tekrar gönderin. XML’in well-formed olmasına ve gerekli namespace’lere dikkat edin, böylece handler sorunsuz şekilde çıkış yapsın.
- İsteği döngüye alın; daha önce ayrıcalıklı bir işlem gerçekleştirmiş bir threade denk geldiğinde, yeniden kullanılan
Subjectkullanıcı veya kimlik bilgisi yöneticileri gibi korumalı işlemlerin kilidini açar.
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 vaka çalışması (HID-PSA-2025-002)
- Synacktiv, ActivID 8.6–8.7’deki JAX-WS
LoginHandler’ınmySubjectHeaderSOAP başlığı mevcut olduğunda veya console/SSP trafiği kimlik doğruladığındaSubjectHolder.subject’ı ayarladığını, ancak başlık olmadığında bunu asla temizlemediğini gösterdi. - Aynı worker thread üzerinde sonraki herhangi bir SOAP çağrısı başlıksız ise o önbelleğe alınmış
Subject’i devralır; bu daUserManagerveyaCredentialManagergibi uç noktalar üzerinden kimlik doğrulamasız yönetici kullanıcı oluşturulmasına veya kimlik bilgilerinin içe aktarılmasına izin verir. - Gözlemlenen güvenilir exploit deseni:
- Birçok thread üzerinde kimlik doğrulanmış bir bağlam tetikleyin (örn.,
/ssp’yi spamleyin veya başka bir tarayıcı sekmesinde/aiconsole’a admin olarak giriş yapın). - Başlıksız SOAP gövdelerini yüksek paralellik ile
/ac-iasp-backend-jaxws/UserManagerveya diğer EJB destekli JAX-WS uç noktalarına gönderin; ‘enfekte’ bir thread’i yeniden kullanan her istek yükseltilmişSubjectile çalışır. - Ayrıcalıklı yanıtlar dönene kadar tekrarlayın; thread yeniden kullanım olasılığını maksimize etmek için Keep-Alive bağlantılarını ve büyük worker havuzlarını yeniden kullanın.
- Handler ve süreç akışı vurguları:
LoginHandlerChain.xml→LoginHandler.handleMessage()mySubjectHeader’ı unmarshal eder veSubject’ıSubjectHolder’a (statik birThreadLocal) kaydeder.ProcessManager.triggerProcess()daha sonraSubjectHolder.getSubject()’ı iş süreçlerine enjekte eder, bu yüzden eksik başlıklar eski kimlikleri olduğu gibi bırakır.- Advisory’den gerçek dünya PoC’u iki adımlı SOAP suistimali kullanır: önce bilgi leak etmek için
getUsers, sonra ayrıcalıklı thread’e denk geldiğinde sahte bir admin yerleştirmek içincreateUser+importCredential.
Hatanın Doğrulanması
- Her çağrıdan önce ve sonra
ThreadLocaliçeriğini izlemek için JDWP (-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) veya benzeri debugging hook’ları ekleyin; böylece kimlik doğrulama yapılmamış bir isteğin önceki bir yöneticiSubject’ini devraldığını doğrulayın. - Üretim appliance’larında ayrıca her istek için
SubjectHolder.getSubject()’ı dökmek amacıyla JFR veya BTrace ile enstrümente edebilirsiniz; bu şekilde başlıksız yeniden kullanımı doğrulayın.
References
- 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
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


