Buco di sicurezza in MySQL/MariaDB

È stato scoperto un pericoloso baco in MySQL/MariaDB che potrebbe permettere l’accesso come root ad un database server.

La vulnerabilità non funziona su tutte le installazioni di MySQL (inclusa CentOS) e dipende da come è stato compilato il server.

Il problema risiede nella routine di autenticazione di un utente. Quando viene aperta una connessione a MySQL/MariaDB viene generato un token calcolando un SHA della password fornita e di una stringa casuale; il token viene quindi confrontato con l’SHA calcolato con il valore corretto. Per un errore di cast potrebbe succedere che le due stringhe vengano considerate uguali anche se non lo sono e anche se memcmp() ritorna un valore diverso da zero; se si verifica questo caso, MySQL/MariaDB pensa che la password sia corretta e permette l’accesso. La probabilità che questo accada è di 1/256.

In base a ciò, se l’installazione è tra quelle vulnerabili, basta conoscere il nome di un utente valido (di solito root è un utente valido) e fare circa 200 tentativi per guadagnare l’accesso.

Questa command line bash riesce a far guadagnare quasi istantaneamente l’accesso ad un MySQL/MariaDB locale che presenta questo problema:

for i in `seq 1 1000`; do mysql -u root --password=pippo -h 127.0.0.1 2>/dev/null; done

Ovviamente i server MySQL/MariaDB che non sono accessibili da Internet sono meno vulnerabili, posto che i binari siano soggetti a questo baco. (via ISC, The Hacker News)

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

6 pensieri riguardo “Buco di sicurezza in MySQL/MariaDB”

  1. E` sufficiente dare 200 volte la password errata? FANTASTICO. Ora sono contento di avere sempre bloccato l’accesso a mysql con regole di firewall, e di avere messo phpmyadmin sempre dietro una protezione con una password “aggiuntiva” di Apache.

  2. se come password usi “pippo” probabilmente in molti db accedi alla prima botta senza bisogno di falle nel software 😉

    Comunque si, il firewall davanti al db in questi casi è d’obbligo e solo se proprio si è COSTRETTI ad accedervi in remoto.

  3. Io ho diverse installazioni dove al DB si deve accedere da remoto, ma tipicamente solo da altre due o tre macchine, quindi firewallo banalmente per indirizzo ip di provenienza. Per la cronaca conosco diversi servizi di hosting che hanno il db aperto a tutti. Sempre per la cronaca, ho provato sulla mai Debian Squeeze e in 1000 tentativi non accede… forse su Debian il bug non si manifesta?

    1. Stamattina Ubuntu 12.04 mi ha proposto l’aggiornamento di MySQL.
      Credo che il problema sia limitato ad un ristretto numero di casi, nemmeno RedHat/CentOS sono interessate.

Spazio per un commento