Zraniteľnosť v GSSAPI patche pre OpenSSH, zneužiteľná na diaľku pred autentifikáciou

V patchi gssapi.patch, ktorý sa používa v mnohých distribúciách Linuxu a pridáva podporu pre výmenu kľúčov na báze GSSAPI do OpenSSH, bola identifikovaná zraniteľnosť (CVE-2026-3497), ktorá vedie k dereferencovaniu ukazovateľa, poškodeniu pamäte a obchádzaniu mechanizmu oddelenia privilégií (Privsep). Zraniteľnosť môže byť zneužitá na diaľku pred realizáciou autentifikácie. Výskumník, ktorý identifikoval problém, demonštroval iniciovanie havárie procesu prostredníctvom zaslania jedného modifikovaného sieťového paketu na SSH server. Nie je vylúčené, že okrem odmietnutia služby existujú aj nebezpečnejšie varianty zneužitia tejto zraniteľnosti.

Zaujímavé je, že v minulosti sa vývojári OpenSSH rozhodli neprijať zmenu na podporu GSSAPI do hlavnej verzie kvôli pochybnostiam o jej bezpečnosti. Napriek tomu mnohé distribúcie Linuxu zahrnuli tento patch do svojich balíkov s OpenSSH. Existuje niekoľko verzií GSSAPI patcha, ale vo väčšine z nich je prítomná chyba vedúca k zraniteľnosti. Oprava je zatiaľ dostupná len vo forme patcha, ktorý spočíva v zamene volania funkcie sshpkt_disconnect() na ssh_packet_disconnect() v súbore kexgsss.c.

V súčasnosti bola zraniteľnosť potvrdená v Debian a Ubuntu. Vo zvyšných distribúciách sa objasňuje použitie problémového patcha a jeho poddajnosť zraniteľnosti (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora). Zraniteľnosť sa prejavuje iba pri aktivovaní možnosti „GSSAPIKeyExchange yes“ v nastaveniach. Na možnosť zneužitia tiež vplývajú možnosti kompilátora, s ktorými bol balík v distribúciách zostavený.

Príčinou vzniku zraniteľnosti je chyba vo funkcii sshpkt_disconnect(), kvôli ktorej proces neukončil činnosť po prijatí disconnect správy, čo umožnilo útočníkovi v štádiu vyjednávania kľúčov poslať nesprávny typ GSSAPI správy. Po prijatí neočakávanej GSSAPI správy, servera ... server umiestňuje ho do fronty a nepretrhne vykonávanie programu, ale zároveň neiniitializuje premenné určujúce parametre pripojenia. Následne v cykle spracovania udalostí vykonáva kód, ktorý číta neinicializovanú štruktúru recv_tok zo zásobníka (čítajú sa dáta, ktoré zostali v zásobníku z predchádzajúceho volania funkcie), posiela ju privilegovanému procesu prostredníctvom IPC a potom ju odovzdáva funkcii gss_release_buffer(), ktorá môže vyvolať funkciu free() a uvoľniť pamäť pre neplatný ukazovateľ, ktorý odkazuje na náhodnú oblasť pamäte.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster