
Linux-Kernel-Exploit
Linux-Privilegieneskalation durch Ausnutzung des waitid-Syscalls. Der Exploit wird dir von @XeR_0x2A und @chaign_c vom HexpressoTeam nur zu Bildungszwecken zur Verfügung gestellt.
Der Fehler wurde am 2017-05-21 eingeführt und am 2017-10-09 behoben; 4.14.0-rc4+ ist bekanntermaßen anfällig.
Wenn du ein Anfänger- oder Fortgeschrittenen-Level im Exploit-Schreiben hast, empfehlen wir dir, es selbst auszunutzen, bevor du unsere Implementierung liest. Es ist eine sehr gute Übung mit einer einfachen Exploit-Primitive (beliebiges Schreiben in beschreibbaren Kernel-Speicher).
Wir fordern auch @LiveOverflow dazu heraus, es zu versuchen.
Hier ist die Beschreibung:
oss-security:
Hallo,Chris Salls entdeckte, dass bei der Refaktorisierung des waitid()-Syscalls im Linux-Kernel v4.13 versehentlich nicht mehr überprüft wurde, ob das eingehende Argument auf den Userspace zeigte. Dadurch konnten lokale Angreifer direkt in den Kernel-Speicher schreiben, was zu einer Privilegieneskalation führen konnte.
Eingeführt durch diesen Commit:
https://git.kernel.org/linus/4c48abe91be03d191d0c20cc755877da2cb35622Behoben mit diesem Commit im Mainline-Baum:
https://git.kernel.org/linus/96ca579a1ecc943b75beba58bebb0356f6cc4b51Dies sollte in Kürze im -stable-Zweig (in der zukünftigen v4.13.7) behoben werden:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/log/?h=linux-4.13.yDanke,
waitid:
waitid -- wartet darauf, dass ein Kindprozess seinen Zustand ändert.
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
Der Kernel prüft nicht, ob infop ein Kernelland- oder ein Userland-Zeiger ist, daher können wir Speicher auf jeder Kernel-Speicherseite mit Schreibberechtigung überschreiben. Das Lustige daran ist, dass wir nur teilweise kontrollieren, was geschrieben wird.
Es gibt mehr als tausend Möglichkeiten, dies auszunutzen. Wir haben uns entschieden, diese Schreib-Primitive in eine Nullzeiger-Dereferenzierung zu verwandeln. Wir haben die Variable have_canfork_callback im .BSS-Abschnitt des Kernels überschrieben. Wird diese Variable auf etwas anderes als 0 (wahr) gesetzt, führt das dazu, dass ein nicht gesetzter Callback (null) „bei einem neuen Task aufgerufen wird, bevor der Prozess offengelegt wird“.
Dank an Chris Salls und @kees_cook für das Teilen der CVE.
Erster „Real-World“-Linux-Kernel-Exploit von @XeR_0x2A und @chaign_c von HexpressoTeam.
2017-10-22