Qualyseko segurtasun ikertzaileak
Arazoa stralloc_readyplus() funtzioan oso-osoko gainezkatze batek eragiten du, oso mezu handi bat prozesatzen denean gerta daitekeena. Funtzionamenduak 64 biteko sistema behar zuen, 4 GB baino gehiagoko memoria birtualarekin. Zaurgarritasuna jatorriz 2005ean aztertu zenean, Daniel J. Bernstein-ek argudiatu zuen kodean esleitutako arrayaren tamaina beti 32 biteko balioaren barruan dagoelako hipotesiak prozesu bakoitzari gigabyte-ko memoria ematen ez diola oinarrian. Azken 15 urteotan, zerbitzarietako 64 biteko sistemek 32 biteko sistemak ordezkatu dituzte, eta hornitutako memoria eta sareko banda-zabalera izugarri handitu dira.
qmail paketeen arduradunek Bernstein-en oharra hartu zuten kontuan eta qmail-smtpd prozesua abiaraztean eskuragarri dagoen memoria mugatu zuten (adibidez, Debian 10-n muga 7MB-n ezartzen da). Baina Qualys-eko ingeniariek hori nahikoa ez dela eta, qmail-smtpd-az gain, qmail-local prozesuan urruneko erasoa egin daiteke, probatutako pakete guztietan mugarik gabe geratu zena. Froga gisa, ustiapen-prototipo bat prestatu zen, konfigurazio lehenetsian Debian paketea qmail-ekin erasotzeko egokia zena.
Eraso batean urruneko kodearen exekuzioa antolatzeko, zerbitzariak 4 GB libreko diskoko espazioa eta 8 GB RAM behar ditu.
Explotazioak sistemako edozein erabiltzaileren eskubideekin shell komandoak exekutatzeko aukera ematen du, "/home" direktorioan beren azpidirektorio propiorik ez duten root eta sistemako erabiltzaileak izan ezik (qmail-local prozesua eskubideekin abiarazten da. entrega egiten zaion tokiko erabiltzailearen).
Erasoa egiten da
posta-mezu oso handi bat bidaliz, goiburuko hainbat lerro barne, 4GB eta 576MB gutxi gorabehera. Qmail-local-en halako kate bat prozesatzeak osoko gainezka egiten du erabiltzaile lokalari mezu bat bidaltzen saiatzean. Osoko gainezkatze batek buffer gainezkatzea dakar datuak kopiatzerakoan eta memoria-orriak libc kodearekin gainidazteko aukera. Igorritako datuen diseinua manipulatuz, βopen()β funtzioaren helbidea berridatzi ere egin daiteke, βsystem()β funtzioaren helbidearekin ordezkatuz.
Ondoren, qmesearch() qmail-local-en deitzeko prozesuan, ".qmail-extension" fitxategia irekitzen da open() funtzioaren bidez, eta horrek funtzioaren benetako exekuziora eramaten du.
system(".qmail-extension"). Baina fitxategiaren "luzapena" zatia hartzailearen helbidean oinarrituta sortzen denez (adibidez, "localuser-extension@localdomain"), erasotzaileek agindua bidaltzeko agindua exekutatzeko antolatu dezakete erabiltzailea "localuser-;command" zehaztuz. ;@localdomainβ mezuaren hartzaile gisa.
Kodearen azterketan, bi ahultasun ere identifikatu ziren Debian-erako paketearen parte den qmail-verify adabaki gehigarrian. Lehen ahultasuna (
Arazoari aurre egiteko, Bernsteinek gomendatu zuen qmail prozesuak abiarazteko memoria erabilgarriaren muga osoarekin ("softlimit -m12345678"), eta kasu horretan arazoa blokeatuta egongo da. Babes-metodo alternatibo gisa, prozesatutako mezuaren gehienezko tamaina "kontrol/databytes" fitxategiaren bidez mugatzea ere aipatzen da (lehenespenez ez da ezarpen lehenetsiekin sortzen qmail-ek zaurgarria izaten jarraitzen du). Gainera, "control/databytes"-ek ez du babesten sistemaren erabiltzaileen tokiko erasoetatik, muga qmail-smtpd-ek bakarrik hartzen baitu kontuan.
Arazoak paketeari eragiten dio
Iturria: opennet.ru