MySQL: LOAD DATA INFILE führt zu Dateizugriff, UDF zu Remote Code Execution

Table of Contents

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 auf Y gesetzt
  • secure_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.

Related Posts

Sicherheitslücke in SAP NetWeaver Application Server ABAP und ABAP Platform

Am 23. April 2024 wurde eine kritische Sicherheitslücke in SAP NetWeaver Application Server ABAP und ABAP Platform (Version unbekannt) entdeckt und als CVE-2024-33006 identifiziert. Diese Schwachstelle ermöglicht eine unbeschränkte Dateiupload-Attacke, klassifiziert unter CWE-434.

Read More

Sicherheitslücke in Linksys-Routern ermöglicht Command Injection

Am 6. Mai 2024 wurden zwei Sicherheitslücken in Linksys-Routern entdeckt: CVE-2024-33788 und CVE-2024-33789. Diese Schwachstellen betreffen die Möglichkeit zur Command Injection in Linksys-Routern. Die Schwere dieser Sicherheitslücken hat laut BSI einen CVSS Base Score von 9.8/10, aber ein Proof-of-Concept wurde bereits veröffentlicht.

Read More

VMware schließt mehrere Sicherheitslücken in Workstation und Fusion

VMware hat Updates für VMware Workstation und Fusion veröffentlicht, die mehrere kritische Sicherheitslücken beheben. Diese Sicherheitsanfälligkeiten wurden als CVE-2024-22267, CVE-2024-22268, CVE-2024-22269 und CVE-2024-22270 identifiziert und am 14. Mai 2024 bekannt gegeben.

Read More