Кампанія Qualys
Праблема выклікана памылкай у кодзе, які ажыццяўляе дастаўку пошты на выдалены паштовы сервер (не ў кодзе, які апрацоўвае ўваходныя злучэнні). Атака магчыма як на баку кліента, так і на баку сервера. На боку кліента напад магчымая ў канфігурацыі 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 таксама
Праблема з'яўляецца следствам няпоўнага ўстаранення
Характэрна, што ў Fedora 31 уразлівасць дазваляе адразу атрымаць прывілеі групы root, бо працэс smtpctl забяспечаны сцягам setgid root, замест setgid smtpq. Атрымаўшы доступ да групы root можна перазапісаць змесціва /var/lib/sss/mc/passwd і атрымаць поўны root-доступ у сістэме.
Крыніца: opennet.ru