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
