
Exploits für die Sicherheitslücke CVE-2022-0847 (Dirty Pipe).
Veröffentlicht am 7. März 2022 von Max Kellerman[2], ist CVE-2022-0847 eine Schwachstelle im Linux-Kernel (Versionen zwischen 5.8 und 5.16.11), die es Angreifern ermöglicht, schreibgeschützte oder unveränderliche Dateien zu überschreiben und ihre Privilegien im System des Opfers zu erhöhen. Die CVE-2022-0847 wurde Dirty Pipe genannt und hat einen CVSS-Score von 7,8 (gilt als hoch).
Die Dirty Pipe-Schwachstelle wird als ein Fehler beschrieben, bei dem das Flags-Attribut der struct pipe_buffer[7] in den Funktionen copy_page_to_iter_pipe und push_pipe im Linux-Kernel keine ordnungsgemäße Initialisierung enthielt und daher veraltete Werte enthalten konnte. Eines der Flags, das im Flags-Attribut der struct pipe_buffer gesetzt werden kann, ist das Flag namens PIPE_BUF_FLAG_CAN_MERGE. Es gibt an, ob das Zusammenführen weiterer Daten in den pipe_buffer erlaubt ist oder nicht. Wenn Daten in einen pipe_buffer kopiert werden, können weitere Daten zum pipe_buffer hinzugefügt werden, wenn die kopierte Seite weniger als 4096 Bytes groß ist.
Durch das Injizieren von PIPE_BUF_FLAG_CAN_MERGE in einen Page-Cache-Referenz wurde es möglich, Daten im Page-Cache zu überschreiben, indem einfach neue Daten in das speziell vorbereitete Pipe geschrieben werden (dieser Vorgang wird in den folgenden Absätzen beschrieben). Auf diese Weise kann ein lokaler Benutzer ohne Privilegien diesen Fehler nutzen, um Seiten im Page-Cache zu überschreiben/zu beschreiben, die von schreibgeschützten Dateien unterstützt werden, und so seine Privilegien im System zu erhöhen.
Um die Schwachstelle auszunutzen, müssen die folgenden Schritte befolgt werden:
Kompilieren Sie alles mit dem folgenden Befehl:
make
./exploit-1
Exploit 1, der in der Datei exploit-1.c des Repositorys enthalten ist, besteht darin, das Passwort des Root-Benutzers in der Datei /etc/passwd (diese Datei enthält Informationen über das Benutzerkonto, wie das verschlüsselte Passwort) zu überschreiben und schließlich ein Terminal mit Root-Zugriff bereitzustellen. Dazu war Folgendes erforderlich:
/etc/passwd erstellen./etc/passwd in das Pipe übertragen und den Inhalt dieser Datei mit einem bekannten neuen Root-Passwort überschreiben (wie in den oben genannten Schritten 4 und 5 dargestellt).find / -perm -4000 2>/dev/null
./exploit-2 <path-of-suid-binary>
Exploit 2, der in der Datei exploit-2.c des Repositorys enthalten ist, besteht darin, eine SUID-Binärdatei zu überschreiben und zu kapern (diese Art von Angriff wurde in Abschnitt 3.5.2 beschrieben) und schließlich ein Terminal mit Root-Zugriff bereitzustellen. Dazu war Folgendes erforderlich:
/tmp/sh), die wiederum eine Shell-Terminal mit Root-Zugriff erzeugt./tmp/sh ausgeführt, wodurch eine neue Shell mit Root-Zugriff geöffnet wird../exploit-3
Exploit 3, der in der Datei exploit-3.c des Repositorys enthalten ist, verwendet die gleichen Schritte wie Exploit 1, um Root-Shell-Zugriff zu erhalten. Der Unterschied besteht darin, dass Exploit 3 nach Erhalt des Root-Shell-Zugriffs einen öffentlichen SSH-Schlüssel (Secure Shell) des Angreifers in die Datei /root/.ssh/authorized_keys lädt und einen TCP-Tunnel (Transmission Control Protocol) für den SSH-Remote-Zugriff unter Verwendung der Plattform Ngrok erstellt.
[1] AHMED, Alexis. Privilege Escalation Techniques: Learn the art of exploiting Windows and Linux systems. Birmingham: Packt Publishing, Oktober 2021.
[2] KELLERMANN, Max. The Dirty Pipe Vulnerability. Verfügbar unter: https://dirtypipe.cm4all.com/. Zugriff am: 23. Juli 2022.
[3] Exploit Database. Verfügbar unter: https://www.exploit-db.com/. Zugriff am: 3. August 2022.
[4] Traitor: Automatically exploit low-hanging fruit to pop a root shell. Verfügbar unter: https://github.com/liamg/traitor. Zugriff am: 3. August 2022.
[5] PayloadsAllTheThings. Linux - Privilege Escalation. Verfügbar unter: https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Linux%20-%20Privilege%20Escalation.md#cve-2022-0847-dirtypipe. Zugriff am: 3. August 2022.
[6] Repository des Linux-Kernels - Struct pipe_inode_info. Verfügbar unter: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L76. Zugriff am: 3. August 2022.
[7] Repository des Linux-Kernels - Struct pipe_buffer. Verfügbar unter: https://github.com/torvalds/linux/blob/v5.8/include/linux/pipe_fs_i.h#L26-L32. Zugriff am: 3. August 2022.
[8] ARNTZ, Pieter. Linux "Dirty Pipe" vulnerability gives unprivileged users root access. Malwarebytes Lab. Verfügbar unter: https://www.malwarebytes.com/blog/news/2022/03/linux-dirty-pipe-vulnerability-gives-unprivileged-users-root-access. Zugriff am: 3. August 2022.
[9] Picus Security. Linux “Dirty Pipe” CVE-2022-0847 Vulnerability Exploitation Explained. Verfügbar unter: https://www.picussecurity.com/resource/linux-dirty-pipe-cve-2022-0847-vulnerability-exploitation-explained. Zugriff am: 3. August 2022.
[10] Exploit Database - Local Privilege Escalation (Dirty Pipe). Verfügbar unter: https://www.exploit-db.com/exploits/50808. Zugriff am: 3. August 2022.