I Exim e-postserver
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
En fix för tidigare versioner som fortsätter att användas i distributioner är för närvarande endast tillgänglig som
Källa: opennet.ru