Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Bezpečnost

Sshd bez PAM na Linuxu s knihovnou musl pouštěl útočníka dovnitř bez hesla

Projekt OpenSSH vydal 5. listopadu mimořádnou verzi 10.6p2. Obchází v ní chybu, kvůli které sshd na Linuxu s knihovnou musl a vypnutým PAM přijal u účtů bez hesla jakýkoli dost dlouhý řetězec. Nejznámější takový systém je Alpine Linux, který téhož dne vydal opravené balíčky až zpátky k řadě 3.16.

· 0 zhlédnutí

Detail monitoru s přihlašovacím formulářem, v poli pro uživatelské jméno stojí Account a v poli pro heslo řada hvězdiček
Přihlašovací formulář na obrazovce. Foto: Santeri Viinamäki, Wikimedia Commons (CC BY-SA 4.0)

Projekt OpenSSH vydal ve čtvrtek 5. listopadu 2026 verzi 10.6p2 mimo plán vydávání. Nese jedinou bezpečnostní změnu a poznámky k vydání ji označují za kritické obejití: sshd přeložený bez podpory PAM bral na Linuxu s knihovnou musl u některých účtů jako správné heslo jakýkoli dost dlouhý řetězec. Nejrozšířenější systém, na který ta kombinace sedí, je Alpine Linux.

Oznámení do konference openssh-unix-dev poslal Damien Miller a rovnou v něm radí, co dělat dřív, než si správce přečte zbytek. V překladu: „Pokud provozujete linuxový systém, který používá musl libc bez PAM (Alpine Linux je jeden příklad), pak přestaňte číst a OKAMŽITĚ nastavte PasswordAuthentication=no nebo na těch systémech vypněte SSH.“ Chybu nahlásil Özgün Kültekin z firmy Wakefield.

Komu se dá přihlásit a komu ne

Podmínek je několik a musí platit všechny najednou. Podle bezpečnostního oznámení Alpine Linuxu jde o tyhle:

  • sshd je přeložený bez PAM, nebo s PAM, ale s volbou UsePAM no;
  • PasswordAuthentication je ponechané na výchozím yes;
  • na stroji je účet, který má v poli hesla hvězdičku, tedy účet bez hesla – typicky uživatel založený jen pro přihlašování klíčem;
  • a zároveň má aspoň jeden jiný účet normální otisk hesla začínající $5$ nebo $6$.

Jediný účet s heslem tedy zpřístupní všechny účty bez něj. Alpine k tomu píše, že útok potřebuje jedno připojení, funguje pokaždé a nemusí nic opakovat.

Naopak se to netýká glibc, systémů mimo Linux, sshd s UsePAM yes, strojů s vypnutým přihlašováním heslem a zamčených účtů, které mají místo hvězdičky vykřičník. Kontejnery, ve kterých sshd neběží, jsou mimo hru také, a oznámení je jmenuje výslovně.

Účtu root to samo o sobě nepomůže, protože výchozí PermitRootLogin prohibit-password ho k heslu nepustí. Horší je to u cloudových obrazů tiny-cloud od Alpine: od 3.18.11 do 3.24.3 nesou uživatele alpine s hvězdičkou v poli hesla a s doas bez hesla. Jakmile na takovém stroji vznikne jakýkoli účet s otiskem hesla, vede cesta zvenčí rovnou k rootovi.

Opravené balíčky jdou až do řady 3.16

Alpine vydal opravu pro všechny řady, které prošly kontrolou, tedy 3.16 až 3.24 a edge, včetně těch, které už běžné aktualizace nedostávají. Řada 3.21 skončila v podpoře 1. listopadu, záplatu přesto dostala.

větevopravená verze openssh
edge10.6_p2-r0
3.2410.3_p1-r2
3.2310.2_p1-r1
3.2210.0_p1-r11
3.219.9_p2-r1
3.209.7_p1-r6
3.199.6_p1-r3
3.189.3_p2-r4
3.179.1_p1-r7
3.169.0_p1-r6

Nové balíčky jsou ve vydáních 3.21.10, 3.22.8, 3.23.8 a 3.24.4. Aktualizace sama o sobě nestačí: běžící démon zůstane starý, dokud ho správce nerestartuje. Kdo aktualizovat nemůže, vypne přihlašování heslem a teprve pak restartuje sshd – obojí díru zavírá.

