Im Exim-Mailserver kritisch (), die zu einer Fernsteuerung des Servers mit Root-Rechten führen kann, wenn eine speziell gestaltete Anfrage verarbeitet wird. Die Möglichkeit zur Ausnutzung des Problems wurde in den Versionen von 4.87 bis 4.91 einschließlich oder bei der Erstellung mit der EXPERIMENTAL_EVENT-Option festgestellt.
In der Standardkonfiguration kann der Angriff ohne unnötige Komplikationen von einem lokalen Benutzer durchgeführt werden, da ACL „verify = recipient“ verwendet wird, die zusätzliche Prüfungen für externe Adressen durchführt. Ein Fernangriff kann durch Änderung der Einstellungen möglich gemacht werden, beispielsweise bei der Verwendung als sekundärer MX für eine andere Domain, durch Entfernen von ACL „verify = recipient“ oder durch bestimmte Änderungen am local_part_suffix). Ein Fernangriff ist auch möglich, wenn ein Angreifer die Verbindung zum Server für 7 Tage offen halten kann (zum Beispiel, indem er mit einem Byte pro Minute sendet, um einen Timeout-Abbruch zu umgehen). Dabei ist nicht auszuschließen, dass es für die Fernausnutzung des Problems auch einfachere Angriffsszenarien gibt.
Die Schwachstelle wird durch eine fehlerhafte Überprüfung der Empfängeradresse in der Funktion deliver_message() verursacht, die in der Datei /src/deliver.c definiert ist. Durch Manipulation der Adressformatierung kann der Angreifer erreichen, dass seine Daten in die Argumente des Kommandos eingefügt werden, das über die Funktion execv() mit Root-Rechten aufgerufen wird. Für die Ausnutzung 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 Anwendung der Struktur zur Umwandlung von Adressen 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 Kombinator, der unter anderem den Befehl "${run{Befehl Argumente}" erkennt, was dazu führt, dass ein externer Handler gestartet wird. Daher reicht es für einen lokalen Benutzer innerhalb einer SMTP-Sitzung aus, einen Befehl wie ‘RCPT TO "username+${run{…}}@localhost"‘ zu übermitteln, wobei localhost einer der Hosts aus der Liste der local_domains ist und username der Name eines bestehenden lokalen Benutzers ist.
Wenn der Server als Mail-Relay fungiert, genügt es, den Befehl ‘RCPT TO "${run{…}}@relaydomain.com"‘ aus der Ferne zu senden, wobei relaydomain.com einer der Hosts aus dem Abschnitt relay_to_domains ist. Da im Exim standardmäßig der Modus zum Zurücksetzen von Berechtigungen nicht angewendet wird (deliver_drop_privilege = false), werden die über "${run{…}}" übermittelten Befehle mit Root-Rechten ausgeführt.
Bemerkenswert ist, dass die Schwachstelle in der im Februar veröffentlichten Version 4.92 zwar nicht besonders hervorgehoben wurde, aber darauf hingewiesen wurde, dass die Behebung zu Sicherheitsproblemen führen könnte. Es gibt keinen Grund zu der Annahme, dass die Entwickler von Exim die Schwachstelle absichtlich verschwiegen haben, zumal das Problem im Zuge von einem Absturz behoben wurde, der bei der Übertragung ungültiger Adressen auftritt, und die Schwachstelle wurde von der Firma Qualys während einer Prüfung der Änderungen in Exim entdeckt.
Ein Fix für frühere Versionen, die weiterhin in den Distributionen verwendet werden, ist bisher nur in Form von . Korrigierende Versionen für frühere Branches zur Behebung des Problems sind für den 11. Juni geplant. Paketaktualisierungen wurden für , , . und bereitgestellt, die Version 4.92 enthalten, in der das Problem nicht auftritt. RHEL und CentOS befinden sich in der Problem , da Exim nicht in deren regulärem Paket-Repository enthalten ist.
Quelle: opennet.ru
