Managerul de pachete Guix a identificat vulnerabilități (CVE neatribuite) în implementarea comenzii interne „guix substitute”, apelată automat de procesul de fundal guix-daemon la executarea operațiunilor de instalare a pachetelor. Comanda este utilizată pentru a descărca pachete binare deja compilate de pe servere externe, verificându-le integritatea prin semnătură digitală. Cea mai periculoasă vulnerabilitate permite executarea de cod pe sistemul utilizatorului cu privilegii sub care rulează procesul de fundal guix-daemon.
Problema afectează toate configurațiile cu procesul guix-daemon, indiferent dacă este lansat cu privilegii root sau cu un utilizator neprivilegiat. Pentru a explora vulnerabilitatea, este suficientă orice încercare de descărcare de pachete binare gata făcute de la server, controlat de atacator. În acest context, malware-ul serverul nu trebuie neapărat să fie selectat sau specificat în setările utilizatorului — poate fi determinat prin opțiunea „—discover”, care permite substituirea serverului în timpul unui atac MITM. În configurațiile în care guix-daemon este lansat cu privilegii înalte, un utilizator local poate efectua un atac dacă are acces la procesul de fundal printr-un socket Unix (implicit accesibil tuturor utilizatorilor).
Vulnerabilitatea este prezentă în handlerul „restore-file”, utilizat pentru decompresia pe măsură ce pachetul este descărcat, fără a aștepta descărcarea completă și verificarea arhivei descărcate prin semnătură digitală. Problema este cauzată de lipsa unei verificări a prezenței caracterelor „.”, „/” și „..” în căile fișierelor plasate în arhivă. Prin substituirea unor nume de fișiere incorecte în arhivă, atacatorul poate obține scrierea unui fișier arbitrar în orice zonă a sistemului de fișiere, în limita permisiunilor sub care rulează procesul de fundal guix-daemon.
Pentru a organiza executarea propriului cod în sistem, de exemplu, se poate adăuga un script de auto-rulare, cum ar fi „~/.bashrc” sau „~/.profile”, sau se poate modifica fișierul „~/.ssh/authorized_keys” cu cheile SSH. Dacă în sistemul multi-utilizator guix-daemon rulează sub utilizatorul root, atacatorul poate suprascrie fișierul cu parole sau scripturi sistemice.
Posibilitatea creării de servere false pentru distribuirea pachetelor malițioase a fost cauzată de faptul că procedura de încărcare a metadatelor (narinfo) pentru pachetele binare disponibile (fetch-narinfos) nu verifica certificatul serverului, bazându-se pe faptul că partea principală a metadatelor era certificat cu o semnătură digitală. Așa cum s-a dovedit, semnătura nu includea URL-ul pentru descărcarea pachetului, ceea ce permitea substituirea acestuia fără a încălca integritatea metadatelor. În cele din urmă, pachetul falsificat ar fi fost respins din cauza eșecului la verificarea conținutului său prin hash-ul certificat cu semnătura digitală, dar această verificare se efectua după etapa de dezarhivare, în care apărea problema caracterelor speciale în numele fișierelor.
Pe lângă comanda „guix substitute”, handlerul vulnerabil „restore-file” este implicat în funcționarea comenzilor „guix offload”, „guix archive —extract” și „guix challenge”, prin care vulnerabilitatea poate fi, de asemenea, exploatată. Ca o soluție de ocolire pentru blocarea vulnerabilității, se recomandă specificarea explicită a opțiunii „—no-substitutes” în toate comenzile guix. Corecția vulnerabilității a fost acceptată în baza de cod Guix. Utilizatorii sunt sfătuiți să instaleze imediat actualizările formulate de dezvoltatori pentru guix și guix-daemon.
Pe lângă problema menționată în Guix, au fost remediate alte trei vulnerabilități:
- Posibilitatea substituției pachetelor binare din lipsa verificării conformității pachetului solicitat cu metadatele returnate în handlerul fetch-narinfos. Vulnerabilitatea poate fi utilizată pentru a livra o versiune depășită a pachetului solicitat, care conține vulnerabilități.
- Determinarea conținutului primei linii a fișierelor arbitrare din sistem prin transmiterea unei cereri de către un utilizator local cu URI „file://” („—substitute-urls file:///etc/shadow”). Dacă guix-daemon este executat cu privilegii de root, acesta va citi fișierul solicitat, va determina că nu este metadate și va genera o eroare, în textul căreia va fi menționată linia care nu a putut fi analizată.
- Specifying a specially formatted name for the external repository («..\/..\/..\/..\/newfile») when executing the commands «guix pull» and «guix time-machine» allows data containing commit information to be recorded in any existing file in the filesystem, as long as its content resembles a list of strings in the Scheme language. This vulnerability can be exploited for DoS attacks, but it is also possible that through clever manipulations with the pseudo-FS /proc, more dangerous system manipulations could be accomplished.
Sursa: opennet.ro
