Beveiligingsonderzoeker Asim Manizada heeft een kwetsbaarheid onthuld CIFSwitch — lokale privilege-escalatie in de Linux-kernel gekoppeld aan een gebruikerspakket cifs-utils. Het probleem betreft de verwerking van CIFS/SMB Kerberos/SPNEGO upcall, dat wil zeggen het mechanisme waarmee de CIFS-kernelclient informatie voor Kerberos-authenticatie opvraagt bij de gebruikershelper bij het koppelen van SMB-bronnen. De beschrijving is gepubliceerd na het aflopen van het embargo van linux-distros; op het moment van publicatie was er nog geen CVE-identificatienummer toegewezen.
De kern van de kwetsbaarheid is dat, een niet-geprivilegieerde gebruiker request_key("cifs.spnego", …) kan aanroepen en een vervalste sleutelomschrijving kan doorgeven. In een normaal scenario zou de CIFS-kernelclient deze string zelf moeten genereren: deze bevat informatie over de server, UID, credential UID, PID, doel upcall en andere parameters. Echter, de kernel controleerde niet of de omschrijving daadwerkelijk afkomstig was van de CIFS-subsystemen, en cifs.upcall, uitgevoerd als root via de standaard request-key regel, vertrouwde deze velden als gegevens gemaakt door de kernel.
De kwetsbaarheid is niet universeel een 'gat in elke Linux uit de doos'. Voor exploitatie moeten verschillende voorwaarden kloppen: een kwetsbare kernel, geïnstalleerde cifs-utils met de cifs.spnego-regel, de mogelijkheid voor niet-geprivilegieerde gebruikers om user/mount namespaces te creëren, en de afwezigheid van blokkades door SELinux, AppArmor of een andere LSM-beleid. In een bericht op oss-security wordt specifiek aangegeven dat dit op kwetsbare systemen een pad biedt van een niet-geprivilegieerde lokale gebruiker naar het uitvoeren van code als root.
Technisch gezien bouwt de keten zich op rond het feit, dat cifs.upcall kan overstappen naar de namespaces die in de vervalste omschrijving zijn opgegeven en een NSS-verzoek kan uitvoeren tot het uiteindelijke intrekken van privileges. Als gevolg hiervan kan een door de aanvaller gecontroleerde omgeving invloed uitoefenen op het opladen van de NSS-module door het root-proces. In openbare beschrijvingen wordt benadrukt dat dit een logische fout is op de grens van de kernel en de gebruikersruimte, en geen klassieke memory corruption-kwetsbaarheid.
De oplossing in de kernel bleek klein van omvang: voor het type sleutels cifs.spnego is er een controle toegevoegd die beschrijvingen afwijst die niet zijn gemaakt door de CIFS-client met zijn privécgf spnego_cred. Deze aanpak sluit een klasse aanvallen af zonder noodzakelijke synchronisatiewijzigingen in cifs-utils, hoewel de auteur opmerkt dat aanvullende versterking van de gebruikersruimte nog steeds wenselijk is.
AlmaLinux heeft gemeld, waarbij de basis logica aanwezig is in alle ondersteunde versies van AlmaLinux, terwijl AlmaLinux 8, 9, 10 en Kitten 10 als getroffen worden beschouwd bij een geïnstalleerde cifs-utils. De gepatchte kernels zijn voorbereid in de testing-repositories: voor AlmaLinux 9 is het pakket kernel-5.14.0-687.5.4.el9_8 of nieuwer opgegeven, voor AlmaLinux 10 — kernel-6.12.0-211.7.4.el10_2 of nieuwer.
Als tijdelijke maatregel, voordat het gecorrigeerde kernel wordt geïnstalleerd, wordt voorgesteld om cifs-utils te verwijderen als de SMB/CIFS-client op het systeem niet wordt gebruikt, het laden van de cifs-module te verbieden, de cifs.spnego-regel in request-key te overschrijven of niet-bevoegde user namespaces uit te schakelen. Deze werkarounds kunnen de Kerberos-authenticatie voor CIFS-mounts verstoren, dus op servers waar Kerberos-gecertificeerde SMB-shares daadwerkelijk worden gebruikt, moeten ze voorzichtig worden toegepast.
CIFSwitch is ook interessant vanwege de ontdekcontext: de auteur beschrijft het als resultaat van het zoeken naar meervoudige stappenketens met behulp van LLM en grafische weergave van de verbindingen tussen beveiligingsobjecten. Maar de praktische conclusie voor beheerders is vrij nuchter: controleer de aanwezigheid van cifs-utils, de status van user namespaces en kernelupdates, vooral op systemen met lokale gebruikers of container-scripts met uitgebreide namespace-mogelijkheden.
Bron: linux.org.ru
