Warum ist chroot (2) für nicht privilegierte Benutzer nicht verfügbar?

7

Warum ist dies für chroot(2)nicht privilegierte Benutzer nicht verfügbar?

Ich verstehe die vorhandenen Antworten im Internet nicht. Zum Beispiel dieses https://lists.freebsd.org/pipermail/freebsd-security/2003-April/000123.html .

Würde sudowirklich funktionieren, wenn /etc/sudoersund /etcnicht im Besitz von root? Ein nicht privilegierter Benutzer kann nicht einfach Root-eigene Setuid-Binärdateien in chroot erstellen, oder?

Wie genau kann ein nicht privilegierter Benutzer die Chroot-Umgebung untergraben?

Ich kann mir nur so etwas vorstellen

ln /mnt/backup/XYZ/etc/sudoers $CHROOT/etc/sudoers
ln /usr/bin/sudo $CHROOT/usr/bin/sudo

Dabei handelt es sich um XYZeine Sicherungsinstanz, bei der der Administrator wirklich Fehler gemacht hat und meinem Benutzer etwas Gefährliches erlaubt hat. Aber das ist etwas Besonderes. Gibt es eine einfachere Möglichkeit zum Ausnutzen, chroot(2)wenn es nicht privilegierten Benutzern zur Verfügung stand?

woky
quelle

Antworten:

4

Ein gewöhnlicher Benutzer kann keine Setuid-Binärdatei erstellen, aber nichts hindert ihn daran, eine feste Verknüpfung zu einer vorhandenen Setuid-Binärdatei herzustellen. Wenn er also Schreibberechtigung für ein Verzeichnis im selben Dateisystem wie hat /usr/bin, kann er das Gefängnis in dieses Verzeichnis stellen, einen festen Link zu suoder sudodarin erstellen und eine benutzerdefinierte /etc/passwdund /etc/sudoersin das Gefängnis stellen.

Vielleicht funktioniert das nicht sudo, da möglicherweise überprüft wird, ob /etc/sudoersroot gehört. Aber ich wette su, überprüft nicht den Besitz von /etc/passwd.

Barmar
quelle
Dies ist in Linux 3.6 und höher kein Problem mehr, bei dem für die Erstellung von Hardlinks der Benutzer die vorhandene Datei besitzen oder Lese- / Schreibzugriff darauf haben muss. Siehe lore.kernel.org/patchwork/patch/315952 .
Friedrich
4

Laut Brad Spengler unter https://forums.grsecurity.net/viewtopic.php?f=7&t=2522 gibt es eine einfache Möglichkeit, mit UID 0 zu eskalieren CAP_SYS_CHROOT(die Fähigkeit zu verwenden chroot(2):

CAP_SYS_CHROOT: generisch: Von Julien Tinnes / Chris Evans: Wenn Sie Schreibzugriff auf dasselbe Dateisystem wie eine Suid-Root-Binärdatei haben, richten Sie eine Chroot-Umgebung mit einer Backdoor-Bibliothek ein und führen Sie dann eine fest verknüpfte Suid-Root-Binärdatei in Ihrer Chroot aus und erhalten Sie die vollständige Root Privilegien durch Ihre Hintertür

Gast
quelle
Dies ist in Linux 3.6 und höher kein Problem mehr, bei dem für die Erstellung von Hardlinks der Benutzer die vorhandene Datei besitzen oder Lese- / Schreibzugriff darauf haben muss. Siehe lore.kernel.org/patchwork/patch/315952 .
Friedrich
1

chroot(2)ändert das Arbeitsverzeichnis nicht, so dass nach dem Aufruf .außerhalb des Baumes verwurzelt sein kann /. Sie können dann eine beliebige setuid-Binärdatei innerhalb der Chroot ausführen, indem Sie einen relativen Pfad verwenden. Es gibt wahrscheinlich viele Möglichkeiten, dies auszunutzen. Durch Ändern /etc/ld.so.preloadin Ihrem chroot-Verzeichnis können Sie beispielsweise beliebigen Code mit Root-Rechten ausführen. Sie können sich ein Beispiel ansehen .

Friedrich
quelle