Istraživači sigurnosti iz Qualysa
Problem je uzrokovan prekoračenjem cijelog broja u funkciji stralloc_readyplus(), koje se može dogoditi prilikom obrade vrlo velike poruke. Rad je zahtijevao 64-bitni sustav s više od 4 GB virtualne memorije. Kada je ranjivost izvorno analizirana 2005., Daniel J. Bernstein je tvrdio da se pretpostavka u kodu da je veličina dodijeljenog niza uvijek unutar 32-bitne vrijednosti temelji na činjenici da nitko ne daje gigabajte memorije svakom procesu. Tijekom proteklih 15 godina 64-bitni sustavi na poslužiteljima zamijenili su 32-bitne sustave, a količina isporučene memorije i propusnost mreže dramatično su porasli.
Održavatelji paketa qmail uzeli su u obzir Bernsteinovu napomenu i ograničili dostupnu memoriju prilikom pokretanja procesa qmail-smtpd (na primjer, u Debianu 10 ograničenje je postavljeno na 7 MB). No, inženjeri iz Qualysa otkrili su da to nije dovoljno te se, osim na qmail-smtpd, daljinski napad može izvršiti i na proces qmail-local, koji je ostao neograničen u svim testiranim paketima. Kao dokaz, pripremljen je prototip exploita koji je bio prikladan za napad na Debian paket s qmailom u zadanoj konfiguraciji.
Da bi organizirao daljinsko izvršavanje koda tijekom napada, poslužitelj zahtijeva 4 GB slobodnog prostora na disku i 8 GB RAM-a.
Eksploatacija vam omogućuje pokretanje bilo koje naredbe ljuske s pravima bilo kojeg korisnika u sustavu, osim root korisnika i korisnika sustava koji nemaju vlastiti poddirektorij u direktoriju “/home” (proces qmail-local pokreće se s pravima lokalnog korisnika kojemu se vrši dostava).
Napad je izveden
slanjem vrlo velike poruke pošte, uključujući nekoliko redaka zaglavlja, veličine približno 4 GB i 576 MB. Obrada takvog niza u qmail-local rezultira prekoračenjem cijelog broja pri pokušaju isporuke poruke lokalnom korisniku. Integer overflow zatim dovodi do prekoračenja međuspremnika prilikom kopiranja podataka i mogućnosti prepisivanja memorijskih stranica libc kodom. Manipuliranjem rasporeda prenesenih podataka također je moguće prepisati adresu funkcije "open()", zamjenjujući je adresom funkcije "system()".
Zatim, u procesu pozivanja qmesearch() u qmail-local, datoteka “.qmail-extension” se otvara kroz open() funkciju, što dovodi do stvarnog izvršavanja funkcije
sustav(".qmail-ekstenzija"). No budući da se dio datoteke s "ekstenzijom" generira na temelju adrese primatelja (na primjer, "localuser-extension@localdomain"), napadači mogu organizirati slanje naredbe za izvođenje navođenjem korisničke "localuser-;command ;@localdomain” kao primatelja poruke.
Tijekom analize koda također su identificirane dvije ranjivosti u dodatnoj zakrpi qmail-verify, koja je dio paketa za Debian. Prva ranjivost (
Kako bi se zaobišao problem, Bernstein je preporučio pokretanje qmail procesa s ukupnim ograničenjem dostupne memorije (“softlimit -m12345678”), u kojem slučaju se problem blokira. Kao alternativna metoda zaštite također se spominje ograničavanje maksimalne veličine obrađene poruke kroz datoteku “control/databytes” (prema zadanim postavkama nije kreirana sa zadanim postavkama, qmail ostaje ranjiv). Dodatno, "control/databytes" ne štiti od lokalnih napada korisnika sustava, budući da ograničenje uzima u obzir samo qmail-smtpd.
Problem utječe na paket
Izvor: opennet.ru