
Lokale Rechteausweitung auf Root über Sudo chroot in Linux
Lokale Privilegieneskalation zu Root über Sudo chroot unter Linux.
Für die Berichterstattung kannst du hier lesen:
TL;DR und CMIIW Also, sudo ist ja der Befehl, um einen Befehl als Admin/Root auszuführen. Ein Benutzer darf sudo ausführen, wenn er in der sudoers-Gruppe ist. Aber es gibt einen Bug im sudo-Binary, der es einem normalen Benutzer ohne sudo-Berechtigung ermöglicht, als Root zu wechseln.
Der Bug ist eine Schwachstelle in der sudo-Befehlsoption --chroot. Dieses chroot ermöglicht es, einen Befehl in einem temporären Verzeichnis auszuführen. Das Problem ist, dass sudo die Konfigurationsdatei in diesem temporären Verzeichnis prüft, bevor es prüft, ob der Benutzer sudo ausführen darf.
Wenn diese Konfigurationsdatei irgendwie bearbeitet werden kann und auf einen modifizierten Code verweist, um Root-Zugriff zu erlangen, können wir Root-Zugriff bekommen, ohne uns zu authentifizieren oder als sudoer registriert zu sein. Denn während des Prozesses eskaliert das System den Befehl vorübergehend als Root, um diese Informationen zu erhalten.
Was ist diese Konfigurationsdatei? /etc/nsswithc.conf. Diese Konfigurationsdatei wird vom System verwendet, um beispielsweise herauszufinden, zu welcher Gruppe ein Benutzer gehört usw. In dieser nsswitch-Datei sieht es ungefähr so aus:
<database> <source1> <source2> ... <sourcen>
passwd files systemd
group files systemd
shadow files
gshadow files
...
Nun! Wenn die verwendete Datenquelle files ist, ruft nss eine Bibliothek namens libnss_files.so.2 auf. Diese Datei enthält C-Code, und wenn wir sie bearbeiten, können wir mit hoher Wahrscheinlichkeit Root-Zugriff erlangen. Denn das System führt dies als Root aus, auch wenn der Befehl nicht von einem sudoers-Benutzer ausgeführt wird. Das ist in der Datei exploit.sh zu sehen.
Zusammenfassung:
/etc/nsswitch.conf, in einem Ordner, den wir kontrollieren.