
Python proof-of-concept, демонстрирующий обход аутентификации в pac4j JWT путём создания JWE-токена с неподписанным внутренним JWT, что позволяет повысить привилегии без закрытого ключа.
Python-доказательство концепции для CVE-2026-29000, критического обхода аутентификации, затрагивающего приложения, использующие модуль pac4j JWT.
Уязвимость позволяет злоумышленникам аутентифицироваться в качестве произвольных пользователей, отправляя вредоносный токен JWE, содержащий неподписанный PlainJWT (alg: none).
Приложения pac4j могут использовать следующий поток токенов:
/api/auth/loginИз-за некорректной обработки логики парсинга JWT, когда внутренний токен является PlainJWT (неподписанным токеном):
toSignedJWT() возвращает nullЭто позволяет злоумышленнику:
Злоумышленник может:
Закрытый ключ не требуется — достаточно открытого ключа, раскрытого через JWKS.
Этот репозиторий предоставляет PoC на Python, который:
Python 3.x
Установите зависимости:
pip install jwcrypto requests
python3 poc.py \
--jwks http://target:8080/api/auth/jwks \
--user admin \
--role ROLE_ADMIN
Пример вывода:
=== Malicious JWE Token ===
eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwiY3R5IjoiSldUIn0...
Используйте его как:
Authorization: Bearer <TOKEN>
Этот репозиторий предоставлен только в образовательных и исследовательских целях. Не используйте этот код против систем без соответствующего разрешения.
Ali Hussainzada Исследователь безопасности приложений | Охотник за багами