In der Anwendung zur isolierten Ausführung von Programmen Firejail wurde eine Sicherheitsanfälligkeit (CVE-2022-31214) entdeckt, die es einem lokalen Benutzer ermöglicht, Root-Rechte im Hauptsystem zu erlangen. Ein funktionierender Exploit ist öffentlich verfügbar und wurde in den aktuellen Versionen von openSUSE, Debian, Arch, Gentoo und Fedora mit installierter Firejail-Anwendung getestet. Das Problem wurde in der Version firejail 0.9.70 behoben. Als vorübergehende Sicherheitsmaßnahme können in den Einstellungen (/etc/firejail/firejail.config) die Parameter „join no“ und „force-nonewprivs yes“ gesetzt werden.
Firejail nutzt zur Isolation den Mechanismus der Namensräume (namespaces), AppArmor und die Filterung von Systemaufrufen (seccomp-bpf) in Linux, benötigt jedoch für die Konfiguration des isolierten Starts erweiterte Berechtigungen, die durch die Bindung an das SUID-Root-Utility oder über sudo erlangt werden. Die Schwachstelle resultiert aus einem Logikfehler bei der Option „—join=“, die dazu dient, sich mit einer bereits laufenden isolierten Umgebung zu verbinden (analog zum Login-Befehl für eine Sandbox-Umgebung) und das Umfeld anhand der darin laufenden Prozess-ID zu definieren. Vor dem Entzug der Berechtigungen ermittelt Firejail die Berechtigungen des angegebenen Prozesses und wendet sie auf den neuen Prozess an, der über die Option „—join“ mit der Umgebung verbunden wird.
Vor der Verbindung wird überprüft, ob der angegebene Prozess in der firejail-Umgebung läuft. Diese Prüfung bewertet das Vorhandensein der Datei /run/firejail/mnt/join. Um die Schwachstelle auszunutzen, kann der Angreifer eine nachgeahmte nicht isolierte firejail-Umgebung simulieren, indem er den Mount-Namespace verwendet, und sich dann mit der Option „—join“ mit ihr verbinden. Wenn im Setup der Modus zur Verweigerung zusätzlicher Privilegien in neuen Prozessen (prctl NO_NEW_PRIVS) nicht aktiviert ist, wird firejail den Benutzer mit der nachgeahmten Umgebung verbinden und versuchen, die Einstellungen des Benutzer-Namespace des Init-Prozesses (PID 1) anzuwenden.
Letztendlich wird der über «firejail —join» verbundene Prozess im ursprünglichen Namensraum des Benutzers mit unveränderten Rechten ausgeführt, jedoch in einem anderen, vom Angreifer vollständig kontrollierten Mount-Punkt. Der Angreifer kann unter anderem setuid-root-Programme im von ihm geschaffenen Mount-Punkt ausführen, was es ihm ermöglicht, beispielsweise die Einstellungen von /etc/sudoers oder die PAM-Parameter in seiner Dateihierarchie zu ändern und Befehle mit Root-Rechten über die Tools sudo oder su auszuführen.
Quelle: opennet.ru
