Fjärrutnyttjande sårbarhet i qmail-e-postservern

Säkerhetsforskare från Qualys visade möjlighet utnyttjande sårbarheter i qmail-e-postservern, känd tillbaka 2005 (CVE-2005-1513), men förblev oparpad eftersom författaren till qmail hävdade att det var orealistiskt att skapa en fungerande exploatering som kunde användas för att attackera system i standardkonfigurationen. Qualys kunde förbereda en exploatering som motbevisar detta antagande och låter en initiera fjärrkörning av kod på servern genom att skicka ett speciellt utformat meddelande.

Problemet orsakas av ett heltalsspill i funktionen stralloc_readyplus() som kan uppstå när ett mycket stort meddelande behandlas. Driften krävde ett 64-bitarssystem med mer än 4 GB virtuellt minne. När sårbarheten ursprungligen analyserades 2005, hävdade Daniel J. Bernstein att antagandet i koden att storleken på den allokerade arrayen alltid är inom 32-bitars värde är baserat på det faktum att ingen tillhandahåller gigabyte minne till varje process. Under de senaste 15 åren har 64-bitarssystem på servrar ersatt 32-bitarssystem, och mängden tillfört minne och nätverksbandbredd har ökat dramatiskt.

Underhållarna av qmail-paketet tog hänsyn till Bernsteins anteckning och begränsade det tillgängliga minnet när qmail-smtpd-processen startade (till exempel i Debian 10 är gränsen satt till 7MB). Men ingenjörer från Qualys fann att detta inte räcker och, förutom qmail-smtpd, kan en fjärrattack utföras på qmail-local-processen, som förblev obegränsad i alla testade paket. Som bevis förbereddes en exploateringsprototyp som var lämplig för att attackera Debianpaketet med qmail i standardkonfigurationen.
För att organisera fjärrkörning av kod under en attack kräver servern 4 GB ledigt diskutrymme och 8 GB RAM.
Exploateringen låter dig köra alla skalkommandon med rättigheterna för alla användare i systemet, förutom för rot- och systemanvändare som inte har sin egen underkatalog i katalogen "/home" (qmail-local-processen startas med rättigheterna av den lokala användare till vilken leveransen utförs).

Attacken genomförs
genom att skicka ett mycket stort e-postmeddelande, inklusive flera rubrikrader, som mäter cirka 4 GB och 576 MB. Att bearbeta en sådan sträng i qmail-local resulterar i ett heltalsspill när man försöker leverera ett meddelande till den lokala användaren. Ett heltalsspill leder sedan till ett buffertspill vid kopiering av data och möjligheten att skriva över minnessidor med libc-kod. Genom att manipulera layouten för den överförda datan är det också möjligt att skriva om adressen för funktionen "open()" och ersätta den med adressen till funktionen "system()".

Därefter, i processen att anropa qmesearch() i qmail-local, öppnas filen ".qmail-extension" genom funktionen open() vilket leder till den faktiska exekveringen av funktionen
system(".qmail-extension"). Men eftersom "tilläggsdelen" av filen genereras baserat på mottagarens adress (till exempel "localuser-extension@localdomain"), kan angripare ordna så att kommandot skickas för att köras genom att ange användaren "localuser-;kommando" ;@localdomain" som mottagare av meddelandet.

Under kodanalysen identifierades också två sårbarheter i den ytterligare qmail-verify patchen, som är en del av paketet för Debian. Första sårbarheten (CVE-2020-3811) låter dig kringgå verifiering av e-postadress, och den andra (CVE-2020-3812) leder till läckage av lokal information. I synnerhet låter den första sårbarheten dig kringgå verifieringen av riktigheten av adressen som används i exploateringen för att skicka ett kommando (verifieringen fungerar inte för adresser utan en domän, till exempel "localuser-;command;"). Den andra sårbarheten kan användas för att kontrollera närvaron av filer och kataloger på systemet, inklusive de som endast är tillgängliga för root (qmail-verify körs med root-rättigheter), genom ett direktanrop till den lokala hanteraren.

För att komma runt problemet rekommenderade Bernstein att köra qmail-processer med en total gräns för tillgängligt minne ("softlimit -m12345678"), i vilket fall problemet blockeras. Som en alternativ skyddsmetod nämns också begränsning av den maximala storleken på det bearbetade meddelandet genom filen "control/databytes" (som standard skapas den inte med standardinställningarna qmail förblir sårbart). Dessutom skyddar inte "control/databytes" mot lokala attacker från systemanvändare, eftersom gränsen endast tas med i beräkningen av qmail-smtpd.

Problemet påverkar paketet netqmail, inkluderad i Debians arkiv. En uppsättning patchar har förberetts för detta paket, som eliminerar både gamla sårbarheter från 2005 (genom att lägga till hårdminnesgränser till alloc() funktionskoden) och nya problem i qmail-verify. Separat beredd uppdaterad version av qmail-verify patchen. Utvecklare grenar notqmail förberedde sina egna patchar för att blockera gamla problem, och började även arbeta för att eliminera alla möjliga heltalsspill i koden.

Källa: opennet.ru

Lägg en kommentar