hacktricks/src/pentesting-web/uuid-insecurities.md

66 lines
4.4 KiB
Markdown

# UUID Insecurities
{{#include ../banners/hacktricks-training.md}}
## Basic Information
Gli Identificatori Universali Unici (UUID) sono **numeri a 128 bit utilizzati per identificare univocamente 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 da 32 cifre esadecimali. Esistono diverse versioni di UUID, ognuna con 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.
> [!TIP]
> 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 della M** indica la **versione** dell'UUID. Nell'esempio sopra, è UUID v**1**.
> - La **posizione della 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 intervallo di tempo ravvicinato.
### 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:
1. **Initial Setup**:
- L'attaccante ha il controllo su due account email: \`attacker1@acme.com\` e \`attacker2@acme.com\`.
- L'account email della vittima è \`victim@acme.com\`.
2. **Execution**:
- 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\`.
3. **Analysis**:
- L'attaccante ora ha due UUID generati in un intervallo di tempo ravvicinato (\`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.
4. **Brute Force Attack:**
- 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 non blocca tali tentativi, l'attaccante può rapidamente testare tutti gli UUID possibili nell'intervallo.
5. **Access Gained:**
- 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**](https://github.com/Lupin-Holmes/sandwich)
- Puoi rilevare questi tipi di UUID in Burp Suite con l'estensione [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248).
## References
- [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
{{#include ../banners/hacktricks-training.md}}