SSHole — zraniteľnosť, ktorá umožňuje pripojenie cez SSH bez hesla v systémoch s Musl

Vývojári OpenSSH zverejnili núdzovú aktualizáciu OpenSSH 10.6p2, ktorá pridáva ochranu proti kritickej zraniteľnosti (CVE nebol priradený), ktorá dostala kódové meno „SSHole“ a umožňuje obísť autentifikáciu. V systémoch s knižnicou Musl zraniteľnosť umožňuje pripojenie k používateľovi, pre ktorého nie je nastavené heslo, zadaním akéhokoľvek hesla obsahujúceho viac ako 256 znakov. Problém sa týka distribúcií Linuxu, ktoré používajú štandardnú knižnicu musl, ale nepoužívajú PAM (Pluggable Authentication Modules), ako sú OpenWRT, Alpine, Buildroot a Yocto. Obzvlášť nebezpečné je to, že často je prístup cez heslo zablokovaný pre používateľa root, čím sa dá každému vzdialene pripojiť s právami správcu.

Chyba, ktorá vedie k zraniteľnosti, nie je v kóde OpenSSH, ale je zneužívaná cez sshd. Vzhľadom na závažnosť problému bol v verzii OpenSSH 10.6p2 navrhnutý obchádzajúci variant blokovania zraniteľnosti. Majiteľom zraniteľných systémov sa odporúča, aby nečakali na vydanie aktualizácií, ale okamžite vypnuli autentifikáciu heslom pomocou parametra „PasswordAuthentication no“ v /etc/ssh/sshd_config alebo úplne vypnuli SSH.

Problém sa neprejavuje v systémoch okrem Linuxu a v Linuxových prostrediach na báze glibc, ako aj v systémoch, ktoré používajú PAM pri autentifikácii pomocou hesla. Oprava je už dostupná v Alpine a OpenWRT.

Zraniteľnosť súvisí s nesprávnou interakciou OpenSSH a funkcie crypt() z musl. Na ochranu pred určením existencie používateľov prostredníctvom analýzy rozdielov v čase spracovania požiadaviek OpenSSH od roku 2016 pri kontrole bezheslových účtov používa štandardný postup kontroly hesla: volá funkciu „crypt(zadané heslo, soľ)“ so soľou iného používateľa, ktorý má platný hash hesla, po čom porovnáva hash vrátený funkciou crypt s hodnotou z poľa s hashom hesla.

Avšak v musl funkcia crypt() pre hashe SHA-512 vracia znak „*“, ak dĺžka zadaného hesla presahuje 256 bajtov (obmedzenie zavedené v roku 2012 na ochranu pred DoS útokmi, pretože pri prenose veľkých hodnôt dochádza k veľkej záťaži CPU). Taký istý symbol sa používa v poli s hashom hesla v „/etc/shadow“ na označenie účtov, pre ktoré je autentifikácia heslom zablokovaná.

Ako útočník, ktorý má prístup k SSH serveru, môže sa pripojiť k akémukoľvek účtu, ktorého heslo je v súbore "\/etc\/shadow" označené symbolom "*", tým, že odošle reťazec dlhý od 257 do 1024 bajtov. Problém sa týka mnohých existujúcich Docker obrazov, ktoré boli postavené na Alpine Linux, ako aj štandardných obrazov Alpine pre cloudové systémy AWS a Azure, kde je pre používateľa root namiesto hash hesla zobrazený znak "*".

Je pozoruhodné, že v oficiálnych Docker obrazoch, ktoré používajú Alpine, bol od roku 2015 nastavený prázdny root heslo, a po zistení tohto faktu bol namiesto hash hesla nastavený znak "!". Avšak jeho prítomnosť blokovala prístup cez SSH kľúče, takže od roku 2022 bol symbol na zablokovanie prístupu cez heslo nahradený na "*".

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