Varnostni raziskovalci iz Qualysa
Težavo povzroča prekoračitev celega števila v funkciji stralloc_readyplus(), do katere lahko pride pri obdelavi zelo velikega sporočila. Delovanje je zahtevalo 64-bitni sistem z več kot 4 GB navideznega pomnilnika. Ko je bila ranljivost prvotno analizirana leta 2005, je Daniel J. Bernstein trdil, da predpostavka v kodi, da je velikost dodeljene matrike vedno znotraj 32-bitne vrednosti, temelji na dejstvu, da nihče ne zagotavlja gigabajtov pomnilnika vsakemu procesu. V zadnjih 15 letih so 64-bitni sistemi na strežnikih nadomestili 32-bitne sisteme, količina dobavljenega pomnilnika in pasovna širina omrežja pa sta se dramatično povečala.
Vzdrževalci paketa qmail so upoštevali Bernsteinovo opombo in omejili razpoložljivi pomnilnik pri zagonu procesa qmail-smtpd (na primer, v Debianu 10 je omejitev nastavljena na 7 MB). A inženirji podjetja Qualys so ugotovili, da to ni dovolj in je poleg qmail-smtpd možno izvesti oddaljeni napad tudi na proces qmail-local, ki je v vseh testiranih paketih ostal neomejen. Kot dokaz je bil pripravljen prototip izkoriščanja, ki je bil primeren za napad na paket Debian s qmailom v privzeti konfiguraciji.
Za organizacijo oddaljenega izvajanja kode med napadom potrebuje strežnik 4 GB prostega prostora na disku in 8 GB RAM-a.
Izkoriščanje vam omogoča zagon poljubnih lupinskih ukazov s pravicami katerega koli uporabnika v sistemu, razen korenskih in sistemskih uporabnikov, ki nimajo lastnega podimenika v imeniku “/home” (proces qmail-local se zažene s pravicami lokalnega uporabnika, kateremu se izvaja dostava).
Napad je izveden
s pošiljanjem zelo velikega poštnega sporočila, vključno z več vrsticami glave, ki merijo približno 4 GB in 576 MB. Obdelava takega niza v qmail-local povzroči prekoračitev celega števila pri poskusu dostave sporočila lokalnemu uporabniku. Celoštevilska prekoračitev nato vodi do prekoračitve medpomnilnika pri kopiranju podatkov in možnosti prepisovanja pomnilniških strani s kodo libc. Z manipulacijo postavitve poslanih podatkov je mogoče tudi prepisati naslov funkcije »open()« in ga nadomestiti z naslovom funkcije »system()«.
Nato se v procesu klica qmesearch() v qmail-local prek funkcije open() odpre datoteka ».qmail-extension«, ki vodi do dejanske izvedbe funkcije
sistem(".qmail-razširitev"). Ker pa je del datoteke »pripona« ustvarjen na podlagi prejemnikovega naslova (na primer »localuser-extension@localdomain«), lahko napadalci poskrbijo, da se ukaz pošlje za zagon, tako da navedejo uporabnika »localuser-;command ;@localdomain« kot prejemnik sporočila.
Med analizo kode sta bili ugotovljeni tudi dve ranljivosti v dodatnem popravku qmail-verify, ki je del paketa za Debian. Prva ranljivost (
Za rešitev težave je Bernstein priporočil izvajanje procesov qmail s popolno omejitvijo razpoložljivega pomnilnika (»softlimit -m12345678«), v tem primeru je težava blokirana. Kot alternativni način zaščite je omenjena tudi omejitev največje velikosti obdelanega sporočila prek datoteke “control/databytes” (privzeto ni ustvarjena s privzetimi nastavitvami, qmail ostaja ranljiv). Poleg tega "control/databytes" ne ščiti pred lokalnimi napadi uporabnikov sistema, saj omejitev upošteva samo qmail-smtpd.
Težava vpliva na paket
Vir: opennet.ru