Vývojáři OpenSSH vydali naléhavou aktualizaci OpenSSH 10.6p2, která přidala ochranu proti kritické zranitelnosti (CVE nebylo přiřazeno) označované jako "SSHole", jež umožňuje obejít autentizaci. V systémech s knihovnou Musl tato zranitelnost umožňuje připojit se k uživateli, pro kterého není nastavena žádná heslo, zadáním libovolného hesla, které obsahuje více než 256 znaků. Problém se týká distribucí Linuxu, které používají standardní knihovnu musl, ale nepoužívají PAM (Pluggable Authentication Modules), jako je OpenWRT, Alpine, Buildroot a Yocto. Zejména nebezpečné je to, že často je pro uživatele root blokováno přihlašování pomocí hesla, což dává možnost každému se připojit na dálku s právy administrátora.
Chyba vedoucí k zranitelnosti není v kódu OpenSSH, ale je zneužívána prostřednictvím sshd. Vzhledem k závažnosti problému byl ve verzi OpenSSH 10.6p2 navržen alternativní způsob, jak zablokovat tuto zranitelnost. Vlastníkům postižených systémů se doporučuje, aby nečekali na aktualizace, ale okamžitě zakázali autentizaci pomocí hesla pomocí parametru "PasswordAuthentication no" v /etc/ssh/sshd_config nebo zcela vypnuli SSH.
Problém se neprojevuje v systémech mimo Linux a v linuxových prostředích založených na glibc, ani v systémech, které používají PAM při autentizaci heslem. Oprava je již dostupná v Alpine a OpenWRT.
Zranitelnost souvisí s nesprávným interakcí OpenSSH a funkce crypt() z musl. Aby se zabránilo určení existence uživatelů prostřednictvím analýzy rozdílů v čase zpracování požadavků, OpenSSH od roku 2016 při ověřování bezheslových účtů používá standardní proceduru kontroly hesla: volá funkci "crypt(zadané heslo, sůl)" se solí jiného uživatele, který má platný hash hesla, a poté porovnává návratový hash z funkce crypt s hodnotou z pole s hashem hesla.
V musl však funkce crypt() pro hashování SHA-512 vrací znak "*", pokud délka zadaného hesla překročí 256 bytů (omezení zavedeno v roce 2012 pro ochranu proti DoS útokům, neboť při zadání velkých hodnot dojde k velké zátěži CPU). Stejný znak se používá v poli s hashem hesla v "/etc/shadow" k označení účtů, pro které je blokována autentizace pomocí hesla.
Útočník, který má možnost se připojit k SSH serveru, může získat přístup k jakémukoli účtu, jehož pole hesla v "\/etc\/shadow" obsahuje znak „*“, a to tak, že předá řetězec o délce od 257 do 1024 bajtů. Problém se týká mnoha existujících Docker obrazů, které byly vytvořeny pomocí Alpine Linux, stejně jako oficiálních obrazů Alpine pro cloudové systémy AWS a Azure, kde je pro uživatele root místo hash hesla uveden znak „*“.
Je zajímavé, že od roku 2015 měly oficiální Docker obrazy používající Alpine prázdné heslo pro uživatele root, a po zjištění této skutečnosti byl místo hashe hesla uveden znak „!“. Jeho přítomnost však blokovala přihlášení pomocí SSH klíčů, a proto byl od roku 2022 znak pro blokaci přihlašování heslem změněn na „*“.
Zdroj: opennet.ru
