Im Polkit-Komponent, der in Distributionen verwendet wird, um die Ausführung von nicht privilegierten Benutzern für Aktionen, die erweiterte Zugriffsrechte erfordern (z. B. das Einbinden von USB-Laufwerken), zu organisieren, wurde eine Schwachstelle (CVE-2021-3560) entdeckt, die es einem lokalen Benutzer ermöglicht, Root-Rechte im System zu erlangen. Die Schwachstelle wurde in Polkit Version 0.119 behoben.
Das Problem tritt seit der Version 0.113 auf, jedoch haben viele Distributionen, darunter RHEL, Ubuntu, Debian und SUSE, die anfällige Funktionalität in Pakete auf Basis älterer Polkit-Versionen zurückportiert (die Paketfixes sind bereits in den Distributionen verfügbar).
Das Problem manifestiert sich in der Funktion polkit_system_bus_name_get_creds_sync(), die die Identifikatoren (uid und pid) des Prozesses abrufen, der eine Privilegienerhöhung anfordert. Der Prozess wird von Polkit identifiziert, indem ihm ein eindeutiger Name im DBus zugewiesen wird, der später zur Überprüfung der Berechtigungen verwendet wird. Wenn der Prozess vom dbus-daemon getrennt wird, kurz bevor der Handler polkit_system_bus_name_get_creds_sync gestartet wird, erhält der Handler anstelle eines einzigartigen Namens einen Fehlercode.
Die Schwachstelle entsteht dadurch, dass der zurückgegebene Fehlercode nicht ordnungsgemäß verarbeitet wird und die Funktion polkit_system_bus_name_get_creds_sync() den Wert TRUE anstelle von FALSE zurückgibt, obwohl sie den Prozess nicht mit uid/pid abgleichen und die für den Prozess angeforderten Berechtigungen überprüfen konnte. Der Code, aus dem die Funktion polkit_system_bus_name_get_creds_sync() aufgerufen wurde, geht davon aus, dass die Überprüfung erfolgreich war und die Anfrage zur Erhöhung der Berechtigungen von root und nicht von einem unprivilegierten Benutzer kam, was es ermöglicht, privilegierte Aktionen ohne zusätzliche Authentifizierung und Berechtigungsbestätigung auszuführen.
Quelle: opennet.ru
