Kaugkasutav haavatavus qmaili meiliserveris

Qualysi turvateadlased näitas võimalus ärakasutamine haavatavused qmaili meiliserveris, kuulus aastal 2005 (CVE-2005-1513), kuid jäi parandamata, sest qmaili autor väitis, et ei ole realistlik luua töötavat ärakasutamist, mida saaks kasutada vaikekonfiguratsioonis süsteemide ründamiseks. Qualys suutis ette valmistada ärakasutamise, mis lükkab selle oletuse ümber ja võimaldab käivitada serveris koodi kaugkäitamise, saates selleks spetsiaalselt loodud sõnumi.

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 (CVE-2020-3811) võimaldab teil meiliaadressi kinnitamisest mööda minna ja teine ​​(CVE-2020-3812) põhjustab kohaliku teabe lekkimist. Eelkõige võimaldab esimene haavatavus mööda minna käsu saatmiseks ärakasutatud aadressi õigsuse kontrollimisest (kinnitus ei tööta domeenita aadresside puhul, näiteks „localuser-;command;“). Teist haavatavust saab kasutada, et kontrollida failide ja kataloogide olemasolu süsteemis, sealhulgas neid, mis on juurdepääsetavad ainult juurõigustega (qmail-verify töötab juurõigustega), kasutades otsekutset kohalikule töötlejale.

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 netqmail, mis sisaldub Debiani hoidlates. Selle paketi jaoks on ette valmistatud paikade komplekt, mis kõrvaldab nii vanad haavatavused aastast 2005 (lisades alloc() funktsioonikoodile kõvamälu piirangud) kui ka uued probleemid qmail-verify'is. Eraldi ette valmistatud qmail-verify plaastri uuendatud versioon. Arendajad oksad notqmail valmistasid ette oma paigad vanade probleemide blokeerimiseks ja asusid ka töötama selle nimel, et kõrvaldada kõik võimalikud täisarvude ületäitmised koodis.

Allikas: opennet.ru

Lisa kommentaar