Proč sshd to heslo přijal

Když sshd běží bez PAM, ověřuje heslo sám: nechá knihovnu jazyka C spočítat otisk zadaného hesla funkcí crypt() a výsledek porovná s tím, co má o účtu uložené. U účtu, jehož uložené pole je na otisk příliš krátké, si k výpočtu půjčí sůl, tedy náhodnou předponu otisku, od jiného účtu.

Tady se potkaly dvě věci. Implementace crypt() v musl hlásí chybu tak, že vrátí řetězec *; je to napsané rovnou v úvodním komentáři zdrojového souboru. A chybu hlásí mimo jiné tehdy, když je heslo delší než 256 bajtů – konstanta KEY_MAX je v kódu označená jako ochrana proti zahlcení, ne jako součást původního návrhu. Jenže hvězdička je zároveň přesně to, co má v poli hesla každý účet bez hesla, takže porovnání vyšlo jako shoda.

Horní hranici dává sám sshd: auth-passwd.c odmítá hesla delší než 1 024 bajtů konstantou MAX_PASSWORD_LEN. Okno je tedy 257 až 1 024 bajtů. Záznam v registru CVE udává 256 až 1 024, oznámení Alpine 257 až 1 024; podle zdrojového kódu musl platí to druhé, protože mez je psaná jako „delší než“.

Opravný commit Damiena Millera má datum 4. listopadu 21.18 UTC a sahá do tří souborů – auth-passwd.c, openbsd-compat/xcrypt.c a openbsd-compat/port-uw.c. Jeho zpráva i poznámky k vydání říkají totéž: příčinu projekt nevidí ve vlastním kódu, jen je v dobré pozici ji obejít.

Jak poznat, že už se někdo přihlásil

Alpine radí hledat v /var/log/messages řádky Accepted password for u účtu, který žádné heslo nemá. K tomu projít použití doas, nově založené uživatele, nové soubory a klíče v authorized_keys. Kdo přihlášení vyloučit nedokáže, má se strojem zacházet jako s prolomeným.

Číslo CVE přibylo až po opravě

Oznámení Alpine ještě píše, že v době jeho sepsání žádný identifikátor CVE přidělený nebyl. Záznam CVE-2026-123158 vznikl v registru MITRE téhož dne v 15.46 UTC a je vedený proti OpenSSH, ne proti musl. V databázi NVD měl 7. listopadu pořád stav Received, tedy bez vlastního posouzení.

Známka 8,1 z 10 pochází od MITRE a má ve vektoru vysokou složitost útoku. To si s popisem Alpine, podle kterého stačí jedno připojení a funguje to pokaždé, neodpovídá; správnější je podle nás popis distribuce, protože ta přesně vyjmenovala, za jakých podmínek k tomu dojde. V katalogu zneužívaných zranitelností CISA chyba 7. listopadu nebyla a o útoku v praxi nepíše ani jeden z pramenů v seznamu níž.

Oprava vyšla den po nahlášení

Miller v oznámení píše, že o problému se projekt dozvěděl předchozí den. Důvod toho spěchu stojí za přečtení: „opakovaně jsme pozorovali rychlé znovuobjevení chyb agenty s umělou inteligencí, někdy během hodin, a proto teď dlouhá embarga považujeme za nebezpečnou praxi, ze které mají hlavní užitek útočníci.“

Poznámky k vydání to rozvádějí. Tým OpenSSH dostává velké množství hlášení nalezených jazykovými modely nebo s jejich pomocí, část z nich po posouzení žádný bezpečnostní dopad nemá, ale v několika případech chybu nalezenou nástrojem s umělou inteligencí nezávisle našel i jiný výzkumník. Projekt z toho vyvodil, že opravy bude zatím vydávat častěji místo toho, aby je kupil do plánovaných vydání. Totéž zjištění z druhé strany ukazuje i 948 zranitelností, které v jádře Linuxu našla OpenAI: tam je to pohled nálezce, tady správce, kterému ta hlášení chodí.

Zdroje

Bezpečnost

Linux CVE SSH OpenSSH Alpine Linux musl

← zpět na výpis