Kritieke kwetsbaarheid in Exim, die het mogelijk maakt om code uit te voeren op de server met rootrechten

In de mailserver Exim gedetecteerd kritiek kwetsbaarheid (CVE-2019-10149), wat kan leiden tot remote code execution op de server met rootrechten bij het verwerken van een speciaal opgemaakt verzoek. De mogelijkheid tot exploitatie van het probleem is vastgesteld in versies van 4.87 tot en met 4.91 of bij een build met de optie EXPERIMENTAL_EVENT.

In de standaardconfiguratie kan de aanval eenvoudig worden uitgevoerd door een lokale gebruiker, aangezien de ACL 'verify = recipient' extra controles uitvoert voor externe adressen. Het uitvoeren van een remote aanval is mogelijk door de instellingen te wijzigen, bijvoorbeeld bij het functioneren als secundaire MX voor een ander domein, het verwijderen van de ACL 'verify = recipient' of bepaalde wijzigingen in local_part_suffix). Een remote aanval is ook mogelijk als een aanvaller in staat is om de verbinding met de server gedurende 7 dagen open te houden (bijvoorbeeld door één byte per minuut te verzenden om tijdouts te omzeilen). Het is ook mogelijk dat er eenvoudigere aanvalsvectoren voor remote exploitatie van het probleem bestaan.

De kwetsbaarheid wordt veroorzaakt door een onjuiste controle van het ontvangersadres in de functie deliver_message(), gedefinieerd in het bestand /src/deliver.c. Door te manipuleren met de opmaak van het adres kan de aanvaller zijn gegevens invoegen in de argumenten van de opdracht die via de functie execv() met rootrechten wordt aangeroepen. Voor exploitatie zijn geen geavanceerde technieken nodig die gebruikt worden bij buffer overflows of geheugenbeschadiging, het is voldoende om gewoon tekens in te voegen.

Het probleem is gerelateerd aan het gebruik van de constructie voor het omzetten van adressen:

deliver_localpart = expand_string(
string_sprintf('${local_part:%s}', new->address));
deliver_domain = expand_string(
string_sprintf('${domain:%s}', new->address));

De functie expand_string() is een over-gecompliceerde combinator, die ook de opdracht '${run{opdracht argumenten}' herkent, wat leidt tot de uitvoering van een externe handler. Zodoende is het voor een lokale gebruiker in de loop van een SMTP-sessie voldoende om een opdracht als ‘RCPT TO "username+${run{…}}@localhost"’ door te geven, waarbij localhost een van de hosts is in de lijst van local_domains, en username de naam is van een bestaand lokaal gebruiker.

Als de server als mailrelay fungeert, is het voldoende om het commando 'RCPT TO «${run{…}}@relaydomain.com»' op afstand te verzenden, waarbij relaydomain.com een van de hosts is die in de sectie relay_to_domains is vermeld. Aangezien in exim standaard de privilege drop-modus niet wordt toegepast (deliver_drop_privilege = false), worden de via «${run{…}}» verzonden commando's uitgevoerd met root-rechten.

Opmerkelijk is dat de kwetsbaarheid was opgelost in de release van februari 4.92 zonder de aandacht te vestigen op de mogelijkheid dat de oplossing kan leiden tot beveiligingsproblemen. Er zijn geen aanwijzingen dat er opzettelijk sprake was van het verbergen van de kwetsbaarheid door de ontwikkelaars van Exim, aangezien het probleem werd opgelost tijdens correctie een storing die optreedt bij het verzenden van onjuiste adressen, en de kwetsbaarheid werd ontdekt door Qualys tijdens een audit van de wijzigingen in Exim.

De oplossing voor eerdere versies, die nog steeds in distributies worden gebruikt, is voorlopig alleen beschikbaar als patch. Correctieve releases voor eerdere takken om het probleem op te lossen zijn gepland voor 11 juni. Pakketupdates zijn voorbereid voor Debian, Ubuntu, openSUSE. Arch Linux en Fedora leveren versie 4.92, waarin het probleem zich niet voordoet. RHEL en CentOS hebben geen probleem, zijn niet kwetsbaaromdat Exim niet in hun standaardpakketrepository is opgenomen.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster