Eine Anfang diesen Jahres entdeckte Schwachstelle in MySQL macht wohl viele MySQL-Implementationen unsicher. In vielen verbreiteten Versionen der Software lässt sich eine SSL-Verschlüsselung der übertragenen Daten zwischen MySQL-Client (z. B. Apache-Webserver) und MySQL-Server zwar benutzen aber nicht erzwingen. Sobald der MySQL-Client zwar Verschlüsselung benutzen möchte, der MySQL-Server aber zurückmeldet, dass er diese nicht unterstütze, wird vom Client automatisch auf das Fallback ohne Verschlüsselung umgeschaltet ohne eine Möglichkeit dieses abzuschalten.
Durch diese Tatsache sind alle MySQL-Clients angreifbar für Man-In-The-Middle-Attacken. Ein Angreifer muss nur das Handshake-Paket des MySQL-Servers abfangen und ein manipuliertes Paket ohne das Flag "Ich unterstütze SSL" zurücksenden. Der weitere Traffic zwischen Client und Server erfolgt dann unverschlüsselt und kann vom Angreifer mitgelesen werden. Die SSL-Verschlüsselung im MySQL-Server zu erzwingen bringt ebenfalls nur bedingt Abhilfe. Auch hier kann ein Angreifer ein unverschlüsseltes Paket abfangen, es dann erst verschlüsseln und verschlüsselt an den Server weiterleiten. Auch hier ist der komplette Traffic durch den Angreifer einsehbar.
Das Problem wurde vom MySQL-Team bereits entdeckt und vor einem Jahr behoben. Allerdings wurde der Fix nur in den MySQL-Versionen >5.7.3 und libmysqlclient-Versionen >6.1.3 implementiert, welche bisher in den wenigsten Fällen zum Einsatz kommen. Zudem ist der Fix nicht standardmäßig aktiv, sondern muss vom Benutzer selbst eingeschaltet werden.
Mögliche Angrifsszenarien:
In vielen kleineren Setups laufen Webserver (Client) und Datenbankserver in der Regel auf dem selben Gerät. Dieses Setup ist nach dem derzeitigen Stand sicher, wenn der MySQL-Server vom Internet aus nicht erreichbar ist (Port 3306) und im Client "localhost" als Datenbank-Server festgelegt ist. Nicht sichere Setups sind aber:
Quelle: Duo Labs
Durch diese Tatsache sind alle MySQL-Clients angreifbar für Man-In-The-Middle-Attacken. Ein Angreifer muss nur das Handshake-Paket des MySQL-Servers abfangen und ein manipuliertes Paket ohne das Flag "Ich unterstütze SSL" zurücksenden. Der weitere Traffic zwischen Client und Server erfolgt dann unverschlüsselt und kann vom Angreifer mitgelesen werden. Die SSL-Verschlüsselung im MySQL-Server zu erzwingen bringt ebenfalls nur bedingt Abhilfe. Auch hier kann ein Angreifer ein unverschlüsseltes Paket abfangen, es dann erst verschlüsseln und verschlüsselt an den Server weiterleiten. Auch hier ist der komplette Traffic durch den Angreifer einsehbar.
Das Problem wurde vom MySQL-Team bereits entdeckt und vor einem Jahr behoben. Allerdings wurde der Fix nur in den MySQL-Versionen >5.7.3 und libmysqlclient-Versionen >6.1.3 implementiert, welche bisher in den wenigsten Fällen zum Einsatz kommen. Zudem ist der Fix nicht standardmäßig aktiv, sondern muss vom Benutzer selbst eingeschaltet werden.
Mögliche Angrifsszenarien:
In vielen kleineren Setups laufen Webserver (Client) und Datenbankserver in der Regel auf dem selben Gerät. Dieses Setup ist nach dem derzeitigen Stand sicher, wenn der MySQL-Server vom Internet aus nicht erreichbar ist (Port 3306) und im Client "localhost" als Datenbank-Server festgelegt ist. Nicht sichere Setups sind aber:
- MySQL-Client und -Server kommunizieren über ein unbekanntes Netzwerk (z. B. Internet) oder das benutzte Netzwerk ist vom Internet aus erreichbar.
- Im MySQL-Client ist der Datenbankserver mit einem DNS-Hostname festgelegt (db1.beispiel.de). Erfolgt die Namensauflösung durch einen externen DNS-Server, kann der Inhaber dieses Servers die Inhalte des MySQL-Clients an einen eigenen Server weiterleiten (Bild rechts).
Quelle: Duo Labs