Qualysi turvateadlased
Probleemi põhjustab funktsiooni stralloc_readyplus() täisarvu ülevool, mis võib tekkida väga suure sõnumi töötlemisel. Tööks oli vaja 64-bitist süsteemi rohkem kui 4 GB virtuaalmäluga. Kui haavatavust 2005. aastal algselt analüüsiti, väitis Daniel J. Bernstein, et koodis sisalduv eeldus, et eraldatud massiivi suurus jääb alati 32-bitise väärtuse piiresse, põhineb asjaolul, et keegi ei anna igale protsessile gigabaiti mälu. Viimase 15 aasta jooksul on serverites 64-bitised süsteemid asendanud 32-bitised süsteemid ning tarnitud mälu maht ja võrgu ribalaius on järsult kasvanud.
Qmaili pakettide hooldajad võtsid Bernsteini märkust arvesse ja piirasid qmail-smtpd protsessi käivitamisel saadaolevat mälu (näiteks Debian 10 puhul on piiranguks seatud 7 MB). Kuid Qualysi insenerid leidsid, et sellest ei piisa ja lisaks qmail-smtpd-le saab kaugrünnaku läbi viia ka qmail-local protsessile, mis jäi kõigis testitud pakettides piiranguteta. Selle tõestuseks valmistati ette ärakasutamise prototüüp, mis sobis Debiani paketi ründamiseks vaikekonfiguratsioonis qmailiga.
Rünnaku ajal koodi kaugkäitamise korraldamiseks vajab server 4 GB vaba kettaruumi ja 8 GB muutmälu.
Exploit võimaldab käivitada mis tahes shellikäske süsteemi mis tahes kasutaja õigustega, välja arvatud juur- ja süsteemikasutajad, kellel pole kataloogis “/home” oma alamkataloogi (käivitatakse qmail-local protsess koos õigustega kohaliku kasutaja, kellele tarnitakse).
Rünnak viiakse läbi
väga suure meilisõnumi saatmise kaudu, mis sisaldab mitut päiserida, mõõtmetega ligikaudu 4 GB ja 576 MB. Sellise stringi töötlemine programmis qmail-local põhjustab kohalikule kasutajale sõnumi edastamisel täisarvu ületäitumise. Täisarvu ületäitumine põhjustab seejärel andmete kopeerimisel puhvri ületäitumise ja võimaluse mälulehti libc-koodiga üle kirjutada. Edastatavate andmete paigutust manipuleerides on võimalik ka funktsiooni “open()” aadress ümber kirjutada, asendades selle funktsiooni “system()” aadressiga.
Järgmisena avatakse qmesearch() väljakutsumise protsessis qmail-localis funktsiooni open() kaudu fail “.qmail-extension”, mis viib funktsiooni tegeliku täitmiseni.
system(.qmail-extension"). Kuid kuna faili laiendusosa genereeritakse adressaadi aadressi põhjal (näiteks „localuser-extension@localdomain”), saavad ründajad korraldada käsu saatmise käivitamiseks, määrates kasutajaks „localuser-;command ;@localdomain” kui sõnumi adressaat.
Koodianalüüsi käigus tuvastati kaks turvaauku ka täiendavas qmail-verify paigas, mis on osa Debiani paketist. Esimene haavatavus (
Probleemi lahendamiseks soovitas Bernstein käivitada qmaili protsessid saadaoleva mälu kogupiiranguga (“softlimit -m12345678”), sel juhul probleem blokeeritakse. Alternatiivse kaitsemeetodina mainitakse ka töödeldava sõnumi maksimaalse suuruse piiramist faili “control/databaites” kaudu (vaikimisi seda ei looda vaikeseadetega qmail jääb haavatavaks). Lisaks ei kaitse "kontroll/andmebaidid" süsteemikasutajate kohalike rünnakute eest, kuna piirangut võtab arvesse ainult qmail-smtpd.
Probleem mõjutab pakendit
Allikas: opennet.ru