A biztonsági rés, amely az OpenSSH GSSAPI-alapú kulcsmódosítási támogatását hozzáadó gssapi.patch-ban található, a memória dereferálásához, a memória sérüléséhez és a privilégiumok elválasztásának megkerüléséhez vezet (Privsep). A sérülékenység távolról kihasználható az autentikációs folyamat előtt. A probléma felfedezője bemutatta, hogy egy módosított hálózati csomag küldésével lefagyasztja az SSH szervert. Nem zárható ki, hogy a szolgáltatásmegtagadás mellett a sebezhetőség más, veszélyesebb kihasználási lehetőségei is léteznek.
Figyelemre méltó, hogy az OpenSSH fejlesztői a GSSAPI támogatására vonatkozó javaslatot kezdetben elutasították, mivel nem voltak biztosak annak biztonságában. Ennek ellenére számos Linux disztribúció beépítette ezt a javítást az OpenSSH csomagjaiba. A GSSAPI javítási változatainak több verziója létezik, azonban a legtöbbjükben van egy, a sérülékenységhez vezető hiba. A hiba javítása jelenleg csak javított formában érhető el, amely a kexgsss.c fájlban a sshpkt_disconnect() függvény hívásának ssh_packet_disconnect()-ra történő cserélésekor történik.
A sérülékenység jelenlegi létezését a Debian és az Ubuntu rendszerekben megerősítették. A többi disztribúcióban a problémás javítás alkalmazását és az arra való érzékenységét még pontosítják (SUSE/openSUSE, RHEL, Gentoo, Arch, Fedora). A sebezhetőség csak akkor lép fel, ha a GSSAPIKeyExchange yes opció be van kapcsolva a beállításokban. A kihasználás lehetőségére a disztribúciókban használt fordító opciók is hatással vannak.
A sérülékenység oka a sshpkt_disconnect() függvényben található hiba, amely miatt a folyamat nem fejeződött be a disconnect üzenet érkezése után, ez lehetővé tette a támadó számára, hogy a kulcskonzultáció fázisában olyan üzenetet küldjön, amelyet a működési logika nem tervezett. a szerver GSSAPI üzenet típusa. A nem tervezett GSSAPI üzenetek érkezése után, szerver elhelyezi azt a sorban, és nem szakítja meg aprogram végrehajtását, de nem inicializálja azokat a változókat, amelyek a kapcsolat paramétereit határozzák meg. A jövőben az eseménykezelés során a kódot hajtják végre, amely olvassa az inicializálatlan recv_tok struktúrát a veremből (azokat az adatokat olvassa, amelyek a funkció korábbi meghívásából maradtak a veremben), elküldi a jogosultsággal rendelkező folyamatnak IPC-n keresztül, majd átadja a gss_release_buffer() függvénynek, amely hívhatja a free() függvényt, és felszabadíthatja a memóriát egy érvénytelen mutatóra, amely véletlenszerű memória területre mutat.
Forrás: opennet.ru
