Уразлівасці ў OpenSMTPD, якія дазваляюць выдалена і лакальна атрымаць правы root

Кампанія Qualys выявіла яшчэ адну выдаленую крытычную ўразлівасць (CVE-2020-8794) у паштовым серверы OpenSMTPD, які развіваецца праектам OpenBSD. Як і выяўленая ў канцы студзеня уразлівасць, новая праблема дае магчымасць выдалена выканаць адвольныя каманды shell на серверы з правамі карыстача root. Уразлівасць ліквідавана у выпуску OpenSMTPD 6.6.4p1.

Праблема выклікана памылкай у кодзе, які ажыццяўляе дастаўку пошты на выдалены паштовы сервер (не ў кодзе, які апрацоўвае ўваходныя злучэнні). Атака магчыма як на баку кліента, так і на баку сервера. На боку кліента напад магчымая ў канфігурацыі OpenSMTPD па змаўчанні, у якой OpenSMTPD прымае запыты толькі на ўнутраным сеткавым інтэрфейсе (localhost) і адпраўляе паштовыя паведамленні на вонкавыя серверы. Для эксплуатацыі ўразлівасці дастаткова, каб падчас дастаўкі ліста OpenSMTPD усталяваў сеанс з паштовым серверам, падкантрольным атакаваламу, або каб атакавалы мог уклінавацца ў злучэнне кліента (MITM або перанакіраванне падчас нападаў праз DNS або BGP).

Для нападу на боку сервера неабходна, каб OpenSMTPD быў наладжаны на прыём вонкавых сеткавых запытаў ад іншых паштовых сервераў або абслугоўваў іншыя сэрвісы, якія дазваляюць адправіць запыт на адвольны email (напрыклад, формы пацверджання адраса на сайтах). Напрыклад, зламыснік можа злучыцца з серверам OpenSMTPD і адправіць некарэктны ліст (неіснуючаму карыстачу), якое прывядзе да зваротнай адпраўкі ліста з кодам памылкі (bounce) на сервер атакавалага. Зламыснік можа эксплуатаваць уразлівасць у момант, калі OpenSMTPD падлучыцца для дастаўкі апавяшчэння на сервер атакавалага. Укаранёныя падчас нападаў shell-каманды змяшчаюцца ў файл, які выконваецца з правамі root пры перазапуску OpenSMTPD, таму атакавалы для запэўнення атакі павінен дачакацца перазапуску OpenSMTPD або ініцыяваць крах OpenSMTPD.

Праблема прысутнічае ў функцыі mta_io() у кодзе для разбору шматрадковага адказу, які вяртаецца выдаленым серверам пасля ўсталёўкі злучэння (напрыклад, «250-ENHANCEDSTATUSCODES» і «250 HELP»). У OpenSMTPD разлічана, што першы радок уключае трохзначны лік і тэкст, падзеленыя сімвалам «-«, а другі радок трохзначны лік і тэкст, падзеленыя прабелам. Калі ў другім радку пасля трохзначнага ліку не варта прабел і тэкст, паказальнік, выкарыстоўваны для азначэння тэксту, усталёўваецца на байт, наступны за сімвалам '\0' і прадпрымаецца спроба капіявання ў буфер дадзеных, наступных пасля канца радка.

Па просьбе праекту OpenBSD публікацыя дэталяў аб эксплуатацыі ўразлівасці адкладзеная да 26 лютага, каб даць карыстачам магчымасць абнавіць свае сістэмы. Праблема прысутнічае ў кодавай базе са снежня 2015 года, але эксплуатацыя да выканання кода з правамі root магчыма з мая 2018 года. Даследнікамі падрыхтаваны працоўны прататып эксплоіта, які паспяхова пратэставаны ў зборках OpenSMTPD для OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) і Fedora 31.

У OpenSMTPD таксама выяўлена яшчэ адна ўразлівасць (CVE-2020-8793), якая дазваляе лакальнаму карыстачу прачытаць першы радок любога файла ў сістэме. Напрыклад, можна прачытаць першы радок /etc/master.passwd, у якім размяшчаецца хэш пароля карыстальніка root. Уразлівасць таксама дазваляе прачытаць усё змесціва файла, прыналежнага іншаму карыстачу, калі гэты файл знаходзіцца ў адной ФС з каталогам /var/spool/smtpd/. Праблема не эксплуатаваная ў шматлікіх дыстрыбутывах Linux, у якіх значэнне /proc/sys/fs/protected_hardlinks выстаўлена ў 1.

Праблема з'яўляецца следствам няпоўнага ўстаранення праблем, агучаных у працэсе аўдыту, праведзенага Qualys у 2015 годзе. Атакуючы можа дамагчыся выкананні свайго кода з правамі групы «_smtpq», выставіўшы зменную «PATH=.» і размясціўшы ў бягучым каталогу скрыпт з імем makemap (утыліта smtpctl запускае makemap без відавочнага ўказання шляху). Атрымаўшы доступ да групы «_smtpq» атакуючы затым можа выклікаць стан гонкі (стварыць вялікі файл у каталогу offline і адправіць сігнал SIGSTOP) і, да завяршэння апрацоўкі, падмяніць файл у каталогу offline на цвёрдую сімвалічную спасылку, якая паказвае на мэтавы файл, змесціва якога трэба прачытаць .

Характэрна, што ў Fedora 31 уразлівасць дазваляе адразу атрымаць прывілеі групы root, бо працэс smtpctl забяспечаны сцягам setgid root, замест setgid smtpq. Атрымаўшы доступ да групы root можна перазапісаць змесціва /var/lib/sss/mc/passwd і атрымаць поўны root-доступ у сістэме.

Крыніца: opennet.ru

Дадаць каментар