
CVE-2012-2122 - Bypass dell'autenticazione MySQL
Proof of Concept (PoC) per CVE-2012-2122, una vulnerabilità critica di bypass dell'autenticazione che colpisce i server MySQL e MariaDB vulnerabili.
Disclaimer
Questo progetto è destinato esclusivamente a scopi educativi, ricerca sulla sicurezza e test di penetrazione autorizzati. Non utilizzare questo software contro sistemi che non possiedi o per i quali non hai esplicito permesso di testare.
CVE-2012-2122 è una vulnerabilità di bypass dell'autenticazione scoperta nella logica di verifica della password di MySQL.
A causa di un bug di casting/confronto di interi, l'autenticazione può avere successo in modo errato quando un confronto di password non valide viene valutato come uguale in determinate condizioni.
Invece di richiedere la conoscenza di una password valida, un attaccante può tentare ripetutamente l'autenticazione utilizzando password arbitrarie finché il bug di confronto non viene attivato.
La probabilità di successo è di circa:
A causa di questa probabilità relativamente alta, gli strumenti automatizzati possono di solito bypassare l'autenticazione entro poche centinaia di tentativi di accesso.
| Metrica | Valore |
|---|---|
| CVE | CVE-2012-2122 |
| CVSS v2 | 7.5 (Alta) |
| Vettore d'attacco | Rete |
| Autenticazione | Nessuna |
| Interazione utente | Nessuna |
| Impatto | Bypass dell'autenticazione |
La vulnerabilità colpisce le build di MySQL compilate con ottimizzazioni del compilatore vulnerabili, incluse versioni come:
Il problema ha colpito principalmente le distribuzioni Linux il cui comportamento del compilatore esponeva il bug.
Non tutte le installazioni di queste versioni sono vulnerabili.
Durante la verifica della password, MySQL confronta internamente due valori hash utilizzando la funzione memcmp().
In circostanze normali:
memcmp(hash1, hash2)
restituisce:
0 quando ugualiLa vulnerabilità è nata perché il valore di ritorno veniva memorizzato in un intero con segno e successivamente convertito in un modo che permetteva a certi valori diversi da zero di essere interpretati come successo dell'autenticazione.
Logica semplificata:
if (memcmp(hash1, hash2) == 0)
{
// Login successful
}
Con un comportamento del compilatore vulnerabile, specifici valori di ritorno di memcmp() potevano soddisfare erroneamente il confronto.
Di conseguenza, password errate occasionalmente superavano l'autenticazione con successo.
Un attaccante ha bisogno solo di:
Non è richiesta alcuna conoscenza della password.
L'attaccante invia continuamente tentativi di accesso utilizzando password casuali.
Alla fine, un'autenticazione riesce a causa del bug di confronto.
Flusso d'attacco tipico:
Attempt #1
↓
Authentication Failed
Attempt #57
↓
Authentication Failed
Attempt #141
↓
Authentication Failed
Attempt #237
↓
Authentication Successful
Il successo medio si verifica circa una volta ogni 256 tentativi.
Uno sfruttamento riuscito consente a un attaccante di:
Se vengono prese di mira credenziali amministrative, si può ottenere il controllo completo del server di database.
Gli indicatori includono:
Esamina i log di autenticazione di MySQL per individuare un'attività eccessiva di accessi falliti.
La mitigazione raccomandata è l'aggiornamento a una versione corretta.
Ulteriori misure difensive includono:
---
## Example Usage
```bash
python3 exploit.py -ip <target>
Esempio:
python3 exploit.py -ip 192.168.1.100
Questo repository dimostra come un sottile bug di implementazione nella logica di autenticazione possa minare completamente la verifica delle password.
Sebbene la vulnerabilità abbia più di un decennio, rimane un importante caso di studio in: