Zehfbûna krîtîk a li Exim-ê ku dihêle kod li ser serverê bi mafên root ve were darve kirin

Di servera posta Exim de nas kirin rexneyan lawazbûn (CVE-2019-10149), ku dema ku daxwazek taybetî hatî çêkirin dikare bibe sedema darvekirina kodê ji dûr ve li ser serverê bi mafên root. Ihtîmala îstismarkirina pirsgirêkê di guhertoyên ji 4.87 heta 4.91-an de an jî dema ku bi vebijarka EXPERIMENTAL_EVENT ve hatî çêkirin de hate destnîşan kirin.

Di veavakirina xwerû de, êrîş dikare bêyî tevliheviyên nehewce ji hêla bikarhênerek herêmî ve were kirin, ji ber ku "verastkirin = wergir" ACL tête sepandin, ku ji bo navnîşanên derveyî kontrolên din pêk tîne. Dema ku mîheng têne guheztin, êrîşek ji dûr ve dikare çêbibe, wek mînak ji bo domainek din wekî MX-ya duyemîn tevbigere, ACL-ya "verify=wergir" rakirin, an hin guheztinên local_part_suffix). Êrîşek ji dûr ve jî gengaz e ku êrîşkar bikaribe girêdana bi serverê re 7 rojan vekirî bihêle (mînak, di her hûrdemê de yek byte bişîne da ku demek derbas bike). Di heman demê de, mimkun e ku vektorên êrîşê yên hêsan ên ji bo karanîna dûr a pirsgirêkê hene.

Qelsî ji ber verastkirina çewt a navnîşana wergir di fonksiyona deliver_message() de ku di pelê /src/deliver.c de hatî destnîşan kirin pêk tê. Bi manîpulekirina formatkirina navnîşanê, êrîşkar dikare bigihîje cîhgirtina daneyên xwe di nav argumanên fermanek ku bi fonksiyona execv() ve bi mafên root ve tê gotin. Operasyon ne hewce ye ku teknîkên tevlihev ên ku ji bo zêdekirina tampon an xerabûna bîranînê têne bikar anîn; guheztina karaktera hêsan bes e.

Pirsgirêk bi karanîna avahiyê ji bo veguherîna navnîşan ve girêdayî ye:

teslîm_localpart = berfireh_string(
string_sprintf("${local_part:%s}", new->navnîşan));
teslîm_domain = berfireh_string(
string_sprintf("${domain:%s}", new->navnîşan));

Fonksîyona expand_string() berhevkarek pir tevlihev e, di nav de naskirina fermana "${run{argumanên fermanê}" jî, ku rê li ber destpêkirina destekkerek derveyî vedike. Ji ber vê yekê, ji bo êrîşkirina di nav danişînek SMTP de, bikarhênerek herêmî tenê pêdivî ye ku fermanek wekî 'RCPT BO "username+${run{...}}@localhost"' bişîne, ku localhost yek ji mêvandarên navnîşa local_domains e. û navê bikarhêner navê bikarhênerek herêmî ya heyî ye.

Ger server wekî relayek e-nameyê bixebite, bes e ku meriv ji dûr ve fermana 'RCPT BO "${run{...}}@relaydomain.com" bişîne, ku relaydomain.com yek ji hosteyên ku di relay_to_domains de hatî navnîş kirin. beşa mîhengan. Ji ber ku Exim moda îmtiyazê ranewestîne (deliver_drop_privilege = xelet), emrên ku ji "${run{...}}" derbas dibin dê wekî root werin bicîh kirin.

Hêjayî gotinê ye ku qelsî hebû tasfiye kirin di serbestberdana 4.92 de ku di meha Sibatê de hat berdan, bêyî ku balê bikişîne ser wê yekê ku çareserî dibe sedema pirsgirêkên ewlehiyê. Ti sedemek tune ku em bawer bikin ku ji hêla pêşdebirên Exim ve veşartiyek bi qestî ya qelsiyê hebû, ji ber ku pirsgirêk di dema rastkirin têkçûna ku dema ku navnîşanên xelet têne veguheztin çêdibe, û qelsî ji hêla Qualys ve di dema kontrolkirina guhertinên li Exim de hate nas kirin.

Rastkirinek ji bo guhertoyên berê yên ku di belavkirinan de têne bikar anîn heya niha tenê wekî peyda dibe pîne. Ji bo şaxên berê yên ku pirsgirêk çareser bikin, ji bo 11-ê Hezîranê serbestberdanên rast têne plan kirin. Nûvekirinên pakêtê ji bo amade ne Debian, Ubuntu, OpenSUSE. Arch Linux и Fedora Ew guhertoya 4.92 peyda dikin, ku tê de pirsgirêk xuya nake. Pirsgirêka RHEL û CentOS ne hesas, ji ber ku Exim di depoya pakêta wan a standard de tune ye.

Source: opennet.ru

Add a comment