Etähyödynnetty haavoittuvuus qmail-sähköpostipalvelimessa

Qualysin turvallisuustutkijat näytti tilaisuus hyväksikäyttö haavoittuvuuksia qmail-sähköpostipalvelimessa, kuuluisa jo vuonna 2005 (CVE-2005-1513), mutta se jäi korjaamatta, koska qmailin kirjoittaja väitti, että oli epärealistista luoda toimivaa hyväksikäyttöä, jota voitaisiin käyttää hyökkäämään järjestelmiin oletuskokoonpanossa. Qualys pystyi valmistelemaan hyväksikäytön, joka kumoaa tämän oletuksen ja sallii koodin etäsuorittamisen palvelimella lähettämällä erityisesti suunnitellun viestin.

Ongelman aiheuttaa kokonaislukujen ylivuoto stralloc_readyplus()-funktiossa, joka voi ilmetä erittäin suuren viestin käsittelyssä. Toiminta vaati 64-bittisen järjestelmän, jossa oli yli 4 Gt virtuaalimuistia. Kun haavoittuvuutta alun perin analysoitiin vuonna 2005, Daniel J. Bernstein väitti, että koodin oletus, jonka mukaan allokoidun taulukon koko on aina 32-bittisen arvon sisällä, perustuu siihen, että kukaan ei tarjoa gigatavua muistia jokaiselle prosessille. Viimeisten 15 vuoden aikana palvelimien 64-bittiset järjestelmät ovat korvanneet 32-bittiset järjestelmät, ja toimitetun muistin määrä ja verkon kaistanleveys ovat kasvaneet dramaattisesti.

Qmail-paketin ylläpitäjät ottivat Bernsteinin huomautuksen huomioon ja rajoittivat käytettävissä olevaa muistia käynnistäessään qmail-smtpd-prosessin (esimerkiksi Debian 10:ssä rajaksi on asetettu 7 Mt). Mutta Qualysin insinöörit havaitsivat, että tämä ei riitä, ja qmail-smtpd:n lisäksi voidaan suorittaa etähyökkäys qmail-local-prosessiin, joka pysyi rajoittamattomana kaikissa testatuissa paketeissa. Todisteena valmistettiin hyväksikäyttöprototyyppi, joka soveltui hyökkäämään Debian-pakettia vastaan ​​oletuskokoonpanon qmaililla.
Järjestääkseen koodin etäsuorittamisen hyökkäyksen aikana palvelin vaatii 4 Gt vapaata levytilaa ja 8 Gt RAM-muistia.
Hyödynnyksen avulla voit suorittaa mitä tahansa komentotulkkikomentoja minkä tahansa järjestelmän käyttäjän oikeuksilla, paitsi juuri- ja järjestelmän käyttäjillä, joilla ei ole omaa alihakemistoa “/home”-hakemistossa (qmail-local-prosessi käynnistetään oikeuksilla paikallisen käyttäjän, jolle toimitus suoritetaan).

Hyökkäys toteutetaan
lähettämällä erittäin suuren sähköpostiviestin, joka sisältää useita otsikkorivejä ja jonka koko on noin 4 Gt ja 576 Mt. Tällaisen merkkijonon käsittely qmail-localissa johtaa kokonaislukujen ylivuotoon, kun viestiä yritetään toimittaa paikalliselle käyttäjälle. Kokonaisluvun ylivuoto johtaa sitten puskurin ylivuotoon dataa kopioitaessa ja mahdollisuuteen korvata muistisivut libc-koodilla. Manipuloimalla lähetettyjen tietojen asettelua on myös mahdollista kirjoittaa uudelleen “open()”-funktion osoite korvaamalla se “system()”-funktion osoitteella.

Seuraavaksi kutsuttaessa qmesearch() qmail-localissa tiedosto “.qmail-extension” avataan open()-funktion kautta, mikä johtaa funktion varsinaiseen suorittamiseen.
system(".qmail-extension"). Mutta koska tiedoston "laajennus"-osa luodaan vastaanottajan osoitteen perusteella (esimerkiksi "localuser-extension@localdomain"), hyökkääjät voivat järjestää komennon lähetettäväksi määrittämällä käyttäjän "localuser-;command". ;@localdomain” viestin vastaanottajaksi.

Koodianalyysin aikana havaittiin myös kaksi haavoittuvuutta lisäkorjauksessa qmail-verify, joka on osa Debian-pakettia. Ensimmäinen haavoittuvuus (CVE-2020-3811) antaa sinun ohittaa sähköpostiosoitteen vahvistuksen, ja toinen (CVE-2020-3812) johtaa paikallisen tiedon vuotamiseen. Erityisesti ensimmäinen haavoittuvuus antaa sinun ohittaa hyväksikäytössä käytetyn osoitteen oikeellisuuden tarkistuksen komennon lähettämiseksi (varmennus ei toimi osoitteissa, joissa ei ole verkkotunnusta, kuten "localuser-;command;"). Toisen haavoittuvuuden avulla voidaan tarkistaa tiedostojen ja hakemistojen olemassaolo järjestelmässä, mukaan lukien ne, jotka ovat vain pääkäyttäjän käytettävissä (qmail-verify suorittaa pääkäyttäjän oikeuksilla), kutsumalla suoraan paikalliseen käsittelijään.

Ongelman kiertämiseksi Bernstein suositteli qmail-prosessien suorittamista käytettävissä olevan muistin kokonaisrajoituksella ("softlimit -m12345678"), jolloin ongelma estetään. Vaihtoehtoisena suojausmenetelmänä mainitaan myös käsitellyn viestin enimmäiskoon rajoittaminen "control/databytes"-tiedoston kautta (oletusarvoisesti sitä ei luoda oletusasetuksella qmail pysyy haavoittuvana). Lisäksi "control/databytes" ei suojaa järjestelmän käyttäjien paikallisilta hyökkäyksiltä, ​​koska vain qmail-smtpd ottaa huomioon rajan.

Ongelma vaikuttaa pakkaukseen netqmail, joka sisältyy Debianin arkistoihin. Tälle paketille on valmistettu joukko korjaustiedostoja, jotka poistavat sekä vanhat haavoittuvuudet vuodesta 2005 (lisäämällä kovamuistirajoituksia alloc()-funktiokoodiin) että uudet ongelmat qmail-verifyssa. Erikseen valmis qmail-verify -korjauksen päivitetty versio. Kehittäjät oksat notqmail valmistivat omat korjaustiedostonsa vanhojen ongelmien estämiseksi ja aloittivat myös työskentelyn poistaakseen kaikki mahdolliset kokonaislukujen ylivuodot koodista.

Lähde: opennet.ru

Lisää kommentti