Gwendid critigol yn Exim sy'n caniatΓ‘u gweithredu cod ar y gweinydd gyda breintiau gwraidd

Yn gweinydd post Exim a nodwyd kritiчСская bregusrwydd (CVE-2019-10149), a all arwain at weithredu cod o bell ar y gweinydd gyda hawliau gwraidd wrth brosesu cais wedi'i grefftio'n arbennig. Nodwyd y posibilrwydd o ecsbloetio'r broblem mewn fersiynau o 4.87 i 4.91 yn gynwysedig neu wrth adeiladu gyda'r opsiwn EXPERIMENTAL_EVENT.

Yn y cyfluniad diofyn, gall defnyddiwr lleol gyflawni'r ymosodiad heb gymhlethdodau diangen, gan fod yr ACL "verify = derbynnydd" yn cael ei gymhwyso, sy'n cynnal gwiriadau ychwanegol ar gyfer cyfeiriadau allanol. Gall ymosodiad o bell ddigwydd pan fydd gosodiadau'n cael eu newid, megis gweithredu fel MX eilaidd ar gyfer parth arall, dileu'r ACL "verify=recipient", neu newidiadau penodol i local_part_suffix). Mae ymosodiad o bell hefyd yn bosibl os yw'r ymosodwr yn gallu cadw'r cysylltiad Γ’'r gweinydd ar agor am 7 diwrnod (er enghraifft, anfon un beit y funud i osgoi terfyn amser). Ar yr un pryd, mae'n bosibl bod yna fectorau ymosodiad symlach ar gyfer ecsbloetio'r broblem o bell.

Mae'r bregusrwydd yn cael ei achosi gan ddilysiad anghywir o gyfeiriad y derbynnydd yn y swyddogaeth deliver_message() a ddiffinnir yn y ffeil /src/deliver.c. Trwy drin y fformat cyfeiriad, gall ymosodwr gyflawni amnewid ei ddata i ddadleuon gorchymyn a elwir trwy'r swyddogaeth execv() gyda hawliau gwraidd. Nid yw gweithrediad yn gofyn am ddefnyddio technegau cymhleth a ddefnyddir ar gyfer gorlifoedd clustogi neu lygredd cof; mae amnewid nodau syml yn ddigon.

Mae'r broblem yn gysylltiedig Γ’'r defnydd o'r lluniad ar gyfer trosi cyfeiriad:

deliver_localpart = expand_string(
string_sprintf( "${local_part:%s}", new->cyfeiriad));
deliver_domain = ehangu_llinyn (
string_sprintf( "${domain:%s}", new->cyfeiriad));

Mae'r swyddogaeth expand_string() yn gyfuniad gor-gymhleth, gan gynnwys adnabod y gorchymyn β€œ${run{command arguments}”, sy'n arwain at lansio triniwr allanol. Felly, i ymosod o fewn sesiwn SMTP, dim ond gorchymyn fel 'RCPT TO "username +${run{...}}@localhost"' sydd ei angen ar ddefnyddiwr lleol, lle mae localhost yn un o'r gwesteiwyr o'r rhestr parthau_lleol, ac enw defnyddiwr yw enw defnyddiwr lleol presennol.

Os yw'r gweinydd yn gweithio fel cyfnewid post, mae'n ddigon i anfon y gorchymyn 'RCPT TO "${run{...}}@relaydomain.com"' o bell, lle mae relaydomain.com yn un o'r gwesteiwyr a restrir yn y relay_to_domains adran gosodiadau. Gan nad yw Exim yn rhagosod i ollwng modd braint (deliver_drop_privilege = ffug), bydd gorchmynion a basiwyd trwy "${run{...}}" yn cael eu gweithredu fel gwraidd.

Mae'n werth nodi bod y bregusrwydd dileu yn y datganiad 4.92 a ryddhawyd ym mis Chwefror, heb bwysleisio y gallai'r atgyweiriad arwain at broblemau diogelwch. Nid oes unrhyw reswm i gredu bod datblygwyr Exim wedi cuddio'r bregusrwydd yn fwriadol, gan fod y broblem wedi'i datrys yn ystod cywiro methiant sy'n digwydd pan fydd cyfeiriadau anghywir yn cael eu trosglwyddo, a nodwyd y bregusrwydd gan Qualys yn ystod archwiliad o newidiadau yn Exim.

Mae atgyweiriad ar gyfer fersiynau blaenorol sy'n parhau i gael eu defnyddio mewn dosraniadau ar gael ar hyn o bryd fel clwt. Mae datganiadau cywirol ar gyfer canghennau blaenorol i ddatrys y broblem wedi'u hamserlennu ar gyfer Mehefin 11eg. Mae diweddariadau pecyn yn barod ar gyfer Debian, Ubuntu, openSUSE. Arch Linux ΠΈ Fedora Maent yn cyflenwi fersiwn 4.92, lle nad yw'r broblem yn ymddangos. RHEL a CentOS problem ddim yn agored i niwed, gan nad yw Exim wedi'i gynnwys yn eu storfa becynnau arferol.

Ffynhonnell: opennet.ru

Ychwanegu sylw