Kwetsbaarheden in swhkd, een snelkoppelingsmanager voor Wayland

Er is een reeks kwetsbaarheden geïdentificeerd in swhkd (Simple Wayland HotKey Daemon), veroorzaakt door onjuist werken met tijdelijke bestanden, opdrachtregelparameters en Unix-sockets. Het programma is geschreven in Rust en verwerkt het indrukken van sneltoetsen in omgevingen die zijn gebaseerd op het Wayland-protocol (een configuratiebestand-compatibel analoog van het sxhkd-proces dat wordt gebruikt in X11-gebaseerde omgevingen).

Het pakket bevat een swhks-proces zonder privileges dat sneltoetsacties uitvoert, en een swhkd-proces op de achtergrond dat als root draait en communiceert met invoerapparaten op het uinput API-niveau. Een Unix-socket wordt gebruikt om de interactie tussen swhks en swhkd te organiseren. Met behulp van Polkit-regels kan elke lokale gebruiker het proces /usr/bin/swhkd als root uitvoeren en er willekeurige parameters aan doorgeven.

Geïdentificeerde kwetsbaarheden:

  • CVE-2022-27815 – Een proces-PID opslaan in een bestand met een voorspelbare naam en in een map die door andere gebruikers kan worden geschreven (/tmp/swhkd.pid). Elke gebruiker kan een bestand /tmp/swhkd.pid aanmaken en de pid van een bestaand proces daarin plaatsen, waardoor swhkd niet meer kan starten. Als er geen bescherming is tegen het maken van symbolische koppelingen in /tmp, kan de kwetsbaarheid worden gebruikt om bestanden in elke systeemmap te maken of te overschrijven (de PID wordt naar het bestand geschreven) of om de inhoud van elk bestand op het systeem te bepalen (swhkd drukt de volledige inhoud van het PID-bestand naar stdout). Het is opmerkelijk dat in de uitgebrachte oplossing het PID-bestand niet naar de map /run is verplaatst, maar naar de map /etc (/etc/swhkd/runtime/swhkd_{uid}.pid), waar het ook niet thuishoort.
  • CVE-2022-27814 – Door de opdrachtregeloptie “-c” te manipuleren die wordt gebruikt om een ​​configuratiebestand op te geven, is het mogelijk om het bestaan ​​van elk bestand op het systeem te bepalen. Om bijvoorbeeld /root/.somefile te controleren, kunt u “pkexec /usr/bin/swhkd -d -c /root/.somefile” uitvoeren en als het bestand ontbreekt, verschijnt de foutmelding “/root/.somefile bestaat niet " zal worden vertoond. Net als bij de eerste kwetsbaarheid is het oplossen van het probleem een ​​raadsel. Het oplossen van het probleem komt neer op het feit dat het externe hulpprogramma “cat” (“Command::new(“/bin/cat”)).arg(path) wordt nu gestart om het configuratiebestand output()') te lezen.
  • CVE-2022-27819 – Het probleem houdt ook verband met het gebruik van de optie “-c”, waardoor het volledige configuratiebestand wordt geladen en geparseerd zonder de grootte en het type van het bestand te controleren. Om bijvoorbeeld een Denial of Service te veroorzaken doordat er onvoldoende vrij geheugen is en valse I/O wordt gecreëerd, kunt u bij het opstarten een blokapparaat opgeven ("pkexec /usr/bin/swhkd -d -c /dev/sda") of een karakterapparaat dat een oneindige stroom aan gegevens produceert. Het probleem werd opgelost door de rechten opnieuw in te stellen voordat het bestand werd geopend, maar de oplossing was niet compleet, omdat alleen de gebruikers-ID (UID) opnieuw wordt ingesteld, maar de groeps-ID (GID) hetzelfde blijft.
  • CVE-2022-27818 – Er wordt een Unix-socket gemaakt met behulp van het bestand /tmp/swhkd.sock dat in een beschrijfbare map is gemaakt, wat tot vergelijkbare problemen leidt als de eerste kwetsbaarheid (elke gebruiker kan /tmp/swhkd.sock maken en deze genereren of onderscheppen toetsaanslaggebeurtenissen).
  • CVE-2022-27817 - Invoergebeurtenissen worden geaccepteerd van alle apparaten en in alle sessies, d.w.z. een gebruiker van een andere Wayland-sessie of van de console kan gebeurtenissen onderscheppen wanneer sneltoetsen door andere gebruikers worden ingedrukt.
  • CVE-2022-27816 Het swhks-proces gebruikt, net als swhkd, het PID-bestand /tmp/swhks.pid in de beschrijfbare directory /tmp. Het probleem is vergelijkbaar met het eerste beveiligingslek, maar is niet zo gevaarlijk omdat swhks wordt uitgevoerd onder een gebruiker zonder rechten.

Bron: opennet.ru

Voeg een reactie