Zraniteľnosť v OpenBSD umožňujúca eskaláciu privilégií a obídenie autentifikácie v smtpd, ldapd a radiusd

Spoločnosť Qualys odhalené štyri zraniteľnosti v OpenBSD, z ktorých jeden vám umožňuje pripojiť sa na diaľku bez autentifikácie k niektorým sieťovým službám a ďalšie tri na zvýšenie ich privilégií v systéme. Správa Qualys zaznamenala rýchlu reakciu vývojárov OpenBSD - všetky problémy boli eliminované в OpenBSD 6.5 и OpenBSD 6.6 do 40 hodín po súkromnom oznámení.

Diaľkovo zneužiteľná zraniteľnosť je spôsobená chybou pri usporiadaní volania na autentizačnú obsluhu v knižnici libc, ktorá volá
/usr/libexec/auth/login_style program odovzdávajúci argumenty na príkazovom riadku. Vrátane pri volaní login_style pomocou voliteľného parametra "-s service" je povolené odovzdanie názvu protokolu. Ak je na začiatku používateľského mena použitý znak "-", toto meno sa bude pri spustení login_style považovať za možnosť. Ak teda počas autentifikácie ako používateľské meno zadáte „-schallenge“ alebo „-schallenge: passwd“, login_style bude vnímať požiadavku ako požiadavku na použitie handlera. S/Kľúč.

Problém je v tom, že protokol S/Key v login_style je podporovaný len formálne, ale v skutočnosti je ignorovaný s výstupom znamenia úspešnej autentifikácie. Útočník sa teda môže vydávať za používateľa „-schallenge“ a obísť autentifikáciu a získať prístup bez zadania hesla alebo kľúčov. Všetky sieťové služby, ktoré používajú bežné volania libc na autentifikáciu, sú potenciálne ovplyvnené problémom. Napríklad schopnosť obísť autentifikáciu je potvrdená v smtpd (AUTH PLAIN), ldapd a radiusd.

Zraniteľnosť sa v sshd neprejavuje, pretože má dodatočnú ochranu s kontrolou prítomnosti používateľa v systéme. Sshd však možno použiť na testovanie, či je systém náchylný na zraniteľnosť – pri prístupe k používateľskému menu „-sresponse:passwd“ sa spojenie zablokuje, pretože sshd čaká na login_passwd, aby vrátil parametre volania (výzva) a login_passwd čaká na prenos chýbajúcich parametrov (názov "- odpoveď" je braný ako možnosť). Potenciálny lokálny útočník by sa mohol pokúsiť obísť autentifikáciu v obslužnom programe su, ale odovzdanie názvu "-sresponse" spôsobí zlyhanie procesu v dôsledku návratu nulového ukazovateľa pri vykonávaní funkcie getpwnam_r("-schallenge", ...) .

Ďalšie zraniteľnosti:

  • CVE-2019-19520 – Miestna eskalácia privilégií prostredníctvom manipulácie s pomôckou xlock, ktorá sa dodáva s príznakom sgid, ktorý zmení skupinu na „auth“. V kóde xlock je predefinovanie knižničných ciest zakázané iba pri zmene ID používateľa (setuid), čo útočníkovi umožňuje zmeniť premennú prostredia „LIBGL_DRIVERS_PATH“ a organizovať načítanie svojej zdieľanej knižnice, ktorej kód sa spustí. po eskalácii privilégií do skupiny „auth“.
  • CVE-2019-19522 – Umožňuje miestnemu používateľovi v skupine „auth“ spustiť kód ako root, keď je v systéme povolená autentifikácia S/Key alebo YubiKey (predvolene nie je povolená). Členstvo v skupine „auth“, ku ktorej je možné získať prístup využitím vyššie uvedenej zraniteľnosti xlock, umožňuje zapisovanie súborov do adresárov /etc/skey a /var/db/yubikey. Útočník by napríklad mohol pridať nový súbor /etc/skey/root na vygenerovanie jednorazových kľúčov na autentifikáciu root pomocou S/Key.
  • CVE-2019-19519 - Možnosť zvýšiť limity zdrojov pomocou manipulácií s nástrojom su. Pri zadaní voľby "-L", ktorá znamená cyklické opakovanie pokusov o autentifikáciu v prípade zlyhania, sa trieda užívateľa nastaví iba raz a pri ďalších pokusoch sa neresetuje. Útočník môže spustiť „su -l -L“ pri prvom pokuse o zadanie prihlásenia niekoho iného s inou triedou účtu, ale pri druhom pokuse o úspešnú autentifikáciu pod sebou. V tejto situácii budú užívateľovi nastavené limity zodpovedajúce triede užívateľa zadanej pri prvom pokuse (napríklad maximálny počet procesov alebo veľkosť pamäte pre proces). Metóda funguje iba pre limity výpožičiek od neprivilegovaných používateľov, pretože používateľ root musí byť v skupine kolies).

Okrem toho je možné poznamenať implementáciu v OpenBSD nová metóda na kontrolu platnosti systémových volaní, čo ešte viac komplikuje využívanie zraniteľností. Metóda umožňuje vykonávať systémové volania iba vtedy, ak sú prístupné z predtým zaregistrovaných oblastí pamäte. Na označenie oblastí pamäte navrhované nové systémové volanie msyscall().

Zdroj: opennet.ru