Nuotoliniu būdu išnaudojamas qmail pašto serverio pažeidžiamumas

„Qualys“ saugumo tyrėjai parodė galimybė išnaudojimas qmail pašto serverio pažeidžiamumas, garsus dar 2005 m. (CVE-2005-1513), tačiau liko nepataisyta, nes qmail autorius teigė, kad nerealu sukurti veikiančią eksploataciją, kurią būtų galima panaudoti atakuoti sistemas pagal numatytąją konfigūraciją. Qualys sugebėjo paruošti išnaudojimą, kuris paneigia šią prielaidą ir leidžia inicijuoti nuotolinį kodo vykdymą serveryje, siunčiant specialiai sukurtą pranešimą.

Problemą sukelia sveikojo skaičiaus perpildymas funkcijoje stralloc_readyplus(), kuris gali atsirasti apdorojant labai didelį pranešimą. Operacijai reikėjo 64 bitų sistemos su daugiau nei 4 GB virtualios atminties. Kai 2005 m. iš pradžių buvo analizuojamas pažeidžiamumas, Danielis J. Bernsteinas teigė, kad prielaida kode, kad paskirstytos masyvo dydis visada neviršija 32 bitų reikšmės, yra pagrįsta tuo, kad niekas neteikia gigabaitų atminties kiekvienam procesui. Per pastaruosius 15 metų 64 bitų sistemos serveriuose pakeitė 32 bitų sistemas, o tiekiamos atminties kiekis ir tinklo pralaidumas smarkiai išaugo.

qmail paketo prižiūrėtojai atsižvelgė į Bernstein pastabą ir apribojo laisvą atmintį, kai pradeda qmail-smtpd procesą (pavyzdžiui, Debian 10 versijoje limitas nustatytas į 7 MB). Tačiau Qualys inžinieriai nustatė, kad to nepakanka ir, be qmail-smtpd, galima atlikti nuotolinę ataką prieš qmail-local procesą, kuris liko neapribotas visuose išbandytuose paketuose. Kaip įrodymas buvo paruoštas išnaudojimo prototipas, kuris buvo tinkamas atakuoti Debian paketą naudojant qmail pagal numatytąją konfigūraciją.
Norint organizuoti nuotolinį kodo vykdymą atakos metu, serveriui reikia 4 GB laisvos vietos diske ir 8 GB RAM.
Išnaudojimas leidžia paleisti bet kokias apvalkalo komandas su bet kurio sistemos vartotojo teisėmis, išskyrus root ir sistemos vartotojus, kurie neturi savo pakatalogio „/home“ kataloge (paleidžiamas qmail-local procesas su teisėmis vietinio vartotojo, kuriam pristatoma).

Ataka vykdoma
siunčiant labai didelį pašto pranešimą, įskaitant keletą antraštės eilučių, kurių dydis yra maždaug 4 GB ir 576 MB. Apdorojant tokią eilutę programoje qmail-local, bandant pristatyti pranešimą vietiniam vartotojui atsiranda sveikojo skaičiaus perpildymas. Sveikojo skaičiaus perpildymas sukelia buferio perpildymą kopijuojant duomenis ir galimybę perrašyti atminties puslapius libc kodu. Manipuliuojant perduodamų duomenų išdėstymu, taip pat galima perrašyti funkcijos „open()“ adresą, pakeičiant jį funkcijos „sistema()“ adresu.

Toliau, iškviečiant qmesearch() qmail-local, failas „.qmail-extension“ atidaromas naudojant funkciją open(), kuri veda prie faktinio funkcijos vykdymo.
system(.qmail-extension"). Tačiau kadangi failo dalis „plėtimas“ sugeneruojama pagal gavėjo adresą (pvz., „localuser-extension@localdomain“), užpuolikai gali pasirūpinti, kad komanda būtų išsiųsta, nurodydami vartotoją „localuser-;command“. ;@localdomain“ kaip pranešimo gavėjas.

Atliekant kodo analizę, papildomame „qmail-verify“ pataisyme, kuris yra „Debian“ paketo dalis, taip pat buvo nustatyti du pažeidžiamumai. Pirmasis pažeidžiamumas (CVE-2020-3811) leidžia apeiti el. pašto adreso patvirtinimą, o antrasis (CVE-2020-3812) gali nutekėti vietinė informacija. Visų pirma, pirmasis pažeidžiamumas leidžia apeiti adreso, naudojamo išnaudojime, teisingumo patikrinimą, norint išsiųsti komandą (patikrinimas neveikia adresams be domeno, pvz., „localuser-;command;“). Antrasis pažeidžiamumas gali būti naudojamas norint patikrinti, ar sistemoje yra failų ir katalogų, įskaitant tuos, kurie pasiekiami tik root (qmail-verify veikia su root teisėmis), naudojant tiesioginį skambutį vietiniam tvarkytojui.

Norėdami išspręsti problemą, Bernstein rekomendavo paleisti qmail procesus su bendru laisvos atminties apribojimu ("softlimit -m12345678"), tokiu atveju problema blokuojama. Kaip alternatyvus apsaugos būdas taip pat minimas maksimalaus apdorojamo pranešimo dydžio ribojimas per failą „control/databaites“ (pagal numatytuosius nustatymus jis nesukuriamas su numatytaisiais nustatymais, qmail išlieka pažeidžiamas). Be to, "kontrolė/duomenų baitai" neapsaugo nuo vietinių sistemos vartotojų atakų, nes į limitą atsižvelgia tik qmail-smtpd.

Problema turi įtakos paketui netqmail, įtrauktas į „Debian“ saugyklas. Šiam paketui buvo paruoštas pataisų rinkinys, pašalinantis senus 2005 m. pažeidžiamumus (pridedant kietosios atminties apribojimus prie alloc() funkcijos kodo), ir naujas qmail-verify problemas. Atskirai paruošta atnaujinta qmail-verify pataisos versija. Kūrėjai šakos notqmail paruošė savo pataisas, skirtas blokuoti senas problemas, taip pat pradėjo dirbti, kad pašalintų visus galimus sveikųjų skaičių perpildymą kode.

Šaltinis: opennet.ru

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