Exim-ի կրիտիկական խոցելիությունը, որը թույլ է տալիս ծածկագիրը կատարել սերվերի վրա որպես արմատ

Exim փոստի սերվերում բացահայտված քննադատական խոցելիություն (CVE-2019-10149- ը), որը կարող է հանգեցնել սերվերի վրա կոդի հեռակա կատարման՝ որպես արմատ՝ հատուկ մշակված հարցումը մշակելիս: Խնդիրն օգտագործելու հնարավորությունը նշվում է 4.87-ից մինչև 4.91 ներառյալ տարբերակներում կամ EXPERIMENTAL_EVENT տարբերակով կառուցելիս:

Լռելյայն կազմաձևում հարձակումը կարող է իրականացվել առանց ավելորդ բարդությունների տեղական օգտագործողի կողմից, քանի որ օգտագործվում է «verify = ստացող» ACL-ը, որը լրացուցիչ ստուգումներ է կատարում արտաքին հասցեների համար: Հեռակա գրոհի իրականացումը հնարավոր է փոխելով կարգավորումները, օրինակ՝ որպես երկրորդական MX այլ տիրույթի համար, հեռացնելով «verify = recipient» ACL-ը կամ որոշակի փոփոխություններ local_part_suffix-ում): Հեռավոր հարձակումը հնարավոր է նաև, եթե հարձակվողը կարող է սերվերի հետ կապը բաց պահել 7 օր (օրինակ՝ րոպեում մեկ բայթ ուղարկելով ժամանակի ընդմիջումը շրջանցելու համար): Միևնույն ժամանակ, չի բացառվում, որ խնդրի հեռահար շահագործման համար ավելի պարզ հարձակման վեկտորներ կան։

Խոցելիությունը պայմանավորված է /src/deliver.c ֆայլում սահմանված deliver_message() ֆունկցիայում ստացողի հասցեի սխալ վավերացումով։ Հասցեի ձևաչափումը մանիպուլյացիայի ենթարկելով՝ հարձակվողը կարող է հասնել իր տվյալների փոխարինմանը execv() ֆունկցիայի միջոցով արմատային արտոնություններով կանչված հրամանի արգումենտներով: Գործողությունը չի պահանջում բարդ տեխնիկայի կիրառում, որն օգտագործվում է բուֆերային արտահոսքի կամ հիշողության խաթարման համար, բավական է միայն նիշերի փոխարինումը:

Խնդիրը կապված է հասցեների փոխակերպման համար կառուցվածքի օգտագործման հետ.

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->հասցե));
առաքման_տիրույթ = expand_string(
string_sprintf ("${տիրույթ:%s}", new->հասցե));

Expand_string() ֆունկցիան բարդ կոմբինատոր է, որը նաև ճանաչում է «${run{command arguments}» հրամանը, որը հանգեցնում է արտաքին մշակողի գործարկմանը: Այսպիսով, SMTP սեանսի ընթացքում հարձակվելու համար բավական է, որ տեղական օգտատերը ուղարկի այնպիսի հրաման, ինչպիսին է «RCPT TO «username+${run{…}}@localhost», որտեղ localhost-ը local_domains ցուցակի հոսթներից մեկն է, իսկ օգտվողի անունը գոյություն ունեցող տեղական օգտագործողի անունն է:

Եթե ​​սերվերը աշխատում է որպես փոստի ռելե, բավական է հեռակա կարգով ուղարկել «RCPT «${run{…}}@relaydomain.com» հրամանը, որտեղ relaydomain.com-ը relay_to_domains-ի կարգավորումների բաժնում թվարկված հոսթներից մեկն է: . Քանի որ Exim-ը լռելյայն չի օգտագործում անկման արտոնության ռեժիմ (deliver_drop_privilege = false), «${run{...}}»-ի միջոցով փոխանցված հրամանները կկատարվեն որպես արմատ:

Հատկանշական է, որ խոցելիությունը եղել է վերացվել է փետրվարին թողարկվել է 4.92-ը՝ առանց շեշտելու, որ շտկումը կարող է հանգեցնել անվտանգության խնդիրների: Ոչ մի հիմք չկա ենթադրելու, որ խոցելիությունը կանխամտածված թաքցրել են Exim ծրագրավորողները, քանի որ խնդիրը շտկվել է ս.թ. ուղղումներ ձախողում, որը տեղի է ունենում, երբ սխալ հասցեներ են փոխանցվում, և խոցելիությունը հայտնաբերվել է Qualys-ի կողմից Exim-ի փոփոխությունները ստուգելիս:

Անցյալ տարբերակների ուղղումը, որոնք շարունակում են կիրառվել բաշխումների վրա, ներկայումս հասանելի է միայն որպես կարկատել. Խնդիրը շտկող նախկին մասնաճյուղերի ուղղիչ թողարկումները նախատեսված են հունիսի 11-ին: Փաթեթի թարմացումները պատրաստված են Debian, Ubuntu, openSUSE. Arch Linux- ը и Fedora մատուցել 4.92 տարբերակը, որում խնդիրը չի երևում: RHEL-ի և CentOS-ի թողարկում ենթակա չէ, քանի որ Exim-ը ներառված չէ իրենց սովորական փաթեթների պահոցում:

Source: opennet.ru

Добавить комментарий