Уразлівасці ў 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