Er zijn kwetsbaarheden (CVE nog niet toegewezen) ontdekt in de package manager Guix in de implementatie van het interne commando «guix substitute», dat automatisch wordt opgeroepen door het achtergrondproces guix-daemon tijdens het uitvoeren van pakketinstallatieoperaties. Dit commando wordt gebruikt om reeds gebouwde binaire pakketten van externe servers te downloaden, waarbij hun integriteit wordt gecontroleerd met digitale handtekeningen. De meest ernstige kwetsbaarheid maakt het mogelijk om op afstand het uitvoeren van code op het systeem van de gebruiker te organiseren met de rechten waaronder het achtergrondproces guix-daemon wordt uitgevoerd.
Het probleem heeft betrekking op alle configuraties met het guix-daemon-proces, ongeacht of dit wordt uitgevoerd met root-rechten of onder een niet-priviliged gebruiker. Voor het misbruiken van de kwetsbaarheid is het voldoende om een poging te doen om kant-en-klare binaire pakketten te downloaden van de server, die door de aanvaller worden gecontroleerd. Daarbij hoeft de kwaadaardige server niet expliciet gekozen of in de gebruikersinstellingen opgegeven te worden — het kan worden bepaald met behulp van de optie «—discover», wat het mogelijk maakt om de server tijdens een MITM-aanval te vervangen. In configuraties waarin guix-daemon met verhoogde privileges is gestart, kan een lokale gebruiker een aanval uitvoeren als verbinding kan worden gemaakt met het achtergrondproces via een Unix-socket (dat standaard voor alle gebruikers toegankelijk is).
De kwetsbaarheid is aanwezig in de handler «restore-file», die wordt toegepast bij het uitpakken tijdens de download van een pakket, zonder te wachten op de volledige download en verificatie van het gedownloade archief met een digitale handtekening. Het probleem wordt veroorzaakt door het ontbreken van controle op de aanwezigheid van de karakters «.», «/» en «..» in de bestandspaden die in het archief zijn opgeslagen. Door ongeldig bestandsnamen in het archief te substitueren, kan een aanvaller ongewenst een willekeurig bestand in elk deel van het bestandssysteem schrijven, afhankelijk van de rechten waaronder het achtergrondproces guix-daemon draait.
Om code in het systeem uit te voeren, kan men bijvoorbeeld een automatisch opstartend script toevoegen, zoals «~/.bashrc» of «~/.profile», of het bestand «~/.ssh/authorized_keys» met SSH-sleutels wijzigen. Als in een multi-user systeem guix-daemon onder de root-gebruiker draait, kan de aanvaller het wachtwoordbestand of systeem scripts overschrijven.
De mogelijkheid om vervangende servers te creëren voor het verspreiden van schadelijke pakketten is ontstaan omdat de procedure voor het ophalen van metadata (narinfo) over beschikbare binaire pakketten (fetch-narinfos) geen servercertificaatcontrole uitvoerde, vertrouwend op het feit dat het grootste deel van de metadata werd ondertekend met een digitale handtekening. Het bleek dat de handtekening de URL voor het downloaden van het pakket niet dekte, waardoor deze kon worden vervalst zonder de integriteit van de metadata te schenden. Uiteindelijk zou het vervalste pakket worden afgewezen vanwege het niet doorstaan van de inhoudscontrole op basis van de hash, die werd ondertekend met de digitale handtekening, maar deze controle werd pas uitgevoerd na de uitpakfase, waarin het probleem met speciale tekens in bestandsnamen zich manifesteerde.
Naast het commando ‘guix substitute’ wordt de kwetsbare handler ‘restore-file’ ook gebruikt bij de commando’s ‘guix offload’, ‘guix archive —extract’ en ‘guix challenge’, waardoor de kwetsbaarheid ook kan worden misbruikt. Als tijdelijke oplossing voor het blokkeren van de kwetsbaarheid wordt aanbevolen om expliciet de optie ‘—no-substitutes’ op te geven in alle guix-commando’s. De oplossing voor de kwetsbaarheid is opgenomen in de codebasis van Guix. Gebruikers wordt aangeraden om onmiddellijk de door de ontwikkelaars aangemaakte updates guix en guix-daemon te installeren.
Naast het genoemde probleem zijn er nog drie kwetsbaarheden in Guix verholpen:
- De mogelijkheid om binaire pakketten te vervalsen door het ontbreken van controle op de overeenstemming tussen het aangevraagde pakket en de teruggegeven metadata in de handler fetch-narinfos. De kwetsbaarheid kan worden gebruikt om een verouderde versie van het aangevraagde pakket terug te geven, die kwetsbaarheden bevat.
- Het bepalen van de inhoud van de eerste regel van willekeurige bestanden in het systeem door een lokale gebruiker een verzoek met de URI ‘file://’ te sturen (‘—substitute-urls file:///etc/shadow’). Als guix-daemon met root-rechten draait, zal het de aangevraagde file lezen, vaststellen dat het geen metadata is en een foutmelding weergeven waarin de regel wordt genoemd die niet kon worden ontleed.
- Het opgeven van een speciaal geformatteerde naam van een externe opslagplaats ("..\/..\/..\/..\/newfile") bij het uitvoeren van de commando's "guix pull" en "guix time-machine" maakt het mogelijk om gegevens met commit-informatie op te slaan in een willekeurig bestaand bestand in het bestandssysteem, mits de inhoud lijkt op een lijst van regels in de Scheme-taal. Deze kwetsbaarheid kan worden gebruikt voor DoS-aanvallen, maar het is ook mogelijk dat door middel van slinkse manipulaties met het pseudo-bestandssysteem \/proc gevaarlijkere manipulaties met het systeem kunnen worden bereikt.
Bron: opennet.ru
