Kritieke kwetsbaarheid in Exim waardoor code kan worden uitgevoerd op de server met rootrechten

In Exim-mailserver geïdentificeerd kritisch kwetsbaarheid (CVE-2019-10149), wat kan leiden tot uitvoering van externe code op de server met rootrechten bij het verwerken van een speciaal vervaardigd verzoek. De mogelijkheid van misbruik van het probleem werd opgemerkt in versies van 4.87 tot en met 4.91 of bij het bouwen met de optie EXPERIMENTAL_EVENT.

In de standaardconfiguratie kan de aanval zonder onnodige complicaties door een lokale gebruiker worden uitgevoerd, aangezien de ACL "verify = receiver" wordt toegepast, die extra controles op externe adressen uitvoert. Een aanval op afstand kan plaatsvinden wanneer instellingen worden gewijzigd, zoals het optreden als secundaire MX voor een ander domein, het verwijderen van de "verify=recipient" ACL of bepaalde wijzigingen in local_part_suffix). Een aanval op afstand is ook mogelijk als de aanvaller de verbinding met de server 7 dagen open kan houden (bijvoorbeeld één byte per minuut versturen om een ​​time-out te omzeilen). Tegelijkertijd is het mogelijk dat er eenvoudiger aanvalsvectoren zijn om het probleem op afstand te exploiteren.

Het beveiligingslek wordt veroorzaakt door een onjuiste verificatie van het adres van de ontvanger in de functie deliver_message() die is gedefinieerd in het bestand /src/deliver.c. Door de adresopmaak te manipuleren, kan een aanvaller zijn gegevens vervangen door de argumenten van een commando dat wordt aangeroepen via de functie execv() met rootrechten. De bediening vereist niet het gebruik van complexe technieken die worden gebruikt voor bufferoverflows of geheugencorruptie; eenvoudige karaktervervanging is voldoende.

Het probleem houdt verband met het gebruik van de constructie voor adresconversie:

deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", nieuw->adres));
deliver_domain = expand_string(
string_sprintf("${domein:%s}", nieuw->adres));

De functie expand_string() is een te ingewikkelde combiner, inclusief het herkennen van het commando “${run{command arguments}”, wat leidt tot de lancering van een externe handler. Om binnen een SMTP-sessie aan te vallen hoeft een lokale gebruiker dus alleen maar een commando te sturen zoals 'RCPT TO “gebruikersnaam+${run{...}}@localhost”', waarbij localhost een van de hosts is uit de lijst local_domains, en gebruikersnaam is de naam van een bestaande lokale gebruiker.

Als de server als mail relay werkt, volstaat het om op afstand het commando 'RCPT TO "${run{...}}@relaydomain.com"' te sturen, waarbij relaydomain.com een ​​van de hosts is die vermeld staan ​​in relay_to_domains instellingen sectie. Omdat Exim de privilege-modus niet standaard laat vallen (deliver_drop_privilege = false), zullen commando's die via "${run{...}}" worden doorgegeven als root worden uitgevoerd.

Opvallend is dat er sprake was van een kwetsbaarheid geëlimineerd in de 4.92-release die in februari werd uitgebracht, zonder te benadrukken dat de oplossing tot beveiligingsproblemen zou kunnen leiden. Er is geen reden om aan te nemen dat de Exim-ontwikkelaars de kwetsbaarheid opzettelijk hebben verzwegen, aangezien het probleem is opgelost tijdens rectificatie fout die optreedt wanneer onjuiste adressen worden verzonden, en de kwetsbaarheid werd door Qualys geïdentificeerd tijdens een audit van wijzigingen in Exim.

Een oplossing voor eerdere versies die nog steeds in distributies worden gebruikt, is momenteel alleen beschikbaar als lapje. Corrigerende releases voor eerdere branches om het probleem op te lossen zijn gepland voor 11 juni. Pakketupdates zijn klaar voor Debian, Ubuntu, openSUSE. Arch Linux и Fedora Ze leveren versie 4.92, waarin het probleem niet voorkomt. RHEL- en CentOS-probleem niet vatbaar, aangezien Exim niet is opgenomen in hun reguliere pakketrepository.

Bron: opennet.ru

Voeg een reactie