Qualys har identifierat en kritisk sÄrbarhet (CVE-2024-6387) i OpenSSH, som möjliggör fjÀrrkörning av kod med root-behörighet utan autentisering. SÄrbarheten, som har kodnamnet regreSSHion, uppkommer i standardkonfigurationen frÄn version 8.5 av OpenSSH pÄ system med standardbiblioteket Glibc.
Möjligheten att genomföra en attack har demonstrerats pÄ ett 32-bitars system med Glibc med aktiverad ASLR-skydd (adressutrymmesrandomisering). För att lyckas med attacken i laboratoriemiljö krÀvdes 6-8 timmar, under vilken tid servern konsekvent upprÀttades anslutningar med den maximalt tillÄtna intensiteten i konfigurationen sshd. Attacken förenklas och tar mindre tid pÄ system utan ASLR eller i distributioner som anvÀnder en modifierad OpenSSH, dÀr Äterrandomisering av ASLR för varje anslutning Àr inaktiverad. En fungerande prototyp av exploiten har beslutats att inte publiceras offentligt före vidtagandet av ÄtgÀrder mot sÄrbarheten, men det finns en tillrÀckligt detaljerad beskrivning av sÄrbarhetens natur, vilket gör att lanseringen av tredje parts exploits bara Àr en tidsfrÄga.
Möjligheten till attack utesluts inte heller för 64-bitars system, men en fungerande exploit för sÄdana system Àr Ànnu inte klar. Det förvÀntas att genomförande av attacken pÄ 64-bitars system kommer att ta mycket lÀngre tid, dock inte mer Àn en vecka. OpenSSH i OpenBSD Àr inte utsatt för problemet, dÄ detta system har anvÀnt en skyddsmekanism sedan 2001 som blockerar sÄdana typer av attacker. I andra system baserade pÄ standardbibliotek som skiljer sig frÄn Glibc skulle det teoretiskt vara möjligt att anpassa metoden för att genomföra en attack (denna frÄga har Ànnu inte undersökts av Qualys).
SÄrbarheten har ÄtgÀrdats i den idag publicerade versionen av OpenSSH 9.8 (patch). Man kan följa uppdateringar av paket i distributionerna via sidorna: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, ROSA, Gentoo, ALT Linux, Arch och FreeBSD. Som en tillfÀllig lösning för att blockera sÄrbarheten kan parametern "LoginGraceTime=0" stÀllas in i sshd_config, dÀr inaktivering av timeouten förenklar initiering av en serviceavbrott vid upprÀttande av ett stort antal anslutningar som överskrider grÀnserna angivna via parametern MaxStartups.
Ett av tecknen pÄ ett intrÄngsförsök Àr en stor mÀngd poster i loggen med meddelandet "Timeout before authentication".
SÀkerhetsbristen uppstod som en följd av en regressiv förÀndring som ingick i versionen av OpenSSH 8.5, vilket ledde till en kapplöpning i kodhanteringen av signaler i sshd. Regressionen resulterade i att skyddet mot den Àldre sÄrbarheten CVE-2006-5051, som visade sig före version OpenSSH 4.4 (2006), och hade teoretisk karaktÀr, upphörde att gÀlla.
Under utvecklingen av OpenSSH 8.5 togs blocket "#ifdef DO_LOG_SAFE_IN_SIGHAND" av misstag bort frÄn funktionen sigdie(), som kallas direkt frÄn SIGALRM-handlaren.
SIGALRM-handlaren anropas i sshd i asynkront lÀge om klienten inte har genomfört autentisering inom den tid som begrÀnsas av anslutningens timeout (LoginGraceTime, som standard 120 sekunder). Attacken bygger pÄ att signalhanteraren anropar funktioner som inte Àr sÀkra vid asynkron signalbehandling, sÄsom syslog(). Funktionen syslog() i Glibc Àr inte avsedd för anvÀndning i asynkront exekverade signalhandlare, eftersom den anropar funktioner som malloc() och free(). Utlösning av SIGALRM-signalen, som avbryter ett visst kodblock i sshd, kan leda till att exekveringsstatusen störs, och uppgiften för exploiten Àr att skapa förutsÀttningar för att avbryta den nödvÀndiga koden vid rÀtt ögonblick i dess exekvering. SÄrbarheten pÄverkar inte OpenBSD, eftersom syslog() istÀllet för att anropas frÄn SIGALRM-handlaren anropar funktionen syslog_r(), som Àr speciellt utformad för asynkron körning.
KĂ€lla: opennet.ru
