Layo nga mapahimuslan nga kahuyangan sa qmail mail server

Mga tigdukiduki sa seguridad gikan sa Qualys nagpakita oportunidad pagpahimulos mga kahuyangan sa qmail mail server, bantog balik sa 2005 (CVE-2005-1513), apan nagpabilin nga wala ma-patched tungod kay ang tagsulat sa qmail nangatarungan nga dili realistiko ang paghimo sa usa ka nagtrabaho nga pagpahimulos nga magamit sa pag-atake sa mga sistema sa default configuration. Ang Qualys nakahimo sa pag-andam sa usa ka pagpahimulos nga nagsalikway niini nga pangagpas ug nagtugot sa usa nga magsugod sa remote code execution sa server pinaagi sa pagpadala sa usa ka espesyal nga gidisenyo nga mensahe.

Ang problema tungod sa usa ka integer overflow sa stralloc_readyplus() function, nga mahimong mahitabo sa diha nga pagproseso sa usa ka dako kaayo nga mensahe. Ang operasyon nanginahanglan usa ka 64-bit nga sistema nga adunay labaw pa sa 4GB nga virtual memory. Sa diha nga ang kahuyangan orihinal nga gi-analisa sa 2005, si Daniel J. Bernstein nangatarungan nga ang pangagpas sa code nga ang gidak-on sa gigahin nga array kanunay sulod sa 32-bit nga bili gibase sa kamatuoran nga walay usa nga naghatag og gigabytes sa memorya sa matag proseso. Sulod sa milabay nga 15 ka tuig, ang 64-bit nga mga sistema sa mga server mipuli sa 32-bit nga mga sistema, ug ang gidaghanon sa gihatag nga memorya ug network bandwidth miuswag pag-ayo.

Gikuha sa mga tagdumala sa qmail package ang nota ni Bernstein ug gilimitahan ang magamit nga memorya sa pagsugod sa proseso sa qmail-smtpd (pananglitan, sa Debian 10 ang limitasyon gitakda sa 7MB). Apan ang mga inhenyero gikan sa Qualys nakit-an nga kini dili igo ug, dugang sa qmail-smtpd, usa ka hilit nga pag-atake ang mahimo sa proseso sa qmail-lokal, nga nagpabilin nga wala’y pugong sa tanan nga nasulayan nga mga pakete. Isip pamatuod, giandam ang usa ka prototype sa pagpahimulos nga angay alang sa pag-atake sa pakete sa Debian nga adunay qmail sa default nga pagsumpo.
Aron maorganisar ang remote code execution sa panahon sa usa ka pag-atake, ang server nagkinahanglan og 4GB nga libre nga disk space ug 8GB sa RAM.
Gitugotan ka sa pagpahimulos sa pagpadagan sa bisan unsang mga shell command nga adunay mga katungod sa bisan kinsa nga tiggamit sa sistema, gawas sa mga tiggamit sa gamut ug sistema nga wala’y kaugalingon nga subdirectory sa direktoryo nga "/home" (ang qmail-local nga proseso gilunsad uban ang mga katungod sa lokal nga tiggamit nga gihatud ang pagpadala).

Ang pag-atake gihimo
pinaagi sa pagpadala sa usa ka dako kaayo nga mensahe sa mail, lakip ang daghang linya sa header, nga gisukod ang gibana-bana nga 4GB ug 576MB. Ang pagproseso sa ingon nga string sa qmail-local moresulta sa usa ka integer overflow sa dihang mosulay sa paghatud sa usa ka mensahe ngadto sa lokal nga tiggamit. Ang usa ka integer overflow unya mosangpot sa usa ka buffer overflow kung magkopya sa datos ug ang posibilidad sa pag-overwrit sa mga pahina sa memorya gamit ang libc code. Pinaagi sa pagmaniobra sa layout sa gipasa nga datos, posible usab nga isulat pag-usab ang adres sa “open()” function, ilisan kini sa address sa “system()” function.

Sunod, sa proseso sa pagtawag sa qmesearch() sa qmail-local, ang file nga ".qmail-extension" giablihan pinaagi sa open() function, nga mosangpot sa aktuwal nga pagpatuman sa function.
sistema(".qmail-extension"). Apan tungod kay ang "extension" nga bahin sa file namugna base sa adres sa nakadawat (pananglitan, "localuser-extension@localdomain"), ang mga tig-atake mahimong maghan-ay nga ipadala ang command pinaagi sa pagtino sa user nga "localuser-; command ;@localdomain" isip tigdawat sa mensahe.

Atol sa pag-analisa sa code, duha ka mga kahuyangan ang giila usab sa dugang nga qmail-verify patch, nga kabahin sa package alang sa Debian. Unang kahuyang (CVE-2020-3811) nagtugot kanimo sa paglaktaw sa pag-verify sa email address, ug ang ikaduha (CVE-2020-3812) motultol sa pagtulo sa lokal nga impormasyon. Sa partikular, ang una nga kahuyangan nagtugot kanimo sa pag-bypass sa pag-verify sa pagkahusto sa adres nga gigamit sa pagpahimulos sa pagpadala sa usa ka sugo (ang pag-verify dili molihok alang sa mga adres nga walay domain, sama sa "localuser-;command;"). Ang ikaduha nga pagkahuyang mahimong gamiton aron masusi ang presensya sa mga file ug mga direktoryo sa sistema, lakip ang mga ma-access lamang sa gamut (qmail-verify nagdagan nga adunay mga katungod sa gamut), pinaagi sa usa ka direkta nga tawag sa lokal nga handler.

Aron masulbad ang problema, girekomenda ni Bernstein ang pagpadagan sa mga proseso sa qmail nga adunay kinatibuk-ang limitasyon sa magamit nga memorya ("softlimit -m12345678"), diin ang problema gibabagan. Isip alternatibong paagi sa pagpanalipod, ang paglimita sa kinatas-ang gidak-on sa giprosesong mensahe pinaagi sa “control/databytes” nga file gihisgotan usab (sa default wala kini gimugna uban sa default settings qmail nagpabiling huyang). Dugang pa, ang "kontrol/databytes" dili manalipod batok sa lokal nga mga pag-atake gikan sa mga tiggamit sa sistema, tungod kay ang limitasyon gikonsiderar lamang sa qmail-smtpd.

Ang problema makaapekto sa package netqmail, gilakip sa mga repositoryo sa Debian. Usa ka hugpong sa mga patch ang giandam alang niini nga pakete, nga nagwagtang sa duha ka daan nga mga kahuyangan gikan sa 2005 (pinaagi sa pagdugang sa lisud nga memory limit sa alloc() function code) ug bag-ong mga problema sa qmail-verify. Gilain giandam updated nga bersyon sa qmail-verify patch. Mga developer mga sanga diliqmail nag-andam sa ilang kaugalingon nga mga patch aron babagan ang daan nga mga problema, ug nagsugod usab sa pagtrabaho aron mapapas ang tanan nga posible nga pag-awas sa integer sa code.

Source: opennet.ru

Idugang sa usa ka comment