Kritische Sicherheitslücke in Exim, die die Ausführung von Code auf dem Server mit Root-Rechten ermöglicht

Im Exim-Mailserver identifiziert kritisch Verwundbarkeit (CVE-2019-10149), was bei der Verarbeitung einer speziell gestalteten Anfrage zur Remotecodeausführung auf dem Server mit Root-Rechten führen kann. Die Möglichkeit einer Ausnutzung des Problems wurde in den Versionen 4.87 bis einschließlich 4.91 oder beim Erstellen mit der Option EXPERIMENTAL_EVENT festgestellt.

In der Standardkonfiguration kann der Angriff ohne unnötige Komplikationen durch einen lokalen Benutzer durchgeführt werden, da die ACL „verify=recipient“ zum Einsatz kommt, die zusätzliche Prüfungen für externe Adressen durchführt. Ein Remote-Angriff kann auftreten, wenn Einstellungen geändert werden, z. B. als sekundärer MX für eine andere Domäne fungieren, die ACL „verify=recipient“ entfernen oder bestimmte Änderungen an „local_part_suffix“ vornehmen. Ein Remote-Angriff ist auch möglich, wenn es dem Angreifer gelingt, die Verbindung zum Server 7 Tage lang offen zu halten (z. B. durch Senden eines Bytes pro Minute, um einen Timeout zu umgehen). Gleichzeitig ist es möglich, dass es einfachere Angriffsvektoren gibt, um das Problem aus der Ferne auszunutzen.

Die Sicherheitslücke wird durch eine falsche Überprüfung der Empfängeradresse in der in der Datei /src/deliver.c definierten Funktion Deliver_message() verursacht. Durch Manipulation der Adressformatierung kann ein Angreifer erreichen, dass seine Daten in die Argumente eines Befehls ersetzt werden, der über die Funktion execv() mit Root-Rechten aufgerufen wird. Für den Betrieb sind keine komplexen Techniken erforderlich, die bei Pufferüberläufen oder Speicherbeschädigungen zum Einsatz kommen; eine einfache Zeichenersetzung reicht aus.

Das Problem hängt mit der Verwendung des Konstrukts zur Adresskonvertierung zusammen:

Deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
Deliver_domain = expand_string(
string_sprintf("${domain:%s}", new->address));

Die Funktion expand_string() ist ein überkomplizierter Combiner, einschließlich der Erkennung des Befehls „${run{command arguments}“, der zum Start eines externen Handlers führt. Um innerhalb einer SMTP-Sitzung anzugreifen, muss ein lokaler Benutzer daher nur einen Befehl wie „RCPT TO „username+${run{...}}@localhost“ senden, wobei localhost einer der Hosts aus der Liste „local_domains“ ist. und Benutzername ist der Name eines vorhandenen lokalen Benutzers.

Wenn der Server als Mail-Relay arbeitet, reicht es aus, den Befehl „RCPT TO „${run{...}}@relaydomain.com“ aus der Ferne zu senden, wobei „relaydomain.com“ einer der in „relay_to_domains“ aufgeführten Hosts ist Abschnitt „Einstellungen“. Da Exim nicht standardmäßig den Drop-Privilege-Modus verwendet (deliver_drop_privilege = false), werden über „${run{...}}“ übergebene Befehle als Root ausgeführt.

Es ist bemerkenswert, dass die Sicherheitslücke bestand eliminiert in der im Februar veröffentlichten Version 4.92, ohne zu betonen, dass der Fix zu Sicherheitsproblemen führen könnte. Es gibt keinen Grund zu der Annahme, dass die Schwachstelle von den Exim-Entwicklern absichtlich verschwiegen wurde, da das Problem bereits behoben wurde Korrekturen Fehler, der auftritt, wenn falsche Adressen übertragen werden, und die Schwachstelle wurde von Qualys während einer Prüfung der Änderungen in Exim identifiziert.

Ein Fix für frühere Versionen, die weiterhin in Distributionen verwendet werden, ist derzeit nur als verfügbar Patch. Korrekturversionen für frühere Zweige zur Behebung des Problems sind für den 11. Juni geplant. Paketaktualisierungen sind bereit Debian, Ubuntu, openSUSE. Arch Linux и Fedora Sie liefern Version 4.92, in der das Problem nicht auftritt. RHEL- und CentOS-Problem nicht anfällig, da Exim nicht in ihrem regulären Paket-Repository enthalten ist.

Source: opennet.ru

Kommentar hinzufügen