
Prova de conceito em Python demonstrando uma bypass de autenticação no pac4j JWT ao criar um token JWE com um JWT interno não assinado, permitindo escalonamento de privilégios sem uma chave privada.
Prova de Conceito em Python para CVE‑2026‑29000, um bypass crítico de autenticação que afeta aplicações que utilizam o módulo JWT do pac4j.
A vulnerabilidade permite que atacantes se autentiquem como usuários arbitrários enviando um token JWE malicioso contendo um PlainJWT sem assinatura (alg: none).
Aplicações pac4j podem utilizar o seguinte fluxo de token:
/api/auth/loginDevido ao tratamento incorreto da lógica de parsing do JWT, quando o token interno é um PlainJWT (token sem assinatura):
toSignedJWT() retorna nullIsso permite que um atacante:
Um atacante pode:
Nenhuma chave privada é necessária — apenas a chave pública exposta via JWKS.
Este repositório fornece um PoC em Python que:
Python 3.x
Instale as dependências:
pip install jwcrypto requests
python3 poc.py \
--jwks http://target:8080/api/auth/jwks \
--user admin \
--role ROLE_ADMIN
Exemplo de saída:
=== Malicious JWE Token ===
eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwiY3R5IjoiSldUIn0...
Use-o como:
Authorization: Bearer <TOKEN>
Este repositório é fornecido apenas para fins educacionais e de pesquisa. Não utilize este código contra sistemas sem a devida autorização.
Ali Hussainzada Pesquisador de Segurança de Aplicações | Bug Hunter