Kritisk sårbarhet i Exim som gör att kod kan exekveras på servern med root-privilegier

I Exim e-postserver identifieras kritisk sårbarhet (CVE-2019-10149), vilket kan leda till fjärrkörning av kod på servern med roträttigheter vid bearbetning av en specialgjord begäran. Möjligheten att utnyttja problemet noterades i versioner från 4.87 till och med 4.91 eller när man byggde med alternativet EXPERIMENTAL_EVENT.

I standardkonfigurationen kan attacken utföras utan onödiga komplikationer av en lokal användare, eftersom "verify = recipient" ACL används, som utför ytterligare kontroller för externa adresser. En fjärrattack kan inträffa när inställningar ändras, som att fungera som en sekundär MX för en annan domän, ta bort "verify=recipient" ACL eller vissa ändringar av local_part_suffix). En fjärrattack är också möjlig om angriparen kan hålla anslutningen till servern öppen i 7 dagar (till exempel skicka en byte per minut för att kringgå en timeout). Samtidigt är det möjligt att det finns enklare attackvektorer för fjärrexploatering av problemet.

Sårbarheten orsakas av felaktig verifiering av mottagarens adress i funktionen deliver_message() som definieras i filen /src/deliver.c. Genom att manipulera adressformateringen kan en angripare ersätta sin data med argumenten för ett kommando som anropas genom funktionen execv() med root-rättigheter. Drift kräver inte användning av komplexa tekniker som används för buffertspill eller minneskorruption; enkel teckenersättning är tillräcklig.

Problemet är relaterat till användningen av konstruktionen för adresskonvertering:

leverans_lokaldel = expand_string(
string_sprintf("${local_part:%s}", ny->adress));
leverera_domän = expand_string(
string_sprintf("${domän:%s}", ny->adress));

Expand_string()-funktionen är en överkomplicerad combiner, inklusive att känna igen kommandot "${run{command arguments}", vilket leder till lanseringen av en extern hanterare. För att attackera inom en SMTP-session behöver alltså en lokal användare bara skicka ett kommando som 'RCPT TO "username+${run{...}}@localhost"', där localhost är en av värdarna från listan local_domains, och användarnamn är namnet på en befintlig lokal användare.

Om servern fungerar som ett e-postrelä räcker det med att fjärrsända kommandot 'RCPT TO "${run{...}}@relaydomain.com"', där relaydomain.com är en av värdarna som listas i relay_to_domains inställningssektionen. Eftersom Exim inte förvalt släpper privilegieläge (deliver_drop_privilege = false), kommer kommandon som skickas via "${run{...}}" att köras som root.

Det är anmärkningsvärt att sårbarheten var utslagen i versionen 4.92 som släpptes i februari, utan att betona att korrigeringen kan leda till säkerhetsproblem. Det finns ingen anledning att tro att Exim-utvecklarna medvetet döljer sårbarheten, eftersom problemet åtgärdades under korrigeringar fel som uppstår när felaktiga adresser överförs, och sårbarheten identifierades av Qualys under en granskning av ändringar i Exim.

En fix för tidigare versioner som fortsätter att användas i distributioner är för närvarande endast tillgänglig som lappa. Korrigerande releaser för tidigare filialer för att åtgärda problemet är planerade till den 11 juni. Paketuppdateringar är klara för Debian, ubuntu, openSUSE. Arch Linux и fedora De levererar version 4.92, där problemet inte uppstår. RHEL och CentOS problem inte mottaglig, eftersom Exim inte ingår i deras vanliga paketförråd.

Källa: opennet.ru

Lägg en kommentar