
Vor Kurzem, zu Beginn des Sommers, wurden massenhafte Aufrufe zur Aktualisierung von Exim auf Version 4.92 aufgrund der Sicherheitsanfälligkeit CVE-2019-10149 veröffentlicht (). Jüngste Entwicklungen haben ergeben, dass die Malware Sustes diese Schwachstelle ausnutzen möchte.
Nun können sich alle, die hastig aktualisiert haben, wieder freuen: Am 21. Juli 2019 entdeckte der Forscher Zerons eine kritische Sicherheitsanfälligkeit in der Exim Mail Transfer Agent (MTA) bei der Verwendung von TLS für Versionen von 4.80 bis 4.92.1 einschließlich, die es ermöglicht, Code mit privilegierten Rechten auszuführen. ().
Sicherheitsanfälligkeit
Die Sicherheitsanfälligkeit tritt beim Einsatz der Bibliotheken sowohl GnuTLS als auch OpenSSL auf, wenn eine sichere TLS-Verbindung eingerichtet wird.
Laut dem Entwickler Heiko Schlittermann verwendet die Konfigurationsdatei in Exim standardmäßig kein TLS, jedoch erstellen viele Distributionen während der Installation die erforderlichen Zertifikate und aktivieren die gesicherte Verbindung. Zudem aktivieren neuere Versionen von Exim die Option tls_advertise_hosts=* und generieren die benötigten Zertifikate.
Das hängt von der Konfiguration ab. Die meisten Distributionen aktivieren es standardmäßig, jedoch benötigt Exim ein Zertifikat sowie einen Schlüssel, um als TLS-Server zu fungieren. Wahrscheinlich erstellen Distributionen während der Installation ein Zertifikat. Neuere Exim-Versionen haben die Option tls_advertise_hosts, die standardmäßig auf «*» gesetzt ist, und erstellen ein selbstsigniertes Zertifikat, falls kein solches bereitgestellt wird.
Die Schwachstelle selbst liegt in der fehlerhaften Verarbeitung von SNI (Server Name Indication, eine Technologie, die 2003 in RFC 3546 eingeführt wurde, um dem Client zu ermöglichen, das korrekte Zertifikat für einen Domainnamen abzufragen, ) während des TLS-Handshakes. Ein Angreifer muss lediglich ein SNI senden, das mit einem Backslash («\») und einem Nullzeichen («») endet.
Forscher von Qualys entdeckten einen Fehler in der Funktion string_printing(tls_in.sni), der in der fehlerhaften Escape-Behandlung von «\» besteht. Infolgedessen wird der Backslash unescaped in die Header-Datei des Druckauftrags geschrieben. Diese Datei wird anschließend mit privilegierten Rechten von der Funktion spool_read_header() gelesen, was zu einem Heap Overflow führt.
Es ist wichtig zu erwähnen, dass die Entwickler von Exim derzeit einen PoC für eine Remote-Code-Execution-Schwachstelle erstellt haben, dieser jedoch momentan nicht öffentlich verfügbar ist. Aufgrund der Einfachheit der Ausnutzung dieses Bugs ist es nur eine Frage der Zeit, und zwar einer recht kurzen.
Eine detaillierte Untersuchung durch das Unternehmen Qualys finden Sie hier .

Verwendung von SNI in TLS
Anzahl potenziell verwundbarer öffentlicher Server
Laut Statistik eines großen Hosting-Anbieters E-Soft Inc Stand 1. September wird auf gemieteten Servern die Version 4.92 bei über 70 % der Hosts verwendet.
Version
Anzahl der Server
Prozent
4.92.1
6471
1.28%
4.92
376436
74.22%
4.91
58179
11.47%
4.9
5732
1.13%
4.89
10700
2.11%
4.87
14177
2.80%
4.84
9937
1.96%
Andere Versionen
25568
5.04%
Statistik des Unternehmens E-Soft Inc
Wenn man die Suchmaschine daran erinnert, sind von 5.250.000 in der Serverdatenbank:
- etwa 3.500.000 verwenden Exim 4.92 (ca. 1.380.000 mit SSL/TLS);
- über 74.000 verwenden 4.92.1 (ca. 25.000 mit SSL/TLS).
Somit gibt es schätzungsweise 1,5 Millionen.

Suche nach Exim-Servern in Shodan
Schutz
- Die einfachste, aber nicht empfohlene Option besteht darin, TLS nicht zu verwenden, was dazu führen würde, dass E-Mails im Klartext gesendet werden.
- Um die Ausnutzung von Sicherheitsanfälligkeiten zu vermeiden, ist es empfehlenswert, auf die Version .
- zu aktualisieren oder eine gepatchte Version zu installieren, kann die ACL in der Exim-Konfiguration für die Option acl_smtp_mail mit den folgenden Regeln konfiguriert werden:
# to be prepended to your mail acl (the ACL referenced # by the acl_smtp_mail main config option) deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_sni}}}} deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_peerdn}}}}
Quelle: habr.com
