UUID Insecurities
Basic Information
Gli Identificatori Universali Unici (UUID) sono numeri a 128 bit utilizzati per identificare in modo univoco le informazioni nei sistemi informatici. Gli UUID sono essenziali nelle applicazioni in cui sono necessari identificatori unici senza coordinamento centrale. Sono comunemente utilizzati come chiavi di database e possono riferirsi a vari elementi come documenti e sessioni.
Gli UUID sono progettati per essere unici e difficili da indovinare. Sono strutturati in un formato specifico, divisi in cinque gruppi rappresentati come 32 cifre esadecimali. Ci sono diverse versioni di UUID, ognuna delle quali serve a scopi diversi:
UUID v1 è basato sul tempo, incorporando il timestamp, la sequenza dell'orologio e l'ID del nodo (indirizzo MAC), ma può potenzialmente esporre informazioni di sistema.
UUID v2 è simile a v1 ma include modifiche per domini locali (non ampiamente utilizzato).
UUID v3 e v5 generano UUID utilizzando valori hash da namespace e nome, con v3 che utilizza MD5 e v5 che utilizza SHA-1.
UUID v4 è generato quasi interamente in modo casuale, fornendo un alto livello di anonimato ma con un leggero rischio di duplicati.
Nota che la versione e la sottoversione dell'UUID di solito appaiono nella stessa posizione all'interno dell'UUID. Ad esempio in: 12345678 - abcd - 1a56 - a539 - 103755193864 xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
La posizione di M indica la versione dell'UUID. Nell'esempio sopra, è UUID v1.
La posizione di N indica la variante dell'UUID.
Sandwich attack
L'"Attacco Sandwich" è un tipo specifico di attacco che sfrutta la prevedibilità della generazione di UUID v1 nelle applicazioni web, in particolare in funzionalità come il ripristino della password. L'UUID v1 è generato in base al tempo, alla sequenza dell'orologio e all'indirizzo MAC del nodo, il che può renderlo in qualche modo prevedibile se un attaccante riesce a ottenere alcuni di questi UUID generati in un breve intervallo di tempo.
Example
Immagina un'applicazione web che utilizza UUID v1 per generare link di ripristino della password. Ecco come un attaccante potrebbe sfruttare questo per ottenere accesso non autorizzato:
Impostazione Iniziale:
L'attaccante ha il controllo su due account email: `attacker1@acme.com` e `attacker2@acme.com`.
L'account email della vittima è `victim@acme.com`.
Esecuzione:
L'attaccante attiva un ripristino della password per il suo primo account (`attacker1@acme.com`) e riceve un link di ripristino della password con un UUID, ad esempio `99874128-7592-11e9-8201-bb2f15014a14`.
Immediatamente dopo, l'attaccante attiva un ripristino della password per l'account della vittima (`victim@acme.com`) e poi rapidamente per il secondo account controllato dall'attaccante (`attacker2@acme.com`).
L'attaccante riceve un link di ripristino per il secondo account con un UUID, ad esempio `998796b4-7592-11e9-8201-bb2f15014a14`.
Analisi:
L'attaccante ora ha due UUID generati in un breve intervallo di tempo (`99874128` e `998796b4`). Data la natura sequenziale degli UUID basati sul tempo, l'UUID per l'account della vittima cadrà probabilmente tra questi due valori.
Attacco Brute Force:
L'attaccante utilizza uno strumento per generare UUID tra questi due valori e testa ogni UUID generato tentando di accedere al link di ripristino della password (ad esempio, `https://www.acme.com/reset/<generated-UUID>`).
Se l'applicazione web non limita adeguatamente il tasso o blocca tali tentativi, l'attaccante può rapidamente testare tutti gli UUID possibili nell'intervallo.
Accesso Ottenuto:
Una volta scoperto l'UUID corretto per il link di ripristino della password della vittima, l'attaccante può reimpostare la password della vittima e ottenere accesso non autorizzato al suo account.
Tools
Puoi eseguire automaticamente l'attacco sandwich con lo strumento: https://github.com/Lupin-Holmes/sandwich
Puoi rilevare questi tipi di UUID in Burp Suite con l'estensione UUID Detector.
References
Last updated