Escalarea privilegiilor OpenBSD și autentificarea ocoli vulnerabilitățile în smtpd, ldapd și radiusd

Compania Qualys dezvăluit patru vulnerabilități în OpenBSD, dintre care unul vă permite să vă conectați de la distanță fără autentificare la unele servicii de rețea, iar celelalte trei vă măresc privilegiile în sistem. Raportul Qualys a remarcat răspunsul rapid al dezvoltatorilor OpenBSD - toate problemele au fost eliminat в OpenBSD 6.5 и OpenBSD 6.6 în termen de 40 de ore de la notificarea privată.

Vulnerabilitatea exploatabilă de la distanță este cauzată de o eroare la apelarea handler-ului de autentificare din biblioteca libc, care apelează
programul /usr/libexec/auth/login_style transmite argumente pe linia de comandă. Inclusiv atunci când apelați login_style folosind parametrul opțional „-s service”, este posibil să transferați numele protocolului. Dacă utilizați un caracter „-” la începutul unui nume de utilizator, acest nume va fi tratat ca o opțiune atunci când rulați login_style. În consecință, dacă specificați „-schallenge” sau „-schallenge:passwd” ca nume de utilizator în timpul autentificării, atunci login_style va percepe cererea ca pe o solicitare de utilizare a handler-ului S/Cheie.

Problema este că protocolul S/Key din login_style este acceptat doar formal, dar este de fapt ignorat cu rezultatul unui semn de autentificare reușită. Astfel, un atacator poate, dându-se drept utilizatorul „-challenge”, să ocolească autentificarea și să obțină acces fără a furniza o parolă sau chei. Toate serviciile de rețea care utilizează apeluri standard libc pentru autentificare sunt potențial afectate de problemă. De exemplu, capacitatea de a ocoli autentificarea este acceptată în smtpd (AUTH PLAIN), ldapd și radiusd.

Vulnerabilitatea nu apare în sshd, deoarece are protecție suplimentară care verifică prezența utilizatorului în sistem. Cu toate acestea, sshd poate fi folosit pentru a testa vulnerabilitatea unui sistem - la accesarea numelui de utilizator „-sresponse:passwd”, conexiunea se blochează, deoarece sshd așteaptă ca login_passwd să returneze parametrii de provocare, iar login_passwd așteaptă ca parametrii lipsă să fie fie trimis (numele „- sresponse” este tratat ca o opțiune). Un atacator local ar putea încerca să ocolească autentificarea în utilitarul su, dar transmiterea numelui „-sresponse” face ca procesul să se prăbușească, returnând un pointer nul la executarea funcției getpwnam_r(„-schallenge”, ...).

Alte vulnerabilitati:

  • CVE-2019-19520 Escaladare locală a privilegiilor prin manipularea utilitarului xlock furnizat cu indicatorul sgid, schimbând grupul în „auth”. În codul xlock, redefinirea căilor către biblioteci este interzisă numai atunci când se schimbă identificatorul utilizatorului (setuid), ceea ce permite atacatorului să schimbe variabila de mediu „LIBGL_DRIVERS_PATH” și să organizeze încărcarea bibliotecii sale partajate, al cărei cod va fi executat. după ridicarea privilegiilor grupului „auth”.
  • CVE-2019-19522 - Permite unui utilizator local care este membru al grupului „auth” să ruleze cod ca root atunci când autentificarea S/Key sau YubiKey este activată pe sistem (neactivă implicit). Alăturarea grupului „auth”, care poate fi accesat prin exploatarea vulnerabilității menționate mai sus în xlock, vă permite să scrieți fișiere în directoarele /etc/skey și /var/db/yubikey. De exemplu, un atacator ar putea adăuga un nou fișier /etc/skey/root pentru a genera chei unice pentru autentificare ca utilizator root prin S/Key.
  • CVE-2019-19519 - posibilitatea creșterii limitelor de resurse prin manipularea utilitarului su. Când este specificată opțiunea „-L”, ceea ce face ca încercările de autentificare să fie repetate ciclic dacă nu reușesc, clasa de utilizator este setată o singură dată și nu este resetată la încercările ulterioare. Un atacator poate executa „su -l -L” la prima încercare de a introduce datele de conectare ale altcuiva cu o clasă de cont diferită, dar la a doua încercare se poate autentifica cu succes ca el însuși. În această situație, utilizatorul va fi supus unor limite bazate pe clasa de utilizator specificată la prima încercare (de exemplu, numărul maxim de procese sau dimensiunea memoriei pentru un proces). Metoda funcționează numai pentru limitele de împrumut de la utilizatorii neprivilegiati, deoarece utilizatorul root trebuie să fie în grupul de roți).

În plus, se poate observa implementare în OpenBSD, o nouă metodă de verificare a validității apelurilor de sistem, care complică și mai mult exploatarea vulnerabilităților. Metoda permite ca apelurile de sistem să fie executate numai dacă sunt accesate din zone de memorie înregistrate anterior. Pentru a marca zonele de memorie propus nou apel de sistem msyscall().

Sursa: opennet.ru