Kritisk sårbarhed i Exim, der gør det muligt at udføre kode på serveren med root-rettigheder

I Exim mailserver identificeret kritisk sårbarhed (CVE-2019-10149), hvilket kan føre til fjernudførelse af kode på serveren med root-rettigheder ved behandling af en specielt udformet anmodning. Muligheden for udnyttelse af problemet blev noteret i versioner fra 4.87 til og med 4.91 eller ved bygning med EXPERIMENTAL_EVENT-indstillingen.

I standardkonfigurationen kan angrebet udføres uden unødvendige komplikationer af en lokal bruger, da "verify = recipient" ACL anvendes, som udfører yderligere kontroller for eksterne adresser. Et fjernangreb kan forekomme, når indstillinger ændres, såsom at fungere som en sekundær MX for et andet domæne, fjerne "verify=recipient" ACL'en eller visse ændringer af local_part_suffix). Et fjernangreb er også muligt, hvis angriberen er i stand til at holde forbindelsen til serveren åben i 7 dage (for eksempel ved at sende en byte i minuttet for at omgå en timeout). Samtidig er det muligt, at der findes enklere angrebsvektorer til fjernudnyttelse af problemet.

Sårbarheden er forårsaget af forkert bekræftelse af modtagerens adresse i funktionen deliver_message() defineret i filen /src/deliver.c. Ved at manipulere adresseformateringen kan en angriber opnå substitution af sine data i argumenterne for en kommando kaldet gennem funktionen execv() med root-rettigheder. Betjening kræver ikke brug af komplekse teknikker, der bruges til bufferoverløb eller hukommelseskorruption; simpel tegnsubstitution er tilstrækkelig.

Problemet er relateret til brugen af ​​konstruktionen til adressekonvertering:

levering_lokalpart = expand_string(
string_sprintf("${local_part:%s}", ny->adresse));
levere_domæne = expand_string(
string_sprintf("${domæne:%s}", ny->adresse));

Expand_string()-funktionen er en overkompliceret combiner, herunder genkendelse af kommandoen "${run{command arguments}", som fører til lanceringen af ​​en ekstern handler. For at angribe inden for en SMTP-session behøver en lokal bruger kun at sende en kommando som 'RCPT TO "brugernavn+${run{...}}@localhost"', hvor localhost er en af ​​værterne fra listen local_domains, og brugernavn er navnet på en eksisterende lokal bruger.

Hvis serveren fungerer som et mail-relæ, er det nok at fjernsende kommandoen 'RCPT TO "${run{...}}@relaydomain.com"', hvor relaydomain.com er en af ​​de værter, der er angivet i relay_to_domains afsnittet om indstillinger. Da Exim ikke som standard dropper privilegietilstand (deliver_drop_privilege = false), vil kommandoer, der sendes via "${run{...}}" blive udført som root.

Det er bemærkelsesværdigt, at sårbarheden var elimineret i 4.92-udgivelsen, der blev udgivet i februar, uden at understrege, at rettelsen kan føre til sikkerhedsproblemer. Der er ingen grund til at tro, at der var en bevidst fortielse af sårbarheden af ​​Exim-udviklerne, da problemet blev løst under rettelser fejl, der opstår, når forkerte adresser transmitteres, og sårbarheden blev identificeret af Qualys under en revision af ændringer i Exim.

En rettelse til tidligere versioner, der fortsat bruges i distributioner, er i øjeblikket kun tilgængelig som lappe. Korrigerende udgivelser for tidligere filialer for at løse problemet er planlagt til den 11. juni. Pakkeopdateringer er klar til Debian, Ubuntu, openSUSE. Arch Linux и Fedora De leverer version 4.92, hvor problemet ikke opstår. RHEL og CentOS problem ikke modtagelige, da Exim ikke er inkluderet i deres almindelige pakkelager.

Kilde: opennet.ru

Tilføj en kommentar