Auf dem Mailserver Exim kritische (), die zu einer Remote-Codeausführung auf dem Server mit Root-Rechten beim Verarbeiten einer speziell gestalteten Anfrage führen kann. Die Möglichkeit zur Ausnutzung des Problems wurde in den Versionen von 4.87 bis 4.91 einschließlich oder bei einer Sammlung mit der Option EXPERIMENTAL_EVENT festgestellt.
In der Standardkonfiguration kann der Angriff ohne größere Komplikationen von einem lokalen Benutzer durchgeführt werden, da die ACL „verify = recipient“ angewendet wird, die zusätzliche Überprüfungen für externe Adressen durchführt. Ein Remote-Angriff ist möglich, wenn die Einstellungen geändert werden, zum Beispiel beim Betrieb als sekundärer MX für eine andere Domain, der Löschung der ACL „verify = recipient“ oder bestimmten Änderungen im local_part_suffix. Ein Remote-Angriff ist auch möglich, wenn der Angreifer die Verbindung mit dem Server 7 Tage lang offen halten kann (zum Beispiel, indem er ein Byte pro Minute sendet, um einen Timeout zu umgehen). Dabei ist nicht auszuschließen, dass es auch einfachere Angriffsvektoren zur Remote-Ausnutzung des Problems gibt.
Die Schwachstelle wird durch eine unzureichende Überprüfung der Empfängeradresse in der Funktion deliver_message(), definiert in der Datei /src/deliver.c, verursacht. Durch Manipulation der Adressformatierung kann der Angreifer erreichen, dass seine Daten in die Argumente des über die Funktion execv() mit Root-Rechten aufgerufenen Befehls eingefügt werden. Es sind keine komplexen Techniken erforderlich, die bei Pufferüberläufen oder Speicherbeschädigungen verwendet werden; es genügt, einfach Zeichen einzufügen.
Das Problem hängt mit der Verwendung der Konstruktion zur Adressumwandlung 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 überfrachteter Kombinator, der unter anderem den Befehl "${run{Befehl Argumente}" erkennt, was zur Ausführung eines externen Verarbeiters führt. Somit genügt es für einen Angriff im Rahmen einer SMTP-Sitzung, dass ein lokaler Benutzer einen Befehl der Form ‚RCPT TO "username+${run{…}}@localhost"‘ übergibt, wobei localhost einer der Hosts aus der Liste der local_domains ist, und username der Name eines vorhandenen lokalen Benutzers ist.
Wenn der Server als E-Mail-Relay fungiert, genügt es, den Befehl ‚RCPT TO "${run{…}}@relaydomain.com"‘ zu senden, wobei relaydomain.com einer der in den Einstellungen für relay_to_domains aufgeführten Hosts ist. Da im Exim standardmäßig der Modus zum Abgabe von Privilegien (deliver_drop_privilege = false) nicht angewendet wird, werden die über „${run{…}}“ übergebenen Befehle mit Root-Rechten ausgeführt.
Bemerkenswert ist, dass die Schwachstelle in der im Februar veröffentlichten Version 4.92 ohne Hinweis darauf, dass die Behebung zu Sicherheitsproblemen führen könnte, entdeckt wurde. Es gibt keine Anhaltspunkte dafür, dass die Entwickler von Exim absichtlich die Schwachstelle verborgen haben, da das Problem im Zuge der Fehlers, der beim Senden ungültiger Adressen auftritt, behoben wurde, und die Schwachstelle wurde von der Firma Qualys während einer Prüfung der Änderungen in Exim entdeckt.
Ein Patch für frühere Versionen, die weiterhin in den Distributionen verwendet werden, ist bisher nur in Form von . Korrekturversionen für frühere Zweige mit der Behebung des Problems sind für den 11. Juni geplant. Paket-Updates wurden vorbereitet für , , . und bieten die Version 4.92 an, in der das Problem nicht auftritt. RHEL und CentOS sind betroffen, da Exim nicht in deren regulärem Paketrepository enthalten ist.
Quelle: opennet.ru
