Уязвимости в OpenBSD, позволяващи повишаване на привилегиите и заобикаляне на автентикацията в smtpd, ldapd и radiusd

Компания Qualys разкри четири уязвимост в OpenBSD, една от които позволява дистанционно свързване без удостоверяване към някои мрежови услуги, а трите останали повишават привилегиите си в системата. В доклада на Qualys е отбелязана бързата реакция на разработчиците на OpenBSD — всички проблеми бяха са отстранени в OpenBSD 6.5 и OpenBSD 6.6 в течение на 40 часа след частно уведомление.

Дистанционно експлоатирана уязвимост е причинена от грешка при организацията на извикването на обработвача за удостоверяване в библиотеката libc, която извиква
програмата /usr/libexec/auth/login_style с предаване на аргументи в командния ред. Включително при извикването на login_style с помощта на опционалния параметър «-s service», е допустимо предаване на името на протокола. В случай на използване на символа «-» в началото на името на потребителя, това име ще бъде обработено като опция при стартиране на login_style. Съответно, ако се посочи при удостоверяването името на потребителя «-schallenge» или «-schallenge:passwd», то login_style ще възприеме заявката като искане за използване на обработвача S/Key.

Проблемът е, че протоколът S/Key в login_style се поддържа само формално, а всъщност се игнорира с извеждане на признака за успешно удостоверяване. По този начин, атакуващият може, представяйки се за потребителя «-schallenge», да заобиколи удостоверяването и да получи достъп без посочване на парола или ключове. Потенциално, проблема са подложени всички мрежови услуги, които използват стандартни извиквания на libc за провеждане на удостоверяване. Например, възможността за заобикаляне на удостоверяването е потвърдена в smtpd (AUTH PLAIN), ldapd и radiusd.

В sshd уязвимостта не се проявява, тъй като в него има допълнителна защита с проверка на наличието на потребителя в системата. Въпреки това, sshd може да се използва за проверка на податливостта на системата на уязвимостта — при извикване с името на потребителя «-sresponse:passwd» връзката замръзва, тъй като sshd чака от login_passwd да върне параметрите на извикването (challenge), а login_passwd чака предаване на недостигналите параметри (името «-sresponse» се възприема като опция). Потенциално локален атакуващ може да се опита да заобиколи удостоверяването в утилитата su, но предаването на името «-sresponse» води до срив на процеса поради връщането на нулев указател при изпълнението на функцията getpwnam_r(«-schallenge», …).

Други уязвимости:

  • CVE-2019-19520 — локално повишаване на привилегиите чрез манипулации с утилитата xlock, доставяна с флаг sgid, променяща групата на «auth». В кода на xlock избегнато е преопределението на пътищата към библиотеките само при смяна на идентификатора на потребителя (setuid), което позволява на атакуващия да промени променливата на средата «LIBGL_DRIVERS_PATH» и да организира зареждането на собствена споделена библиотека, кодът на която ще бъде изпълнен след повишаване на привилегиите до групата «auth».
  • CVE-2019-19522 — позволява на локален потребител, член на групата «auth», да стартира код с права root при активиране на системата за аутентификация чрез S/Key или YubiKey (по подразбиране неактивни). Входът в групата «auth», до която може да се получи достъп чрез експлоатация на споменатата уязвимост в xlock, позволява записване на файлове в каталозите /etc/skey и /var/db/yubikey. Например, атакуващият може да добави нов файл /etc/skey/root за генериране на еднократни ключове за аутентификация под потребителя root чрез S/Key.
  • CVE-2019-19519 — възможност за повишаване на лимитите на ресурсите чрез манипулации с утилитата su. При указване на опцията «-L», която предвижда циклично повторение на опитите за аутентификация в случай на неуспех, класът на потребителя се установява само веднъж и не се нулира при следващите опити. Атакуващият може да изпълни «su -l -L» и при първия опит да въведе чужд логин с различен клас на акаунта, но при втория опит успешно да се аутентифицира под себе си. В тази ситуация на потребителя ще бъдат установени лимити, съответстващи на класа на потребителя, посочен при първия опит (например, максимален брой процеси или размер на паметта за процеса). Методът работи само за заимстване на лимити от непривилегировани потребители, тъй като за потребителя root е необходимо присъствие в групата wheel).

Допълнително може да се отбележи реализация в OpenBSD нов метод за проверка на допустимостта на достъпа до системни повици, допълнително усложняващ експлоатацията на уязвимости. Методът позволява изпълнение на системни повици само ако те се адресират от предварително регистрирани области на паметта. За маркиране на областите на паметта е предложен нов системен повик msyscall().

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster