I postserver Exim kritisk (), som kan føre til fjernudførelse af kode på serveren med root-rettigheder ved behandling af en specielt formateret anmodning. Muligheden for udnyttelse af problemet er bemærket i versioner fra 4.87 til 4.91 inklusive eller ved bygning med indstillingen EXPERIMENTAL_EVENT.
I standardkonfigurationen kan angrebet udføres uden yderligere kompliceringer af en lokal bruger, da der anvendes ACL 'verify = recipient', som udfører yderligere kontroller for eksterne adresser. Udførelse af et fjernangreb er muligt ved at ændre indstillingerne, for eksempel ved at arbejde som sekundær MX for et andet domæne, fjerne ACL 'verify = recipient' eller foretage bestemte ændringer i local_part_suffix). Et fjernangreb er også muligt, hvis en angriber kan holde forbindelsen til serveren åben i 7 dage (for eksempel ved at sende en byte per minut for at undgå timeout-afbrud). Der udelukkes ikke, at der kan eksistere enklere angrebsvektorer for den fjerne udnyttelse af problemet.
Sårbarheden skyldes en forkert kontrol af modtageradressen i funktionen deliver_message(), der er defineret i filen /src/deliver.c. Gennem manipulation af adresseformateringen kan angriberen opnå substitution af sine data i argumenterne for kommandoen, der kaldes gennem funktionen execv() med root-rettigheder. Der kræves ikke brug af komplekse teknikker, der anvendes ved bufferoverløb eller hukommelsesskader; det er tilstrækkeligt blot at erstatte tegn.
Problemet er relateret til anvendelsen af konstruktionen til adressering:
deliver_localpart = expand_string(
string_sprintf('${local_part:%s}', new->address));
deliver_domain = expand_string(
string_sprintf('${domain:%s}', new->address));
Funktionen expand_string() er en overkompliceret kombinerer, der også genkender kommandoen '${run{kommando argumenter}', som fører til kørsel af en ekstern behandler. Således er det for at udføre et angreb inden for SMTP-sessionen tilstrækkeligt for den lokale bruger at sende en kommando som 'RCPT TO "username+${run{…}}@localhost"', hvor localhost er et af værterne i listen over local_domains, og username er navnet på en eksisterende lokal bruger.
Hvis serveren fungerer som en mail-relæ, er det tilstrækkeligt at sende kommandoen 'RCPT TO "${run{…}}@relaydomain.com"', hvor relaydomain.com er en af de værter, der er angivet i sektionen relay_to_domains. Da der ikke anvendes privilegieresettilstand som standard i exim (deliver_drop_privilege = false), vil de kommandoer, der sendes via "${run{…}}", blive udført med root-rettigheder.
Det er bemærkelsesværdigt, at sårbarheden blev i udgivelsen 4.92 i februar uden at påpege, at rettelsen kunne medføre sikkerhedsproblemer. Der er ingen grund til at antage, at udviklerne af Exim bevidst skjulte sårbarheden, da problemet blev løst under af den fejl, der opstår ved overførsel af ugyldige adresser, og sårbarheden blev identificeret af Qualys under en revision af ændringerne i Exim.
Rettelsen til tidligere versioner, som stadig anvendes i distributioner, er kun tilgængelig i form af . Korrigerende udgivelser for tidligere grene med problemløsning er planlagt til den 11. juni. Opdateringer af pakker er forberedt til , , . og leverer version 4.92, hvor problemet ikke optræder. RHEL og CentOS er berørt, da Exim ikke er en del af deres standard pakke-arkiv.
Kilde: opennet.ru
