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.

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; PasswordAuthenticationje ponechané na výchozímyes;- 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ětev | opravená verze openssh |
|---|---|
| edge | 10.6_p2-r0 |
| 3.24 | 10.3_p1-r2 |
| 3.23 | 10.2_p1-r1 |
| 3.22 | 10.0_p1-r11 |
| 3.21 | 9.9_p2-r1 |
| 3.20 | 9.7_p1-r6 |
| 3.19 | 9.6_p1-r3 |
| 3.18 | 9.3_p2-r4 |
| 3.17 | 9.1_p1-r7 |
| 3.16 | 9.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
- OpenSSH 10.6p2 release notes (openssh.com, 5. 11. 2026)
- urgent security release: 10.6p2, Damien Miller v konferenci openssh-unix-dev (archiv MARC, 5. 11. 2026)
- Security advisory: openssh-server password authentication bypass (Alpine Linux, 5. 11. 2026)
- Záznam CVE-2026-123158 (registr CVE, MITRE)
- crypt_sha512.c a crypt_r.c ve zdrojích musl
- Commit „avoid password authn bypass“ v openssh-portable