Warum ist es schlecht, dass root Dateien in ein Verzeichnis schreibt, das nicht root gehört?

28

Dies kam in einem Kommentar zu einer anderen Frage auf und ich würde mich freuen, wenn mir jemand die Gründe dafür erklären könnte.

Ich schlug vor, dass Apache die Fehler für einen bestimmten VHost im Home-Verzeichnis eines Benutzers protokolliert. Dies wurde abgeschossen, weil es unsicher war. Warum?

Ich habe in einem Antwortkommentar um Klarstellung gebeten, aber alles, was ich bekam, war, dass es unsicher ist, Root-Schreibzugriff in einem Ordner zu haben, der nicht root gehört. Könnte das nochmal jemand erklären?

Vielen Dank,

Bart.

Bart B
quelle
4
Was macht Apache, wenn er als root läuft? Das Prinzip des geringsten Privilegs spricht dagegen!
Jonathan Leffler
1
Apache läuft als www, wird aber als root gestartet, damit es wie üblich an Port 80 gebunden werden kann. Anscheinend meldet es sich auch als root an.
Bart B

Antworten:

31

Da ein böser Benutzer in böswilliger Absicht versuchen kann, darauf hinzuweisen, dass die Datei rootan einen anderen Speicherort geschrieben wird . Das ist nicht so einfach, aber wirklich möglich.

Wenn ein Benutzer beispielsweise den Weg finden würde, einen Symlink vom angeblichen Apache-Protokoll zu / etc / shadow zu erstellen, ist das System plötzlich unbrauchbar. Apache ( root) würde die Anmeldeinformationen Ihrer Benutzer überschreiben und das System fehlerhaft machen.

ln -s /etc/shadow /home/eviluser/access.log

Wenn die Datei access.log für den Benutzer nicht beschreibbar ist, kann es schwierig sein, sie zu hijacken. Es ist jedoch besser, diese Möglichkeit zu umgehen !

Eine Möglichkeit besteht darin, logrotate zu verwenden, um die Aufgabe zu erledigen und den Link zu einer Datei zu erstellen, die noch nicht vorhanden ist. Dieses Logrotate wird jedoch überschrieben, sobald die Protokolle größer werden:

ln -s /etc/shadow /home/eviluser/access.log.1

Hinweis :

Die Symlink- Methode ist nur einer der möglichen Angriffe, die als Proof-of-Concept angegeben werden.

Sicherheit muss auf der weißen Liste stehen , nicht auf der schwarzen Liste, von der wir wissen , dass sie ein Problem darstellt.

AlberT
quelle
Gibt es eine Möglichkeit, Berechtigungen dafür festzulegen, damit sie die Datei nur lesen und nicht löschen, bearbeiten oder etwas anderes tun können (wie chown, chmod usw.)?
Joshua
Sie sollten diesen Vorgang für jede mögliche Zieldatei ausführen! Diese beschreibbare Datei ist die beliebteste und nicht der Link selbst, der dem Angreifer gehört, als er sie erstellt hat.
drAlberT
2
@Joshua: chown kann nur von root ausgeführt werden. chmod kann von jedem ausgeführt werden, dem die Datei gehört. IIRC kann das Umbenennen von jedem erfolgen, dem das Verzeichnis gehört. Wie AlberT erwähnt, kann das Erstellen eines Links vor dem Erstellen der Datei durch root von jedem Benutzer ausgeführt werden, der in das Verzeichnis schreiben kann.
22.
2
@atk: Außerdem kann jeder, dem das Verzeichnis gehört, generell Dateien daraus entfernen (es sei denn, das Sticky- +tBit ist gesetzt), auch wenn er keine Schreibberechtigung für die Dateien selbst hat (da unlink () ein Schreibzugriff auf das Verzeichnis ist, nicht auf das Datei). Selbst wenn root die Datei im Voraus erstellt, kann der Verzeichnisinhaber sie möglicherweise löschen und durch einen Symlink zu einer anderen Datei ersetzen.
James Sneeringer
1
Wenn eviluser in / home / eviluser schreiben kann (oder die Berechtigungen für das Verzeichnis ändern kann - sie besitzen es, IOW), spielt es keine Rolle, wie die Berechtigungen für access.log lauten. Der böse Benutzer kann die Datei (erneut) verschieben und ihren Symlink an seine Stelle setzen. Eine andere Frage ist, ob die Software darauf achtet, was sie öffnet.
Jonathan Leffler
1

Das allgemeine Prinzip, dass Prozesse nicht in ein Verzeichnis geschrieben werden, das sie nicht besitzen oder dem sie nicht vertrauen, ist gut. In diesem speziellen Fall ist es jedoch vernünftig, darauf zu vertrauen, dass der Apache-Code das Protokoll mit O_NOFOLLOWetc öffnet : Die Anmeldung beim Home-Verzeichnis eines Benutzers ist eine übliche Einrichtung.

Poolie
quelle