Het perfecte nachtmerriescenario voor een Linux-server is wanneer een aanvaller alleen maar de Secure Shell (SSH)-poort van de server hoeft te bereiken, naar binnen kan wandelen en de server kan overnemen. Dat is wat er gebeurde met Alpine Linux, de populaire lichtgewicht Linux-server. Om het nog erger te maken, gebeurde dit slechts dagen nadat Alpine Linux een security-gat van formaat in zijn GitLab-implementatie wist te ontwijken.

Zoals security-engineer Gregory Bryant in zijn LinkedIn-post uitlegde: "De meeste authenticatie-bypasses komen voort uit complexe logische ketens, maar de Alpine Linux OpenSSH-kwetsbaarheid van gisteren (CVE-2026-123158) komt neer op één enkel teken: *."

Als je Alpine Linux (of een andere op musl gebaseerde distributie) draait met het standaard openssh-server-pakket (zonder Pluggable Authentication Modules, oftewel PAM) en PasswordAuthentication ingeschakeld, kan een aanvaller inloggen op accounts met uitgeschakeld wachtwoord, of accounts die alleen sleutels gebruiken, simpelweg door een wachtwoord van 257 tot 1024 bytes lang te sturen.

Alpine Linux is niet het enige besturingssysteem dat musl gebruikt, een lichtgewicht versie van de standaard C-bibliotheek (libc). Andere besturingssystemen die musl gebruiken en mogelijk kwetsbaar zijn, zijn onder meer Adélie Linux; Void Linux; Sabotage Linux; OpenWrt, een Android-variant; en het Yocto Project, dat wordt gebruikt om embedded Linux-distributies te bouwen.

Wind River, dat de commerciële embedded Linux-distributie Wind River Linux produceert, onderzoekt de kwestie ook. Een vertegenwoordiger van het bedrijf vertelde me: "Wind River neemt beveiliging serieus. We onderzoeken de gemelde kwetsbaarheid actief en beoordelen de mogelijke impact. We zullen indien nodig passende maatregelen nemen."

Achter de schermen, wanneer OpenSSH zonder PAM wordt gebouwd, verifieert het wachtwoorden door de wachtwoordpoging te hashen met de crypt()-functie van de C-bibliotheek. Vervolgens vergelijkt het het resultaat met het opgeslagen wachtwoordveld van het account. Tot zover alles goed.

Maar wanneer een sleutel langer is dan 256 bytes, retourneert musl's crypt()-functie de string * als foutindicator. Dat is ook wat het wachtwoordveld bevat voor elk account zonder wachtwoord, zoals een account dat alleen sleutels gebruikt. Dus de "hash" komt overeen en de login slaagt, en de aanvaller wandelt naar binnen.

Om dit te misbruiken heeft een aanvaller alleen de naam van zo'n account nodig. De aanvaller heeft ook ten minste één ander account op de machine nodig met een wachtwoordhash van 5 of 6, en moet dan een wachtwoord van 257 tot 1.024 bytes sturen. Volgens Alpine is één gebruiker met een wachtwoord voldoende om elk account zonder wachtwoord toegankelijk te maken.

In Linux-systemen die glibc's crypt() gebruiken, wat bijna allemaal zo is, zou dezelfde poging NULL retourneren bij een fout, wat sshd al weigert, dus Debian, Ubuntu, Fedora, enz. zijn niet getroffen.

Volgens *sshole, de groep die het probleem ontdekte, is dit een neveneffect dat zich sinds 2016 schuil heeft gehouden.

Alpine zei dat elke release die het controleerde getroffen is: 3.21 tot en met 3.24, edge, en de oudere branches 3.16 tot en met 3.20. Blootstelling vereist het volgende:

Root is in de meeste gevallen niet direct blootgesteld. Het wordt sinds ongeveer Alpine 3.16 als root:* in de basisimage geleverd, maar OpenSSH's standaard PermitRootLogin prohibit-password blokkeert dit. Een ander account dat root kan worden, bijvoorbeeld via doas, geeft een aanvaller nog steeds een route naar root.

Alpine wees met name zijn officiële tiny-cloud-images, versies 3.18.11 tot en met 3.24.3, aan als bijzonder kwetsbaar. Deze worden geleverd met een alpine-gebruiker met een *-wachtwoordveld en doas zonder wachtwoord. Ze zijn veilig bij de eerste boot, maar worden exploiteerbaar zodra er een 6-hash op de machine bestaat. Dat kan gebeuren wanneer een beheerder een consolewachtwoord instelt of wanneer gebruikersgegevens een gebruiker met een gehasht wachtwoord toevoegen, wat in wezen betekent: allemaal.

Alpine bracht donderdag 3.21.10, 3.22.8, 3.23.8 en 3.24.4 uit, met de OpenSSH-fix among de beveiligingswijzigingen. Het publiceerde ook gepatchte pakketten voor elke release terug tot 3.16. Alpine 3.21 bereikte het einde van de ondersteuning op 1 november.

De zojuist uitgebrachte OpenSSH 10.6p2 vermijdt het probleem in sshd. Alpine's stabiele branches bevatten een patch voor hetzelfde probleem. Je moet apk upgrade -U -a uitvoeren en vervolgens th herstarten.