MariaDB und MySQL sind weit verbreitete Datenbanksysteme, die in zahlreichen Anwendungen und Diensten verwendet werden. Trotz ihrer Beliebtheit sind sie nicht ohne Sicherheitsrisiken. Besonders kritisch sind die Funktionen LOAD DATA INFILE
und die Möglichkeit, Server-Side Request Forgery (SSRF) sowie Remote Code Execution (RCE) durch User Defined Functions (UDF) durchzuführen. Dieser Bericht beleuchtet diese Schwachstellen und vergleicht die Sicherheit auf verschiedenen Betriebssystemen.
Sicherheitsrisiken durch „LOAD DATA INFILE“
1. Lesen und Schreiben von Dateien
Der Befehl LOAD DATA INFILE
ermöglicht es, Daten aus Dateien zu lesen und in Datenbanktabellen zu laden. Diese Funktion kann jedoch missbraucht werden, um auf sensible Dateien zuzugreifen oder bösartige Inhalte zu schreiben, wenn die Konfiguration nicht sicher ist.
- Lesen sensibler Dateien: Angreifer könnten den Befehl verwenden, um Dateien wie
/etc/passwd
zu lesen. - Schreiben bösartiger Inhalte: Angreifer könnten Dateien mit schädlichem Code auf dem Server ablegen.
2. Einschränkung durch secure_file_priv
Der Parameter secure_file_priv
beschränkt den Zugriff auf das Dateisystem. Wenn dieser Parameter auf ein spezifisches Verzeichnis (z.B. /var/lib/mysql-files/
) gesetzt ist, kann LOAD DATA INFILE
nur auf Dateien in diesem Verzeichnis zugreifen. Wenn er auf ""
gesetzt ist, sind keine Einschränkungen vorhanden.
- Standardkonfiguration: Setzt
secure_file_priv
auf ein spezifisches Verzeichnis, was den Zugriff einschränkt. - Unsichere Konfiguration: Wenn
secure_file_priv
auf""
gesetzt ist, können Angreifer Dateien im gesamten Dateisystem lesen.
3. File Privilegien möglichst nicht vergeben
Das FILE
-Privileg sollte nur vertrauenswürdigen Benutzern gewährt werden, die es unbedingt benötigen.
GRANT FILE on *.* to user@'localhost'
Ist in den meisten Fällen ein gefundenes Fressen für Angreifer. Dieses Privileg erlaubt es Angreifern LOAD DATA INFILE
und SELECT INTO OUTFILE
effektiv auf Betriebssystemebene auszuführen und Daten so Daten zu stehlen.
SSRF und RCE durch SQL-Injection und UDFs
1. SSRF via SQL-Funktionen
Die Funktion LOAD_FILE()
kann genutzt werden, um Netzwerkaufrufe zu initiieren. Die Wirksamkeit dieser Technik hängt vom Betriebssystem und der Datenbankkonfiguration ab.
- Windows: Ermöglicht Netzwerkaufrufe zu UNC-Pfaden, was zur Exfiltration von NTLMv2-Hashes führen kann.
- Linux: Netzwerkaufrufe sind eingeschränkt und weniger effektiv als unter Windows.
2. Remote Code Execution (RCE) via UDFs
MySQL und MariaDB erlauben das Hinzufügen von User Defined Functions (UDFs) aus externen Bibliotheken. Wenn diese Bibliotheken zugänglich und in das System eingebunden sind, können sie zur Ausführung beliebigen Codes verwendet werden.
- Voraussetzungen:
- Schreibzugriff auf
@@plugin_dir
file_priv
aufY
gesetztsecure_file_priv
deaktiviert- Beispiel: Bibliotheken wie
lib_mysqludf_sys
können geladen werden, um HTTP-Anfragen auszuführen und SSRF zu ermöglichen.
Vergleich der Sicherheit nach Betriebssystem
Windows
- SSRF-Anfälligkeit: Höher, da Netzwerkaufrufe zu UNC-Pfaden möglich sind, was zur Exfiltration von NTLMv2-Hashes führen kann.
- RCE-Anfälligkeit: Hoch, wenn UDFs eingebunden und entsprechende Rechte vorhanden sind.
Linux
- SSRF-Anfälligkeit: Geringer als bei Windows, da Netzwerkaufrufe eingeschränkter sind.
- RCE-Anfälligkeit: Ähnlich wie bei Windows, abhängig von der Konfiguration und den Rechten.
Sicherheitsmaßnahmen
1. Konfiguration von secure_file_priv
- Setzen Sie
secure_file_priv
auf ein spezifisches und sicheres Verzeichnis. - Vermeiden Sie die Einstellung
""
, um den unbeschränkten Dateizugriff zu verhindern.
2. Beschränkung von UDFs
- Deaktivieren Sie unnötige User Defiend Functions (UDFs) und stellen Sie sicher, dass nur vertrauenswürdige Bibliotheken verwendet werden.
- Überwachen Sie den Zugriff auf
@@plugin_dir
und beschränken Sie Schreibrechte.
3. Einschränkung von Dateizugriffen
- Beschränken Sie den Zugriff auf
LOAD DATA INFILE
auf vertrauenswürdige Benutzer. - Implementieren Sie strenge Dateiberechtigungen und überwachen Sie den Zugriff auf sensitive Verzeichnisse.
Fazit
MariaDB und MySQL bieten leistungsfähige Funktionen, die bei unsachgemäßer Konfiguration erhebliche Sicherheitsrisiken mit sich bringen können. Die Kombination aus LOAD DATA INFILE
-Befehl und die Möglichkeit durch UDFs Remote Code zu laden sind eine gefundene Einladung für Hacker. Windows-Systeme sind besonders anfällig für SSRF-Angriffe, während sowohl Windows- als auch Linux-Systeme durch RCE gefährdet sind, abhängig von der spezifischen Konfiguration und den Benutzerrechten. Durch geeignete Sicherheitsmaßnahmen und eine sorgfältige Konfiguration können diese Risiken jedoch erheblich reduziert werden.
Professionelle Hilfe erwünscht?
Sentiguard ist spezialisiert auf Notfallhilfe nach Cyberattacken, IT Sicherheitsbeauftragte und IT Sicherheitskonzepte nach BSI Standard. Haben Sie Fragen und wünschen Sie unverbindliche Beratung, dann melden Sie sich gerne bei uns: