Sårbarheter i OpenBSD som tillater privilegieeskalering og omgåelse av autentisering i smtpd, ldapd og radiusd

Qualys Company avslørt fire sårbarheter i OpenBSD, hvorav den ene lar deg koble eksternt uten autentisering til noen nettverkstjenester, og de tre andre for å øke privilegiene sine i systemet. Qualys-rapporten bemerket den raske responsen fra OpenBSD-utviklerne - alle problemer var det eliminert в OpenBSD 6.5 и OpenBSD 6.6 innen 40 timer etter det private varselet.

Det eksternt utnyttbare sikkerhetsproblemet er forårsaket av en feil i å arrangere anropet til autentiseringsbehandleren i libc-biblioteket, som kaller
/usr/libexec/auth/login_style-programmet sender argumenter på kommandolinjen. Inkludert når du kaller login_style ved å bruke den valgfrie parameteren "-s service", er det tillatt å sende navnet på protokollen. Hvis et "-"-tegn brukes i begynnelsen av brukernavnet, vil dette navnet bli behandlet som et alternativ når login_style kjøres. Følgelig, hvis du spesifiserer "-schallenge" eller "-schallenge: passwd" som brukernavn under autentisering, vil login_style oppfatte forespørselen som en forespørsel om å bruke behandleren S/Nøkkel.

Problemet er at S/Key-protokollen i login_style kun støttes formelt, men blir faktisk ignorert med utdata av et tegn på vellykket autentisering. Dermed kan en angriper utgi seg som "-utfordring"-bruker og omgå autentisering og få tilgang uten å spesifisere et passord eller nøkler. Alle nettverkstjenester som bruker vanlige libc-anrop for autentisering er potensielt påvirket av problemet. For eksempel er muligheten til å omgå autentisering bekreftet i smtpd (AUTH PLAIN), ldapd og radiusd.

Sårbarheten viser seg ikke i sshd, siden den har ekstra beskyttelse med å sjekke brukerens tilstedeværelse i systemet. Imidlertid kan sshd brukes til å teste om et system er mottakelig for en sårbarhet - når du får tilgang til brukernavnet "-sresponse:passwd", henger tilkoblingen, siden sshd venter på at login_passwd skal returnere parametrene til kallet (utfordring), og login_passwd venter på overføring av manglende parametere (navnet "- svar" tas som et alternativ). En potensiell lokal angriper kan prøve å omgå autentisering i su-verktøyet, men å sende navnet "-sresponse" får prosessen til å krasje på grunn av returen av en null-peker når funksjonen getpwnam_r("-challenge", ...) kjøres. .

Andre sårbarheter:

  • CVE-2019-19520 - Lokal rettighetseskalering via manipulering av xlock-verktøyet som følger med sgid-flagget som endrer gruppen til "auth". I xlock-koden er omdefinering av bibliotekstier forbudt bare når bruker-IDen (setuid) endres, noe som lar angriperen endre miljøvariabelen "LIBGL_DRIVERS_PATH" og organisere lasting av det delte biblioteket hans, hvis kode vil bli utført etter privilegieeskalering til "auth"-gruppen.
  • CVE-2019-19522 - Lar en lokal bruker i "auth"-gruppen kjøre kode som root når S/Key- eller YubiKey-autentisering er aktivert i systemet (ikke aktivert som standard). Medlemskap i "auth"-gruppen, som kan nås ved å utnytte xlock-sårbarheten ovenfor, lar filer skrives til katalogene /etc/skey og /var/db/yubikey. For eksempel kan en angriper legge til en ny /etc/skey/root-fil for å generere engangsnøkler for rotautentisering via S/Key.
  • CVE-2019-19519 - Mulighet for å øke ressursgrensene gjennom manipulasjoner med su-verktøyet. Når du spesifiserer alternativet "-L", som innebærer en syklisk repetisjon av autentiseringsforsøk i tilfelle feil, settes brukerklassen bare én gang og tilbakestilles ikke ved påfølgende forsøk. En angriper kan utføre "su -l -L" ved det første forsøket på å angi en annens pålogging med en annen kontoklasse, men ved det andre forsøket på å autentisere seg selv. I denne situasjonen vil brukeren bli satt grenser tilsvarende brukerklassen spesifisert ved første forsøk (for eksempel maksimalt antall prosesser eller minnestørrelsen for en prosess). Metoden fungerer kun for lånegrenser fra ikke-privilegerte brukere, siden rotbrukeren må være i hjulgruppen).

I tillegg kan det bemerkes gjennomføring i OpenBSD en ny metode for å sjekke gyldigheten av systemanrop, noe som ytterligere kompliserer utnyttelsen av sårbarheter. Metoden gjør det mulig å utføre systemanrop bare hvis de er aksessert fra tidligere registrerte minneområder. For å markere områder i minnet foreslått nytt systemkall msyscall().

Kilde: opennet.ru