Sie entdeckten eine Schwachstelle in Firejail, die Root-Zugriff auf das System ermöglichte

Sie haben kürzlich die Nachricht veröffentlicht, dass Es wurde eine Sicherheitsanfälligkeit festgestellt (bereits gelistet unter CVE-2022-31214) im Sandboxing-Tool der Firejail-App, wird detailliert beschrieben, dass der erkannte Fehler es einem lokalen Benutzer ermöglichen könnte, Root auf dem Hostsystem zu werden.

Firejail verwendet den Namespaces-Mechanismus, AppArmor und die Filterung von Systemaufrufen (seccomp-bpf) in Linux zur Isolierung, erfordert jedoch erhöhte Berechtigungen, um eine isolierte Version zu konfigurieren, die es erhält, indem es sich an das Suid-Root-Flag-Dienstprogramm bindet oder mit sudo ausführt.

Die Schwachstelle beruht auf einem Fehler in der Logik der Option „–join=“. », entwickelt, um eine Verbindung zu einer isolierten Umgebung herzustellen, die bereits ausgeführt wird (ähnlich dem Anmeldebefehl für eine Sandbox-Umgebung), wobei die Umgebung durch die ID des darin ausgeführten Prozesses definiert wird. In der Pre-Launch-Phase erkennt Firejail die Privilegien des angegebenen Prozesses und wendet sie mit der Option „–join“ auf den neuen Prozess an, der der Umgebung beitritt.

Bevor Sie eine Verbindung herstellen, prüft, ob der angegebene Prozess in der Firejail-Umgebung läuft. Diese Prüfung wertet die Existenz der Datei /run/firejail/mnt/join aus. Um die Schwachstelle auszunutzen, Ein Angreifer kann eine fiktive, nicht isolierte Firejail-Umgebung simulieren Verwenden Sie den Mount-Namespace und verbinden Sie sich dann mit der Option "--join".

Wenn die Konfiguration den Modus zum Verbieten des Erwerbs zusätzlicher Berechtigungen in neuen Prozessen (prctl NO_NEW_PRIVS) nicht aktiviert, verbindet Firejail den Benutzer mit einer fiktiven Umgebung und versucht, die Benutzernamensraumkonfiguration der Benutzerkennungen (Namensraumbenutzer) des Init-Prozesses anzuwenden ( PID1).

Der größte Teil der Logik hinter der Join-Funktion befindet sich im Quellcode aus der Datei `src/firejail/join.c`. Kritische Codeabschnitte werden mit ausgeführt erhöhte Privilegien (effektive UID 0). Die ID des als Befehl übergebenen Prozesses Das Zeilenargument wird überprüft, um festzustellen, ob es sich um ein r handeltContainer und bestimmen Sie einige seiner Eigenschaften, die Dies gilt auch für das Neueintrittsverfahren.

Die Hauptkriterien für die Entscheidung, ob dem Zielprozess beigetreten werden soll erfolgreich ist, ist das Vorhandensein einer Datei im Mount-Namespace des Ziels, Prozess gefunden in /run/firejail/mnt/join. Diese Überprüfung erfolgt auf f`is_ready_for_join()`-Funktion. Die Datei wird mit l geöffnetDie `O_RDONLY|O_CLOEXEC`-Flags und das Trace-`fstat()`-Ergebnis sollten folgende Anforderungen erfüllen:

– die Datei muss eine normale Datei sein.
– Die Datei muss der Benutzer-ID 0 gehören (aus Sicht des ursprünglichen Benutzers
Namensraum).
– Die Datei muss 1 Byte groß sein.

Als Ergebnis Der über "firejail --join" verbundene Prozess landet im Namensraum die ursprüngliche Benutzer-ID des Benutzers mit unveränderten Privilegien, aber in einem anderen Einhängepunktraum, der vollständig vom Angreifer kontrolliert wird.

Die resultierende "verbundene" Shell lebt nun auf dem ursprünglichen Benutzer
Namespace, wobei jedoch weiterhin die ursprünglichen normalen Benutzerrechte beibehalten werden Der Mount-Namespace wird vom Angreifer kontrolliert. Wie
die nonenewprivs-Konfiguration nicht angewendet wurde, kann der Angreifer jetzt
setuid-root-Programme innerhalb dieses Mount-Namensraums ausführen

Insbesondere kann ein Angreifer Setuid-Root-Programme im Bereich des von ihm erstellten Einhängepunkts ausführen, wodurch er beispielsweise die /etc/sudoers-Konfiguration oder PAM-Parameter in seiner Dateihierarchie ändern und die Möglichkeit erlangen kann, Befehle als Root auszuführen mit sudo oder seinen Dienstprogrammen.

Schließlich ist es erwähnenswert, dass ein funktionaler Exploit entwickelt wurde, der auf aktuellen Versionen von openSUSE, Debian, Arch, Gentoo und Fedora mit installiertem Firejail-Dienstprogramm getestet wurde.

Das Problem wurde in der Firejail-Version 0.9.70 behoben. Als Sicherheitsfix können Sie die Konfiguration (/etc/firejail/firejail.config) auf „no join“ und „force-nonewprivs yes“ setzen.

Schließlich wenn Sie mehr darüber wissen möchtenkönnen Sie die Details in der überprüfen folgenden Link


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.