Bypass di 2FA/MFA/OTP
Tip
Impara e fai pratica con AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e fai pratica con GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara e fai pratica con Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sfoglia il catalogo completo di HackTricks Training.Supporta HackTricks
- Consulta i piani di abbonamento!
- Unisciti al 💬 gruppo Discord, al gruppo telegram, segui @hacktricks_live su X/Twitter oppure consulta la pagina LinkedIn e il canale YouTube.
- Condividi trucchi di hacking inviando PR ai repository GitHub di HackTricks e HackTricks Cloud.
Tecniche avanzate di bypass dell’autenticazione a due fattori
Accesso diretto agli endpoint
Vedi Proxmox VE per un esempio specifico di prodotto in cui lo stato TFA è selezionato dal client.
Prova direttamente l’endpoint post-login e verifica che sia il server, non solo la UI, a richiedere il completamento dello stato MFA. Se un’applicazione si fida erroneamente dei metadati di navigazione, verifica anche l’header HTTP Referer, scritto correttamente; un’implementazione sicura non deve usarlo come prova dell’MFA.[2][5]
Riutilizzo dei token
Riutilizzare token già usati per l’autenticazione all’interno di un account può essere efficace.[2]
Utilizzo di token non utilizzati
Verifica se un token non utilizzato, generato per un tuo account di test, viene accettato erroneamente per un altro account di test autorizzato. Questo permette di controllare che gli OTP siano associati all’account, alla sessione, allo scopo e alla transazione corretti.[2][5]
Esposizione del token
Verifica se il token viene divulgato in una risposta dell’applicazione web.[2]
Sfruttamento del link di verifica
L’uso del link di verifica email inviato alla creazione dell’account può consentire l’accesso al profilo senza 2FA, come evidenziato in un post dettagliato.[3]
Manipolazione della sessione
Avvia sessioni per due account di test autorizzati, completa l’MFA in una e verifica che il suo stato di completamento non possa essere trasferito all’altra sessione. Il backend deve associare il risultato dell’MFA allo stesso account e alla sessione di pre-autenticazione.[5]
Meccanismo di reimpostazione della password
È fondamentale esaminare la funzione di reimpostazione della password, che dopo la reimpostazione effettua il login dell’utente nell’applicazione, per verificare se consente più reimpostazioni usando lo stesso link. Effettuare il login con le credenziali appena reimpostate potrebbe aggirare la 2FA.[2]
Compromissione della piattaforma OAuth
Verifica se un percorso di login federato OAuth/OIDC applica un livello di garanzia equivalente a quello del percorso dell’applicazione basato su password e MFA. Il controllo dell’account di identità upstream può aggirare l’MFA locale dell’applicazione solo se il relying party accetta quella sessione federata più debole.[5]
Attacchi brute force
Assenza di rate limit
L’assenza di un limite al numero di tentativi con il codice consente attacchi brute force, anche se va considerata la possibile presenza di un rate limit silenzioso.[1][2]
Nota che, anche se è presente un rate limit, dovresti verificare se la risposta cambia quando viene inviato l’OTP valido. In questo post, il bug hunter ha scoperto che, anche se dopo 20 tentativi non riusciti veniva attivato un rate limit con risposta 401, l’invio del codice valido restituiva una risposta 200.[4]
Brute force lento
Un attacco brute force lento è possibile quando esistono rate limit per il flusso, ma non un rate limit generale.[1]
Reimpostazione del limite di invio del codice
Inviare nuovamente il codice reimposta il rate limit, consentendo di continuare i tentativi brute force.[1]
Elusione del rate limit lato client
Se il throttling è implementato solo in JavaScript, ripeti la richiesta direttamente e verifica se il server applica autonomamente limiti per account, sessione e abuso generale.[1][5]
Le azioni interne non hanno un rate limit
I rate limit possono proteggere i tentativi di login, ma non le azioni interne dell’account.[1]
Costi dell’invio ripetuto di codici SMS
L’invio eccessivo di codici via SMS comporta costi per l’azienda, ma non aggira la 2FA.
Rigenerazione infinita degli OTP
La generazione infinita di OTP con codici semplici consente di effettuare brute force riprovando un piccolo insieme di codici.[1]
Sfruttamento di race condition
Invia lo stesso OTP o codice di recupero contemporaneamente e verifica che la convalida e il consumo siano operazioni atomiche. Esiste una race condition se più di una richiesta può riscattare un valore monouso.[5]
Vulnerabilità CSRF/Clickjacking
Esplorare le vulnerabilità CSRF o Clickjacking per disabilitare la 2FA è una strategia praticabile.[1][2]
Sfruttamento della funzione “Remember Me”
Valori dei cookie prevedibili
Indovinare il valore del cookie “remember me” può aggirare le restrizioni.[1]
Falsificazione dell’indirizzo IP
Falsificare l’indirizzo IP della vittima tramite l’header X-Forwarded-For può aggirare le restrizioni.[1]
Utilizzo di versioni precedenti
Sottodomini
Verifica se i sottodomini espongono applicazioni o percorsi di autenticazione precedenti, privi dell’attuale requisito MFA.[1]
Endpoint API
Le versioni precedenti delle API, indicate da percorsi di directory /v*/, potrebbero essere vulnerabili a tecniche di bypass della 2FA.[1]
Gestione delle sessioni precedenti
Terminare le sessioni esistenti quando si attiva la 2FA protegge gli account dall’accesso non autorizzato tramite sessioni compromesse.[1]
Difetti di controllo degli accessi con i codici di backup
La generazione immediata e il potenziale recupero non autorizzato dei codici di backup all’attivazione della 2FA, soprattutto in presenza di configurazioni errate di CORS o vulnerabilità XSS, comportano un rischio.[1][2]
Divulgazione di informazioni nella pagina 2FA
La divulgazione di informazioni sensibili (ad esempio, il numero di telefono) nella pagina di verifica 2FA è un problema.[1]
Disattivazione della 2FA tramite reimpostazione della password
Un possibile metodo di bypass consiste nel creare un account, attivare la 2FA, reimpostare la password ed effettuare successivamente il login senza che venga richiesta la 2FA.[2]
Richieste esca
L’uso di richieste esca per mascherare i tentativi brute force o ingannare i meccanismi di rate limiting aggiunge un ulteriore livello alle strategie di bypass. Per creare queste richieste è necessaria una comprensione approfondita delle misure di sicurezza e dei meccanismi di rate limiting dell’applicazione.
Errori nella costruzione dell’OTP
Se l’OTP deriva solo da dati prevedibili o forniti dal client, un utente potrebbe riuscire a riprodurlo. Verifica che i codici siano generati usando un segreto crittograficamente sicuro, abbiano una validità limitata, siano monouso e siano associati all’account e all’azione corretti.[5]
Autenticazione step-up non applicata (acr, amr, auth_time)
Alcune app consentono agli utenti di effettuare il login con un metodo debole e richiedono l’MFA o un nuovo login solo prima di un’azione sensibile (modificare l’email, aggiungere un beneficiario, esportare dati, accedere a un’area di amministrazione). Questa modalità è chiamata autenticazione step-up. Con OpenID Connect o OAuth, di solito funziona così:
- Il client richiede al provider di identità un login più sicuro usando
acr_values=<level>e/omax_age=<seconds>nella richiesta di autorizzazione.[6] - L’ID token, o un profilo di access token che include il contesto di autenticazione, può indicare cosa è avvenuto:
acr(il livello di autenticazione soddisfatto),amr(i metodi utilizzati, ad esempio["pwd","otp"]) eauth_time(quando l’utente si è autenticato). Non tutti questi claim sono presenti in ogni token.[6] - Un’API che richiede un login più sicuro risponde con
401eWWW-Authenticate: Bearer error="insufficient_user_authentication", acr_values="...", max_age=..., e deve verificareacreauth_timenel token ricevuto.[7]
acr_values è solo una richiesta. Il client (o l’API) deve verificare i claim ricevuti. OIDC Core specifica che il client dovrebbe verificare che il valore acr sia appropriato e controllare auth_time, richiedendo una nuova autenticazione se è trascorso troppo tempo.[6] Se non lo fa, è possibile aggirare lo step-up.
Test black-box con un account di test che ha l’MFA:
- Intercetta la richiesta di autorizzazione step-up e rimuovi
acr_values/max_age, oppure modificaacr_valuesimpostando un valore più debole (ad esempio, damfaourn:...:loa:2al valore osservato durante il login normale). Completa il login senza MFA e usa il risultato per l’azione sensibile. - Chiama direttamente l’endpoint sensibile usando il token o la sessione del login normale (
acrbasso,amrsenzaotp/mfa). La richiesta deve essere rifiutata con una challenge step-up. - Usa un token con
auth_timepiù vecchio delmax_agerichiesto (effettua il login, attendi e poi prova l’azione). - Dopo uno step-up riuscito (ad esempio, per visualizzare una chiave API), riutilizza la stessa sessione o lo stesso token “elevato” per altre azioni sensibili e per la stessa azione molto tempo dopo. Verifica se lo stato elevato è limitato a una singola azione e ha una scadenza.
- Se l’app memorizza il risultato dello step-up in un flag lato client (
"mfaVerified": true, cookieelevated=1o un campo in un token non firmato), modificalo manualmente.
L’applicazione è vulnerabile se l’azione sensibile riesce senza un acr/amr più sicuro o con un auth_time più vecchio del limite consentito. Se un flag di sessione elevata viene riutilizzato per funzioni non correlate, vedi anche riutilizzo dello stato di autorizzazione associato alla sessione.
References
- [1] Autenticazione a due fattori: test di sicurezza e possibili bypass
- [2] Bypass dell’autenticazione a 2 fattori
- [3] Dietro le quinte di un bug di sicurezza: i rischi della generazione dei cookie 2FA
- [4] L’ATO da 2.200 dollari che la maggior parte dei bug hunter ha trascurato chiudendo Intruder troppo presto
- [5] Cheat Sheet OWASP sull’autenticazione multifattore
- [6] OpenID Connect Core 1.0
- [7] RFC 9470 - Protocollo OAuth 2.0 Step Up Authentication Challenge
Tip
Impara e fai pratica con AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e fai pratica con GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Impara e fai pratica con Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Sfoglia il catalogo completo di HackTricks Training.Supporta HackTricks
- Consulta i piani di abbonamento!
- Unisciti al 💬 gruppo Discord, al gruppo telegram, segui @hacktricks_live su X/Twitter oppure consulta la pagina LinkedIn e il canale YouTube.
- Condividi trucchi di hacking inviando PR ai repository GitHub di HackTricks e HackTricks Cloud.


