Qualysin turvallisuustutkijat
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 (
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
Lähde: opennet.ru