Root Schwachstelle am Linux Kernel a Verweigerung vum Service am Systemd

Sécherheetsfuerscher vu Qualys hunn Detailer vun zwee Schwachstelle verroden, déi de Linux Kernel an de Systemd Systemmanager beaflossen. Eng Schwachstelle am Kernel (CVE-2021-33909) erlaabt e lokale Benotzer Code Ausféierung mat Rootrechter duerch Manipulatioun vun héich nestéierte Verzeichnisser z'erreechen.

D'Gefor vun der Schwachstelle gëtt verschäerft duerch d'Tatsaach datt d'Fuerscher fäeg sinn Aarbechtsexploiten virzebereeden déi op Ubuntu 20.04/20.10/21.04, Debian 11 a Fedora 34 an der Standardkonfiguratioun funktionnéieren. Et gëtt bemierkt datt aner Verdeelungen net getest goufen, awer theoretesch och ufälleg fir de Problem sinn a kënnen attackéiert ginn. De komplette Code vun den Ausnotzen ass versprach publizéiert ze ginn nodeems de Problem iwwerall eliminéiert ass, awer fir de Moment ass nëmmen e Prototyp vu limitéierter Funktionalitéit verfügbar, wat de System veruersaacht. De Problem ass zënter Juli 2014 präsent an beaflosst Kernel Releases ab 3.16. De Schwachstelle fix gouf mat der Gemeinschaft koordinéiert an den 19. Juli an de Kernel ugeholl. D'Haaptverdeelungen hu scho Updates fir hir Kernel Packagen generéiert (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

D'Vulnerabilitéit ass verursaacht duerch Versoen d'Resultat vun enger size_t zu int Konversioun ze kontrolléieren ier Dir Operatiounen am seq_file Code ausféiert, deen Dateien aus enger Sequenz vun records erstellt. Versoen iwwerpréift kann zu Out-of-bounds Schreiwen op de Puffer resultéieren wann Dir eng ganz nestéiert Verzeichnisstruktur erstellt, montéiert an läscht (Weegréisst méi wéi 1 GB). Als Resultat kann en Ugräifer eng 10-Byte-String "//deleted" erreechen, déi mat engem Offset vun "-2 GB - 10 Bytes" geschriwwe gëtt, déi op d'Géigend direkt virum zougewisen Puffer weist.

De preparéierten Exploit erfuerdert 5 GB Erënnerung an 1 Millioun gratis Inoden fir ze bedreiwen. Den Exploit funktionnéiert andeems Dir mkdir () nennt fir eng Hierarchie vun ongeféier eng Millioun Ënnerverzeechnungen ze kreéieren fir eng Dateiweegréisst méi wéi 1 GB z'erreechen. Dëse Verzeechnes gëtt iwwer bind-mount an engem getrennten Benotzernummraum montéiert, duerno gëtt d'rmdir () Funktioun ausgeführt fir se ze läschen. Parallel gëtt e Fuedem erstallt deen e klengen eBPF Programm lued, deen op der Bühn gespaart gëtt nodeems den eBPF Pseudocode gepréift gouf, awer virun senger JIT Kompilatioun.

Am onprivilegéierten Userid Nummraum gëtt d'Datei /proc/self/mountinfo opgemaach an de laange Wee vum Bind-mounted Verzeichnis gëtt gelies, wat resultéiert datt d'String "//deleted" an d'Gebitt geschriwwe gëtt virum Start vum Puffer. D'Positioun fir d'Linn ze schreiwen ass gewielt sou datt et d'Instruktioun am scho getesten awer nach net kompiléierte eBPF Programm iwwerschreift.

Als nächst, um eBPF Programmniveau, gëtt onkontrolléiert Out-of-Puffer Schreiwen a kontrolléiert Fäegkeet transforméiert fir aner Kernelstrukturen ze liesen a schreiwen duerch Manipulatioun vun de btf a map_push_elem Strukturen. Als Resultat bestëmmt d'Exploit de Standort vum modprobe_path[] Puffer am Kernel Memory an iwwerschreift de "/sbin/modprobe" Wee dran, wat Iech erlaabt de Start vun all ausführbaren Datei mat Rootrechter am Fall vun engem request_module () Opruff, déi ausgefouert gëtt, zum Beispill, wann Dir Netlink Socket erstellt.

Fuerscher bidden verschidde Léisungen déi effektiv nëmme fir e spezifeschen Ausbeutung sinn, awer eliminéieren de Problem selwer net. Et ass recommandéiert "/proc/sys/kernel/unprivileged_userns_clone" op 0 ze setzen fir d'Montageverzeechnungen an engem getrennten User ID Nummraum auszeschalten, an "/proc/sys/kernel/unprivileged_bpf_disabled" op 1 fir d'Luede vun eBPF Programmer an de Kernel auszeschalten.

Et ass bemierkenswäert datt wärend en alternativen Attack analyséiert gëtt, deen d'Benotzung vum FUSE-Mechanismus involvéiert anstatt Bind-Mound fir e grousse Verzeechnes ze montéieren, d'Fuerscher op eng aner Schwachstelle koumen (CVE-2021-33910) déi de Systemd Systemmanager beaflosst. Et huet sech erausgestallt datt wann Dir probéiert e Verzeechnes mat enger Weegréisst iwwer 8 MB iwwer FUSE ze montéieren, de Kontrollinitialiséierungsprozess (PID1) aus dem Stack Memory leeft an ofstierzt, wat de System an engem "Panik" Staat setzt.

De Problem ass datt systemd den Inhalt vun /proc/self/mountinfo verfollegt a parséiert, an all Mountpunkt an der unit_name_path_escape () Funktioun veraarbecht, déi eng strdupa () Operatioun ausféiert, déi d'Donnéeën op de Stack placéiert anstatt an dynamesch zougeloossene Gedächtnis. . Zënter datt déi maximal Stackgréisst iwwer RLIMIT_STACK limitéiert ass, verursaacht d'Veraarbechtung vun engem ze grousse Wee op de Montéierungspunkt de PID1-Prozess fir ze crashen an de System ze stoppen. Fir en Ugrëff, kënnt Dir am einfachsten FUSE Modul a Kombinatioun mat engem benotzen héich nested directory als Montéierung Punkt benotzen, de Wee Gréisst vun iwwerschratt 8 MB.

De Problem erschéngt zënter systemd 220 (Abrëll 2015), ass schonn am Haaptsystemd Repository fixéiert a fixéiert an Distributiounen (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). Notamment, an der systeméierter Verëffentlechung 248 funktionnéiert den Exploit net wéinst engem Fehler am systemd Code deen d'Veraarbechtung vun /proc/self/mountinfo versoen. Et ass och interessant datt am Joer 2018 eng ähnlech Situatioun entstanen ass a wann Dir probéiert en Exploit fir d'CVE-2018-14634 Schwachstelle am Linux Kernel ze schreiwen, Qualys Fuerscher koumen op dräi kritesch Schwachstelle am Systemd.

Source: opennet.ru

Setzt e Commentaire