Studiuesit e sigurisë nga Qualys
Problemi shkaktohet nga një tejkalim i plotë në funksionin stralloc_readyplus(), i cili mund të ndodhë kur përpunohet një mesazh shumë i madh. Operacioni kërkonte një sistem 64-bit me më shumë se 4 GB memorie virtuale. Kur dobësia u analizua fillimisht në 2005, Daniel J. Bernstein argumentoi se supozimi në kod se madhësia e grupit të alokuar është gjithmonë brenda vlerës 32-bit bazohet në faktin se askush nuk ofron gigabajt memorie për secilin proces. Gjatë 15 viteve të fundit, sistemet 64-bit në serverë kanë zëvendësuar sistemet 32-bit, dhe sasia e memories së furnizuar dhe gjerësia e brezit të rrjetit janë rritur në mënyrë dramatike.
Mbajtësit e paketës qmail morën parasysh shënimin e Bernstein dhe kufizuan memorien e disponueshme kur nisi procesi qmail-smtpd (për shembull, në Debian 10 kufiri është vendosur në 7MB). Por inxhinierët nga Qualys zbuluan se kjo nuk mjafton dhe, përveç qmail-smtpd, mund të kryhet një sulm në distancë në procesin qmail-local, i cili mbeti i pakufizuar në të gjitha paketat e testuara. Si provë, u përgatit një prototip exploit që ishte i përshtatshëm për të sulmuar paketën Debian me qmail në konfigurimin e paracaktuar.
Për të organizuar ekzekutimin e kodit në distancë gjatë një sulmi, serveri kërkon 4 GB hapësirë të lirë në disk dhe 8 GB RAM.
Exploit ju lejon të ekzekutoni çdo komandë shell me të drejtat e çdo përdoruesi në sistem, me përjashtim të përdoruesve rrënjë dhe të sistemit që nuk kanë nëndirektorinë e tyre në direktorinë "/home" (procesi qmail-local niset me të drejtat të përdoruesit lokal tek i cili kryhet dorëzimi).
Sulmi është kryer
përmes dërgimit të një mesazhi postar shumë të madh, duke përfshirë disa rreshta kokë, me përmasa afërsisht 4 GB dhe 576 MB. Përpunimi i një vargu të tillë në qmail-local rezulton në një tejkalim të numrit të plotë kur përpiqet t'i japë një mesazh përdoruesit lokal. Një tejkalim i numrave të plotë çon më pas në një tejmbushje buferi gjatë kopjimit të të dhënave dhe mundësinë e mbishkrimit të faqeve të kujtesës me kodin libc. Duke manipuluar paraqitjen e të dhënave të transmetuara, është gjithashtu e mundur të rishkruhet adresa e funksionit “open()”, duke e zëvendësuar atë me adresën e funksionit “system()”.
Më pas, në procesin e thirrjes së qmesearch() në qmail-local, skedari “.qmail-extension” hapet përmes funksionit open(), i cili çon në ekzekutimin aktual të funksionit.
system(".qmail-extension"). Por meqenëse pjesa “extension” e skedarit gjenerohet në bazë të adresës së marrësit (për shembull, “localuser-extension@localdomain”), sulmuesit mund të organizojnë që komanda të dërgohet për të ekzekutuar duke specifikuar përdoruesin “localuser-;command”. ;@localdomain” si marrës i mesazhit.
Gjatë analizës së kodit, dy dobësi u identifikuan gjithashtu në patch-in shtesë të qmail-verify, i cili është pjesë e paketës për Debian. cenueshmëria e parë (
Për të zgjidhur problemin, Bernstein rekomandoi ekzekutimin e proceseve qmail me një kufi total në memorien e disponueshme (“softlimit -m12345678”), në të cilin rast problemi bllokohet. Si një metodë alternative e mbrojtjes, përmendet edhe kufizimi i madhësisë maksimale të mesazhit të përpunuar përmes skedarit "control/databytes" (si parazgjedhje nuk është krijuar me cilësimet e paracaktuara qmail mbetet i cenueshëm). Për më tepër, "control/databytes" nuk mbron nga sulmet lokale nga përdoruesit e sistemit, pasi kufiri merret parasysh vetëm nga qmail-smtpd.
Problemi prek paketën
Burimi: opennet.ru