Az OpenSSH fejlesztői kiadták az OpenSSH 10.6p2 sürgősségi frissítését, amely a „SSHole” kódnevű kritikus sebezhetőséggel szembeni védelmet nyújt (CVE nem lett kijelölve), amely lehetővé teszi az azonosítás megkerülését. Musl könyvtárral rendelkező rendszerek esetén a sebezhetőség lehetővé teszi, hogy bármely jelszóval, amely több mint 256 karakterből áll, belépjenek egy olyan felhasználóhoz, akinek nincs jelszava. A probléma a Linux disztribúciókat érinti, amelyek a musl szabványos könyvtárat használják, de nem alkalmazzák a PAM-t (Pluggable Authentication Modules), például az OpenWRT, Alpine, Buildroot és Yocto esetében. Különösen veszélyes, hogy a jelszavas bejelentkezés gyakran le van tiltva a root felhasználó számára, lehetővé téve bárki számára, hogy távolról adminisztrátori jogokkal csatlakozzon.
A sebezhetőséghez vezető hiba nem az OpenSSH kódjában található, hanem az sshd-n keresztül kiaknázva. Tekintettel a probléma súlyosságára, az OpenSSH 10.6p2 verzióban javasolt egy alternatív módszert a sebezhetőség blokkolására. A problémás rendszerek tulajdonosainak javasolják, hogy ne várjanak a frissítések megjelenésére, hanem haladéktalanul tiltsák le a jelszavas azonosítást az „PasswordAuthentication no” paraméter használatával a /etc/ssh/sshd_config fájlban vagy teljesen tiltsák le az SSH-t.
A probléma nem jelentkezik más rendszereken, mint a Linux, sem a glibc alapú Linux környezetekben, valamint olyan rendszereken, amelyek a jelszavas azonosításhoz PAM-ot használnak. A javítás már elérhető az Alpine és az OpenWRT esetében.
A sebezhetőség az OpenSSH és a musl crypt() funkciójának helytelen interakciójával kapcsolatos. Az OpenSSH 2016 óta a jelszó nélküli felhasználói fiókok ellenőrzése során a jelszavak létezésének meghatározása érdekében a kérésfeldolgozás alatt eltelt időkülönbségek elemzésével védelmet nyújt: a „crypt(átadott jelszó, só)” funkciót egy másik felhasználó sójával hívja meg, aki érvényes jelszóhash-t használ, majd összehasonlítja a crypt által visszaadott hasht az imitált jelszó hash értékével.
A musl esetében a crypt() funkció a SHA-512 hasheknél „*” karaktert ad vissza, ha az átadott jelszó hossza meghaladja a 256 bájtot (a korlátozást 2012-ben vezették be az DoS-támadások megakadályozására, mivel a nagy értékek megadása nagy CPU terhelést eredményez). Ugyanez a karakter használatos a jelszó hash-t tároló „/etc/shadow” fájlban a jelszavas azonosítás letiltott fiókjának jelölésére.
A támadó, aki hozzáférhet egy SSH-szerverhez, bármelyik olyan fiókhoz csatlakozhat, amelynek jelszava a "\/etc\/shadow" fájlban "*" karaktert tartalmaz, ha 257-től 1024 byte hosszúságú karakterláncot ad át. A probléma számos létező Docker-képig kiterjed, amelyeket Alpine Linux segítségével készítettek, valamint az AWS és Azure felhőplatformokhoz készült hivatalos Alpine képekre, ahol a root felhasználónál a jelszóhash helyett "*" jeligét használtak.
Érdekes módon az Alpine-t használó hivatalos Docker-képekben 2015 óta üres root jelszó volt beállítva, azonban a probléma felfedezése után a jelszóhash helyett "!" karaktert használtak. Ennek a jelenléte azonban blokkolta az SSH-kulcsokkal való bejelentkezést, ezért 2022 óta a jelszóval való bejelentkezést blokkoló karaktert "*"-ra cserélték.
Forrás: opennet.ru
