SSHole — een kwetsbaarheid die het mogelijk maakt om verbinding te maken via SSH zonder wachtwoord in systemen met Musl

De ontwikkelaars van OpenSSH hebben een urgente update voor OpenSSH 10.6p2 gepubliceerd, waarmee bescherming wordt geboden tegen een kritieke kwetsbaarheid (CVE is niet toegewezen), met de codenaam 'SSHole', die het mogelijk maakt om de authenticatie te omzeilen. In systemen met de Musl-bibliotheek stelt de kwetsbaarheid iemand in staat om in te loggen op een gebruiker zonder wachtwoord door een willekeurig wachtwoord in te voeren dat meer dan 256 tekens bevat. Dit probleem doet zich voor in Linux-distributies die de standaard Musl-bibliotheek gebruiken, maar geen PAM (Pluggable Authentication Modules) implementeren, zoals OpenWRT, Alpine, Buildroot en Yocto. Van bijzonder gevaar is dat de toegang met een wachtwoord vaak is geblokkeerd voor de gebruiker root, wat elke externe gebruiker de mogelijkheid geeft om met beheerdersrechten in te loggen.

De fout die leidt tot de kwetsbaarheid zit niet in de OpenSSH-code, maar wordt misbruikt via sshd. Gezien de ernst van het probleem is in versie OpenSSH 10.6p2 een workaround voorgesteld om de kwetsbaarheid te blokkeren. Het wordt aanbevolen dat eigenaren van kwetsbare systemen niet wachten op updates, maar onmiddellijk de wachtwoordauthenticatie uitschakelen via de parameter 'PasswordAuthentication no' in /etc/ssh/sshd_config of SSH volledig uitschakelen.

Het probleem doet zich niet voor in systemen die anders zijn dan Linux, en in Linux-omgevingen op basis van glibc, evenals in systemen die PAM gebruiken voor wachtwoordauthenticatie. Een oplossing is al beschikbaar in Alpine en OpenWRT.

De kwetsbaarheid is gerelateerd aan de onjuiste interactie tussen OpenSSH en de crypt()-functie van Musl. Om te voorkomen dat het bestaan van gebruikers wordt vastgesteld door de tijdsverschillen in de verwerking van verzoeken, maakt OpenSSH sinds 2016 gebruik van de standaard wachtwoordcontroleprocedure bij de controle van wachtwoordloze accounts: het roept de functie 'crypt(ingevoerd wachtwoord, zout)' aan met het zout van een andere gebruiker die een geldige wachtwoordhash heeft, en vergelijkt vervolgens de hash die door de crypt-functie is geretourneerd met de waarde uit het veld met de wachtwoordhash.

Echter, in Musl geeft de crypt()-functie voor SHA-512-hashes het teken '*' terug als de lengte van het ingevoerde wachtwoord meer dan 256 bytes bedraagt (beperking geïntroduceerd in 2012 ter bescherming tegen DoS-aanvallen, aangezien het verzenden van grote waarden een zware belasting voor de CPU met zich meebrengt). Hetzelfde teken wordt gebruikt in het veld met de wachtwoordhash in '/etc/shadow' om accounts aan te duiden waarvoor wachtwoordauthenticatie is geblokkeerd.

Als gevolg van de aanval kan een aanvaller met verbinding tot een SSH-server verbinding maken met elk account waarvan het wachtwoordveld in „/etc/shadow” het teken „*” bevat, door een string van 257 tot 1024 bytes te verzenden. Het probleem betreft veel bestaande Docker-images die zijn opgebouwd met Alpine Linux, evenals de standaard Alpine-images voor de cloudsystemen AWS en Azure, waar voor de root-gebruiker in plaats van een wachtwoordhash het teken „*” is ingesteld.

Opvallend is dat in de officiële Docker-images die vanaf 2015 Alpine gebruiken, het rootwachtwoord aanvankelijk leeg was. Na ontdekking van dit feit werd in plaats van de wachtwoordhash het teken „!” ingesteld. Maar deze wijziging blokkeerde de toegang via SSH-sleutels, dus sinds 2022 is het teken voor het blokkeren van wachtwoordtoegang vervangen door „*”.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster