Eskalation von Berechtigungen beim Schreiben von / etc / passwd, jedoch ohne SUID-Berechtigung für su

Dec 16 2020

Dies ist keine Übung, es gibt möglicherweise keine Lösung.

Wir produzieren ein Docker-Image (basierend auf CentOS), das von einem Nicht-Root-Benutzer ausgeführt werden soll. Dieser Benutzer hat jedoch Schreibzugriff auf / etc / passwd, da er sich in der Gruppe "root" befindet. Hier sind / etc / passwd Berechtigungen:

-rw-rw-r-- 1 root root 692 Dec 16 14:35 /etc/passwd

Dies ist ein kritischer Fehler, der eine einfache Eskalation von Berechtigungen ermöglichen soll. Ich kann einen Benutzer zu / etc / passwd hinzufügen.

Ich kann jedoch nicht zu diesem Benutzer wechseln, da su keine SUID-Berechtigung hat:

-rwxr-xr-x 1 root root 32128 Sep 30 17:46 /bin/su

Infolgedessen verfügt der Benutzer nicht über genügend Berechtigungen für eine erfolgreiche Ausführung von su:

su: cannot set groups: Operation not permitted

Wie ich verstanden habe, wird der Befehl su unter den meisten Linux-Versionen mit der Berechtigung SUID konfiguriert. Das bedeutet, dass jeder, der su ausführt, vom Root-Benutzer ausgeführt wird. Eine andere Alternative könnte darin bestehen, mit Fähigkeiten zu spielen. Ich nehme an, dass CAP_SETGID und CAP_SETUID erforderlich sind und vielleicht einige andere. Wenn su mit diesen Funktionen konfiguriert wurde, wird die SUID-Berechtigung möglicherweise nicht benötigt. In unserem Docker-Image gibt es jedoch keine Funktionen für su. Es scheint also, dass nur root su richtig ausführen kann.

Außerdem ist sudo nicht installiert und es wird kein sshd / telnetd ausgeführt.

Wie kann ich die Anmeldeinformationen verwenden, die zu / etc / passwd hinzugefügt wurden? Curl ist verfügbar, wenn dies helfen kann.

Antworten

3 RoryMcCune Dec 16 2020 at 23:46

Wenn Sie auf einem Standard-Linux-Host (VM oder Server) Zugriff auf Konten haben /etc/passwdoder diese /etc/shadowdann ändern oder Anmeldeinformationen zu Konten hinzufügen können, was offensichtlich ein ernstes Problem darstellt ( /etc/passwdin dieser Antwort finden Sie Einzelheiten zu den Konsequenzen einer Änderung

In einem Docker-Container ist normalerweise die Software, die diese Dateien verwendet, nicht installiert, also keine Linux-PAM, keine SSHD oder andere Software, die eine Authentifizierungsdatenbank verwenden würde.

Ohne diese Art von Software können Sie nicht viel tun, da es keine Programme gibt, die mit diesen Dateien arbeiten.

Wenn die im Container ausgeführte Anwendung von einer /etc/passwdÄnderung Gebrauch macht, kann dies natürlich Auswirkungen haben. Dies hängt jedoch davon ab, was der Container tut.