Die Information über die sechste Schwachstelle (1, 2-3, 4, 5) wurde veröffentlicht, die es einem nicht privilegierten lokalen Benutzer ermöglicht, Root-Rechte zu erhalten, indem Daten im Seiten-Cache überschrieben werden. Diese Schwachstelle trägt den Codenamen PinTheft. Ein Exploit-Prototyp ist verfügbar. Eine CVE-Identifikation wurde noch nicht zugewiesen. Ein Fix ist bisher nur als Patch verfügbar, der am 5. Mai veröffentlicht und am 11. Mai in den netdev-Zweig aufgenommen wurde, jedoch noch nicht in die Korrekturversionen des Kernels integriert ist.
Die Schwachstelle ist in der Implementierung des Netzwerkprotokolls RDS (Reliable Datagram Sockets) vorhanden, das für den Hochgeschwindigkeitsnachrichtenaustausch zwischen Knoten in einem Cluster mit minimaler Verzögerung und garantierter Zustellung konzipiert ist. Ein Angriff ist möglich auf Systemen mit aktivierter io_uring-Unterstützung (io_uring_disabled=0) und einem Kernel, der mit den Optionen CONFIG_RDS, CONFIG_RDS_TCP und CONFIG_IO_URING kompiliert wurde. Damit der Exploit funktioniert, muss in dem System eine lesbare ausführbare Datei mit SUID-root-Flag vorhanden sein.
Für das automatische Laden des rds_tcp Kernelmoduls fordert der Exploit die Übermittlung von Daten über RDS mit dem Transport SO_RDS_TRANSPORT=2 an. Es wird festgestellt, dass unter den getesteten Linux-Distributionen das Kernelmodul rds standardmäßig nur in Arch Linux bereitgestellt wird. Um die Schwachstelle zu blockieren, können die Autoladefunktionen der Kernelmodule rds und rds_tcp wie folgt gesperrt werden: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf
Die Schwachstelle wird durch einen Fehler in der Implementierung des Zerocopy-Mechanismus in der Funktion rds_message_zcopy_from_user() verursacht, die eine direkte Modifikation der Daten im Seiten-Cache zur Vermeidung zusätzlicher Pufferspeicherung vornimmt. Bei einem Fehlschlag wurde das Feld rm->data.op_nents nicht bereinigt, was zu einer doppelten Freigabe des Puffers (double-free) führte. Das Auftreten eines inkorrekten Wertes im Referenzzähler konnte ausgenutzt werden, um Daten im Seiten-Cache zu überschreiben, indem der Zeiger auf den festen Puffer io_uring manipuliert wurde.
Ansonsten ist der Mechanismus zur Ausnutzung typisch für alle Schwachstellen dieser Art — der Angreifer erreicht die Ablage einer Programmdatei mit dem SUID-Root-Flag im Seitencache, anschließend fügt er in den ELF-Header Code zur Ausführung von /usr/bin/sh ein. Nach dieser Manipulation führt der Start des Programms nicht zum Laden der originalen ausführbaren Datei vom Speicher, sondern einer geänderten Kopie aus dem Seitencache. Im Gegensatz zu früheren Exploits ist die neue Variante ausschließlich für die Angriffe auf das Tool „su“ angepasst, kann jedoch auch eingesetzt werden, wenn im System solche SUID-Programme vorhanden sind wie mount, passwd, chsh, newgrp, umount und pkexec.
Quelle: opennet.ru
