Exim kritiska ievainojamība, kas ļauj izpildīt kodu serverī kā root

Exim pasta serverī identificēts kritisks ievainojamība (CVE-2019-10149), kas, apstrādājot īpaši izstrādātu pieprasījumu, var izraisīt attālinātu koda izpildi serverī ar root tiesībām. Problēmas izmantošanas iespēja tika atzīmēta versijās no 4.87 līdz 4.91 ieskaitot vai veidojot ar opciju EXPERIMENTAL_EVENT.

Noklusējuma konfigurācijā uzbrukumu var veikt bez liekiem sarežģījumiem vietējam lietotājam, jo ​​tiek izmantots ACL “verify = recipient”, kas veic papildu ārējo adrešu pārbaudes. Attālināts uzbrukums var notikt, mainot iestatījumus, piemēram, darbojoties kā sekundāram MX citam domēnam, noņemot ACL "verify=recipient" vai veicot noteiktas izmaiņas lokālajā_part_sufiksā). Attālināts uzbrukums ir iespējams arī tad, ja uzbrucējs spēj uzturēt atvērtu savienojumu ar serveri 7 dienas (piemēram, nosūtot vienu baitu minūtē, lai apietu taimautu). Tajā pašā laikā ir iespējams, ka problēmas attālinātai izmantošanai ir vienkāršāki uzbrukuma vektori.

Ievainojamību izraisa nepareiza adresāta adreses pārbaude funkcijā delivery_message(), kas definēta failā /src/deliver.c. Manipulējot ar adreses formatējumu, uzbrucējs var panākt savu datu aizstāšanu ar komandas argumentiem, kas izsaukti, izmantojot funkciju execv() ar saknes tiesībām. Darbībai nav jāizmanto sarežģītas metodes, ko izmanto bufera pārpildīšanai vai atmiņas sabojāšanai; pietiek ar vienkāršu rakstzīmju aizstāšanu.

Problēma ir saistīta ar konstrukcijas izmantošanu adreses konvertēšanai:

piegādā_localpart = expand_string(
string_sprintf("${local_part:%s}", jauna->adrese));
piegādāt_domēns = expand_string(
string_sprintf("${domēns:%s}", jauna->adrese));

Funkcija expand_string() ir pārāk sarežģīts kombinētājs, tostarp komandas “${run{command arguments}” atpazīšana, kas noved pie ārējā apdarinātāja palaišanas. Tādējādi, lai uzbruktu SMTP sesijas ietvaros, vietējam lietotājam ir jānosūta tikai komanda, piemēram, “RCPT UZ “lietotājvārds+${run{...}}@localhost”, kur localhost ir viens no resursdatoriem no saraksta local_domains, un lietotājvārds ir esoša lokālā lietotāja vārds.

Ja serveris darbojas kā pasta relejs, pietiek attālināti nosūtīt komandu 'RCPT TO "${run{...}}@relaydomain.com"', kur relaydomain.com ir viens no resursdatoriem, kas norādīti relay_to_domains. iestatījumu sadaļa. Tā kā Exim pēc noklusējuma neatlaiž privilēģiju režīmu (deliver_drop_privilege = false), komandas, kas nodotas, izmantojot "${run{...}}", tiks izpildītas kā root.

Jāatzīmē, ka ievainojamība bija likvidēta februārī izdotajā 4.92 laidienā, neuzsverot, ka labojums var radīt drošības problēmas. Nav iemesla uzskatīt, ka Exim izstrādātāji būtu apzināti slēpuši ievainojamību, jo problēma tika novērsta labojumi kļūme, kas rodas, pārsūtot nepareizas adreses, un Qualys atklāja ievainojamību Exim izmaiņu audita laikā.

Labojums iepriekšējām versijām, kuras joprojām tiek izmantotas izplatījumos, pašlaik ir pieejams tikai kā plāksteris. Iepriekšējo filiāļu koriģējošie izdevumi, lai novērstu problēmu, ir plānoti 11. jūnijā. Pakešu atjauninājumi ir gatavi Debian, Ubuntu, openSUSE. Arch Linux и Fedora Viņi piegādā versiju 4.92, kurā problēma neparādās. RHEL un CentOS problēma nav uzņēmīgi, jo Exim nav iekļauts viņu parastajā pakotņu krātuvē.

Avots: opennet.ru

Pievieno komentāru