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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
TL;DR
- Деякі middleware-ланцюги зберігають автентифікований
Subject/Principalвсередині статичногоThreadLocalі оновлюють його тільки коли надходить власний SOAP-заголовок. - Через те, що WebLogic/JBoss/GlassFish повторно використовують робочі потоки, відсутність цього заголовка спричиняє непомітне повторне використання останнього привілейованого
Subject, обробленого потоком. - Навантажуйте вразливу endpoint запитами без заголовків, але з коректними SOAP-телами, поки повторно використаний потік не надасть вам викрадений контекст адміністратора.
- 2025 HID ActivID/IASP (HID-PSA-2025-002) — реальний випадок: JAX-WS handler кешує
SubjectHolderThreadLocal, дозволяючи неавтентифікованим SOAP-викликам наслідувати ідентичність, встановлену попередніми console/SSP-запитами.
Основна причина
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;
}
Recon
- Перелічте правила reverse proxy / маршрутизації, щоб знайти приховані SOAP дерева, які можуть блокувати
?wsdl, але приймати POSTs (відобразіть їх паралельно з потоком у 80,443 - Pentesting Web Methodology). - Розпакуйте артефакти EAR/WAR/EJB (
unzip *.ear) і проаналізуйтеapplication.xml,web.xml, анотації@WebServiceта handler chains (наприклад,LoginHandlerChain.xml), щоб виявити клас обробника, SOAP header QName і імена бекендних EJB. - Якщо метадані відсутні, перебирайте ймовірні шляхи
ServiceName?wsdlабо тимчасово ослабте лабораторні проксі, після чого імпортуйте будь-який відновлений WSDL у інструменти на кшталт Burp Suite Wsdler для генерації базових SOAP-envelopes. - Перегляньте вихідники обробника на наявність
ThreadLocal-зберігачів (наприклад,SubjectHolder.setSubject()), які ніколи не очищуються, коли аутентифікаційний заголовок відсутній або пошкоджений.
Exploitation
- Надішліть дійсний запит з пропрієтарним заголовком, щоб дізнатися звичні коди відповіді та помилку, що використовується для недійсних токенів.
- Повторіть те саме тіло SOAP, пропускаючи заголовок. Тримайте XML коректним і дотримуйтеся необхідних просторів імен, щоб обробник коректно завершив роботу.
- Зацикліть запит; коли він потрапить на потік, який раніше виконав привілейовану дію, повторно використаний
Subjectрозблокує захищені операції, такі як менеджери користувачів або менеджери облікових даних.
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 case study (HID-PSA-2025-002)
- Synacktiv продемонстрував, що JAX-WS
LoginHandlerв ActivID 8.6–8.7 встановлюєSubjectHolder.subject, коли присутній SOAP-заголовокmySubjectHeaderабо коли трафік консолі/SSP автентифікується, але ніколи не очищує його, коли заголовок відсутній. - Будь-який наступний SOAP-виклик без цього заголовка на тому ж worker thread успадковує той кешований
Subject, що дозволяє неавтентифіковане створення administrator users або імпорт credentials через endpoints, такі якUserManagerабоCredentialManager. - Надійний шаблон експлуатації, що спостерігався:
- Створити автентифікований контекст на багатьох threads (наприклад, спамити
/sspабо залогінитись у/aiconsoleяк admin в іншій вкладці браузера). - Масово надсилати SOAP-тела без заголовків до
/ac-iasp-backend-jaxws/UserManagerабо інших EJB-backed JAX-WS endpoints з високою паралельністю; кожний hit, що повторно використовує “інфікований” thread, виконується з підвищенимSubject. - Повторювати до отримання привілейованих відповідей; повторно використовувати Keep-Alive connections і великі worker pools, щоб максимізувати ймовірність повторного використання thread-ів.
- Ключові моменти роботи handler-ів і процесу:
LoginHandlerChain.xml→LoginHandler.handleMessage()десеріалізує (unmarshals)mySubjectHeaderі зберігаєSubjectуSubjectHolder(статичнийThreadLocal).ProcessManager.triggerProcess()пізніше вставляєSubjectHolder.getSubject()у бізнес-процеси, тому відсутні заголовки залишають застарілі ідентичності неочищеними.- PoC з advisory у полі використовує двоетапне зловживання SOAP: спочатку
getUsersдля leak інформації, потімcreateUser+importCredentialщоб створити зловмисного admin коли привілейований thread буде використано.
Перевірка бага
- Підключіть JDWP (
-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n) або схожі debugging hooks, щоб спостерігати вмістThreadLocalдо і після кожного виклику, підтверджуючи, що неавтентифікований запит успадкував попередній administratorSubject. - У production appliances ви також можете інструментувати за допомогою JFR або BTrace, щоб дампити
SubjectHolder.getSubject()для кожного запиту, перевіряючи повторне використання без заголовка.
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:
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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


