Watafiti wa usalama kutoka Qualys
Tatizo linasababishwa na kufurika kwa nambari kamili katika kazi ya stralloc_readyplus(), ambayo inaweza kutokea wakati wa kuchakata ujumbe mkubwa sana. Uendeshaji ulihitaji mfumo wa 64-bit wenye zaidi ya 4GB ya kumbukumbu pepe. Wakati uwezekano wa kuathiriwa ulipochambuliwa mwaka wa 2005, Daniel J. Bernstein alisema kuwa dhana katika msimbo kwamba ukubwa wa safu iliyotengwa daima iko ndani ya thamani ya 32-bit inategemea ukweli kwamba hakuna mtu hutoa gigabytes ya kumbukumbu kwa kila mchakato. Katika kipindi cha miaka 15 iliyopita, mifumo ya 64-bit kwenye seva imebadilisha mifumo ya 32-bit, na kiasi cha kumbukumbu iliyotolewa na bandwidth ya mtandao imeongezeka kwa kasi.
Watunza vifurushi vya qmail walizingatia dokezo la Bernstein na kupunguza kumbukumbu inayopatikana wakati wa kuanza mchakato wa qmail-smtpd (kwa mfano, Debian 10 inaweka kikomo cha 7MB). Lakini wahandisi kutoka Qualys waligundua kuwa hii haitoshi na, pamoja na qmail-smtpd, shambulio la mbali linaweza kufanywa kwenye mchakato wa qmail-ndani, ambao ulibaki bila vikwazo katika vifurushi vyote vilivyojaribiwa. Kama dhibitisho, mfano wa unyonyaji ulitayarishwa, unaofaa kwa kushambulia kifurushi cha Debian na qmail katika usanidi chaguo-msingi.
Ili kupanga utekelezaji wa msimbo wa mbali wakati wa shambulio, seva inahitaji 4GB ya nafasi ya bure ya diski na 8GB ya RAM.
Unyonyaji hukuruhusu kutekeleza amri zozote za ganda na haki za mtumiaji yeyote kwenye mfumo, isipokuwa kwa watumiaji wa mizizi na mfumo ambao hawana saraka yao ndogo kwenye saraka ya "/ nyumbani" (mchakato wa qmail-ndani unazinduliwa na haki. ya mtumiaji wa ndani ambaye utoaji unafanywa).
Shambulio hilo linatekelezwa
kupitia kutuma ujumbe mkubwa sana wa barua, ikijumuisha mistari kadhaa ya vichwa, yenye takriban 4GB na 576MB. Kuchakata mfuatano kama huo katika qmail-local husababisha kufurika kamili wakati wa kujaribu kuwasilisha ujumbe kwa mtumiaji wa karibu. Kujaza nambari kamili kisha husababisha kufurika kwa bafa wakati wa kunakili data na uwezekano wa kubatilisha kurasa za kumbukumbu kwa msimbo wa libc. Kwa kuendesha mpangilio wa data iliyopitishwa, inawezekana pia kuandika upya anwani ya kazi ya "kufungua ()", na kuibadilisha na anwani ya kazi ya "mfumo ()".
Ifuatayo, katika mchakato wa kupiga simu qmesearch() katika qmail-local, faili ".qmail-extension" inafunguliwa kupitia open() kazi, ambayo inaongoza kwa utekelezaji halisi wa kazi.
system(".qmail-extension"). Lakini kwa kuwa sehemu ya faili ya “kiendelezi” inatolewa kulingana na anwani ya mpokeaji (kwa mfano, “localuser-extension@localdomain”), wavamizi wanaweza kupanga ili amri itumike kwa kubainisha mtumiaji “localuser-;command. ;@localdomain” kama mpokeaji wa ujumbe.
Wakati wa uchanganuzi wa msimbo, udhaifu wawili pia ulitambuliwa katika kiraka cha ziada cha uthibitishaji wa qmail, ambacho ni sehemu ya kifurushi cha Debian. Udhaifu wa kwanza (
Ili kutatua tatizo, Bernstein alipendekeza kuendesha michakato ya qmail yenye kikomo cha jumla cha kumbukumbu inayopatikana ("softlimit -m12345678"), ambapo tatizo limezuiwa. Kama njia mbadala ya ulinzi, kuweka kikomo cha ukubwa wa juu zaidi wa ujumbe uliochakatwa kupitia faili ya "control/databytes" pia imetajwa (kwa chaguo-msingi haijaundwa kwa mipangilio chaguo-msingi, qmail inabaki kuwa hatarini). Kwa kuongeza, "control/databytes" hailindi dhidi ya mashambulizi ya ndani kutoka kwa watumiaji wa mfumo, kwani kikomo kinazingatiwa tu katika qmail-smtpd.
Tatizo huathiri mfuko
Chanzo: opennet.ru