U patchu gssapi.patch, koji se koristi u mnogim Linux distribucijama i koji dodaje podršku za razmjenu ključeva na bazi GSSAPI u OpenSSH, otkrivena je ranjivost (CVE-2026-3497) koja vodi do dereferenciranja pokazivača, oštećenja memorije i zaobilaženja mehanizma podjele privilegija (Privsep). Ranjivost se može eksploatisati daljinski u fazi prije autentifikacije. Istraživač koji je otkrio problem demonstrirao je iniciranje rušenja procesa slanjem jednog modificiranog paketa na SSH poslužitelj. Nije isključeno da osim usluge, postoje opasniji načini eksploatacije ranjivosti.
Zanimljivo je da su se prije neki developeri OpenSSH odlučili ne prihvatiti izmjenu za podršku GSSAPI u glavni sastav zbog sumnji u njenu sigurnost. Ipak, mnoge Linux distribucije uključile su ovaj patch u svoje pakete s OpenSSH. U praksi se susreće nekoliko verzija GSSAPI patcha, no većina njih ima grešku koja dovodi do ranjivosti. Ispravak je trenutno dostupan samo u obliku patcha, čija se promjena svodi na zamjenu poziva funkcije sshpkt_disconnect() na ssh_packet_disconnect() u datoteci kexgsss.c.
Trenutno je prisutnost ranjivosti potvrđena u Debianu i Ubuntu. U ostalim distribucijama provjerava se primjena problematičnog patcha i njegova podložnost ranjivosti (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora). Ranjivost se manifestira samo kada je u postavkama uključena opcija «GSSAPIKeyExchange yes». Na mogućnost eksploatacije također utječu opcije kompajlera s kojima je paket sastavljen u distribucijama.
Uzrok nastanka ranjivosti je greška u funkciji sshpkt_disconnect(), zbog koje proces nije završavao nakon primanja disconnect poruke, što je omogućilo napadaču u fazi pregovaranja ključeva da pošalje nepredviđenu logikom rada poslužitelja tip GSSAPI poruke. Nakon primitka izvanredne GSSAPI poruke, server stavlja ga u red i ne prekida izvršavanje programa, ali pritom ne inicijalizira varijable koje definiraju parametre veze. Dalje, u ciklusu obrade događaja izvršava se kod koji čita neinicijaliziranu strukturu recv_tok iz stoga (čitaju se podaci koji su ostali u stogu od prošlog poziva funkcije), šalje je privilegiranom procesu putem IPC-a i zatim prosljeđuje funkciji gss_release_buffer(), koja može pozvati funkciju free() i osloboditi memoriju za neispravnu adresu koja upućuje na nasumično područje memorije.
Izvor: opennet.ru
