Bylo zveřejněno vydání OpenSSH 9.2, otevřené implementace klienta a serveru pro práci s protokoly SSH 2.0 a SFTP. V nové verzi byla odstraněna zranitelnost, která vede k dvojímu uvolnění paměti v fázi před autentizací. Zranitelnosti je vystaven pouze vydání OpenSSH 9.1, v dřívějších verzích se problém neprojevuje.
Pro vytvoření podmínek pro vznik zranitelnosti stačí změnit banner SSH klienta na „SSH-2.0-FuTTYSH_9.1p1“, aby se nastavily flagy „SSH_BUG_CURVE25519PAD“ a „SSH_OLD_DHGEX“, které závisí na verzi SSH klienta. Po nastavení těchto flagů je paměť pro buffer „options.kex_algorithms“ uvolněna dvakrát — při vykonávání funkce do_ssh2_kex(), která volá compat_kex_proposal(), a při vykonávání funkce do_authentication2(), která volá řetězce input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() a kex_assemble_names().
Vytvoření funkčního exploit pro zranitelnost se považuje za nepravděpodobné, protože proces exploitace je příliš složitý — moderní knihovny pro správu paměti poskytují ochranu proti dvojímu uvolnění paměti a proces pre-auth, v němž se vyskytuje chyba, se provádí s omezenými oprávněními v izolovaném sandboxovém prostředí.
Kromě uvedené zranitelnosti byly v novém vydání také odstraněny další dvě bezpečnostní problémy:
- Chyba při zpracování nastavení „PermitRemoteOpen“, která vede k ignorování prvního argumentu, pokud se liší od hodnot „any“ a „none“. Problém se projevuje ve verzích vyšších než OpenSSH 8.7 a vede k vynechání kontroly při určení pouze jednoho oprávnění.
- Útočník, který kontroluje DNS server používaný pro určení názvů, může dosáhnout vložení speciálních znaků (například „*“) do souborů known_hosts, pokud jsou ve konfiguraci zapnuty možnosti CanonicalizeHostname a CanonicalizePermittedCNAMEs, a systémový resolver neověřuje správnost odpovědí od DNS serveru. Provádění útoku se považuje za nepravděpodobné, protože vrácené názvy musí splňovat podmínky stanovené prostřednictvím CanonicalizePermittedCNAMEs.
Další změny:
- Do souboru ssh_config byla přidána konfigurace EnableEscapeCommandline, která řídí aktivaci zpracování escape sekvence na straně klienta „~C“, jež poskytuje příkazový řádek. Zpracování „~C“ je nyní ve výchozím nastavení deaktivováno za účelem použití přísnější izolace sandboxu, což může potenciálně způsobit problémy v systémech, kde je „~C“ využíváno k přesměrování portů během provozu.
- Do souboru sshd_config byla přidána direktiva ChannelTimeout pro nastavení časového limitu neaktivity kanálu (kanály, ve kterých v uvedeném časovém rámci nebyl zaznamenán žádný provoz, budou automaticky uzavřeny). Pro relaci, X11, agenta a přesměrování provozu mohou být nastaveny různé časové limity.
- Do souboru sshd_config byla přidána direktiva UnusedConnectionTimeout, která umožňuje nastavit časový limit pro ukončení klientských připojení, která jsou určitou dobu bez aktivních kanálů.
- Do sshd byla přidána volba „-V“ pro zobrazení verze obdobně jako u podobné volby v klientovi ssh.
- Do výstupu „ssh -G“ byla přidána řádka „Host“, odrážející hodnotu argumentu s názvem hostitele.
- Do scp a sftp byla přidána volba „-X“ pro řízení parametru protokolu SFTP, jako je velikost vyrovnávací paměti a počet čekajících požadavků na dokončení.
- Ve ssh-keyscan bylo povoleno skenování celých adresních rozsahů CIDR, jako například „ssh-keyscan 192.168.0.0/24“.
Zdroj: opennet.ru
