Im Exim-Mailserver
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
Ein Fix für frühere Versionen, die weiterhin in Distributionen verwendet werden, ist derzeit nur als verfügbar
Source: opennet.ru