Egy sebezhetőséget (CVE-2026-3497) fedeztek fel a gssapi.patch javításban, amely GSSAPI-alapú kulcscsere-támogatást ad az OpenSSH-hoz, és amelyet számos Linux disztribúcióban használnak. Ez a sebezhetőség mutatódereferencia-vesztést, memória-sérülést és jogosultság-elválasztás megkerülését (Privsep) okozhat. A sebezhetőség távolról is kihasználható a hitelesítés előtt. A problémát felfedező kutató bemutatta, hogyan lehet folyamatösszeomlást kezdeményezni egyetlen módosított hálózati csomag SSH-kiszolgálóra küldésével. Lehetséges, hogy a szolgáltatásmegtagadáson kívül más veszélyesebb kihasználási módok is léteznek.
Érdemes megjegyezni, hogy az OpenSSH fejlesztői kezdetben biztonsági aggályok miatt elutasították a GSSAPI javítást. Számos Linux disztribúció azonban beépítette a javítást az OpenSSH csomagjaiba. A GSSAPI javítás több verziója is forgalomban van, de a legtöbbjük sebezhetőséget tartalmaz. A javítás jelenleg csak javításként érhető el, amely az sshpkt_disconnect() függvényhívást az ssh_packet_disconnect() függvényhívásra cseréli a kexgsss.c fájlban.
A sebezhetőséget jelenleg Debian és Ubuntu rendszereken erősítették meg. Más disztribúciók esetében (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora) az érintett javítás és a sebezhetőség tisztázása folyamatban van. A sebezhetőség csak akkor jelentkezik, ha a "GSSAPIKeyExchange yes" opció engedélyezve van a beállításokban. A kihasználhatóságot a csomag összeállításában használt fordítási beállítások is befolyásolják ezekben a disztribúciókban.
A sebezhetőséget az sshpkt_disconnect() függvény hibája okozza, amely miatt a folyamat nem állt le a kapcsolatmegszakadási üzenet fogadása után, ami lehetővé tette a támadó számára, hogy a kulcsegyeztetési szakaszban a működési logika által nem kívánt üzenetet küldjön. szerver GSSAPI üzenettípus. Egy nem ütemezett GSSAPI üzenet vételekor a szerver egy várakozási sorba helyezi azt, és nem szakítja félbe a program végrehajtását, de nem inicializálja a kapcsolati paramétereket meghatározó változókat. Ezt követően az eseményciklus végrehajt egy kódot, amely beolvassa a nem inicializált recv_tok struktúrát a veremből (az előző függvényhívásból a veremben maradt adatokat olvasva), IPC-n keresztül elküldi a privilegizált folyamatnak, majd átadja a gss_release_buffer() függvénynek, amely meghívhatja a free() függvényt, és felszabadíthatja a memóriát az érvénytelen, egy véletlenszerű memóriahelyre hivatkozó mutató számára.
Forrás: opennet.ru
