Table of Contents
Postfix 2.4 und neuere Versionen sind auf Linux Kernel Versionen 2.6.x anfällig für einen DoS Angriff durch einen lokalen Benutzer. Es gibt dabei keine Preisgabe von Daten oder eine Gefährdung der Datenintegrität. Das Problem wurde vom Postfix Autor während der routinemäßigen Pflege des Quellcodes gefunden.
Postfix ist ein OpenSource MTA, der auf verschiedenen Unix-basierten Systemen läuft. Postfix 2.4 (veröffentlicht in 2007) führte performanteres I/O Event Handling auf Basis verschiedener Routinen ein:
BSD kqueue (auch in MacOS X vorhanden)
Linux epoll und
Solaris /dev/poll
Diese implementieren ein besser skalierbares Event Handling als die
alten select()
und poll()
Routinen.
Auf 2.6.x Linux Kerneln haben Postfix 2.4 und neuere Versionen ein
epoll Dateideskriptor-Leck, wenn nicht-Postfix Befehle z.B. über die
$HOME/.forward
Datei eines Benutzers ausgeführt
werden. Ein lokaler Benutzer kann auf den epoll Dateideskriptor zugreifen
und einen Denial of Service-Angriff gegen Postfix ausführen. Der Angriff
kann zu verminderter Performance oder gar zur automatischen Beendigung von
Postfix führen, wenn ein interner Sicherheitsmechanismus ausgelöst wird.
Einige mögliche Angriffe werden im letzten Absatz dieses Abschnitts
beleuchtet.
Bei der Verwendung von kqueue
oder Solaris
/dev/poll
ist Postfix nicht betroffen. Dort widerruft
der Kernel den Zugriff auf das unterliegende Kernelobjekt, wenn ein
Kindprozess mittels fork()
erzeugt wird, wobei
normalerweise nur der ursprüngliche Prozess auf das Kernelobjekt zugreifen
darf.
Die zuvor genannten Ansätze könnten die Konsistenz der input/output event notification unter Linux verbessern. Aktuell
können verschiedene Linux Prozesse unterschiedliche Updates auf einer gemeinsamen epoll Instanz machen
könnte daher der Kernel input/output Ereignisse an Prozesse melden, die nicht nach diesen Ereignissen gefragt haben und
könnten diese Ereignisse Aktivitäten auf Pipes, Sockets usw. einschließen, die nicht für diese Prozesse offen sind.
Diese Inkonsistenzen könnten vermieden werden, wenn eine epoll Instanz nur durch den Prozess, der sie erzeugt, zugreifbar ist.
Erlauben Sie nur vertrauenswürdigen Benutzern die Mailzustellung an
externe Programme. Im folgenden Beispiel ist das Verzeichnis /var/forward
nicht durch Benutzer schreibbar
und Postfix ist konfiguriert nach /var/forward/username
(plus optionaler
Adresserweiterung) anstelle des Standardpfades
~username/.forward
(plus optionaler
Adresserweiterung) zu suchen.
/etc/postfix/main.cf
:
forward_path = /var/forward/${user}${recipient_delimiter}${extension}, /var/forward/${user}
Andere Workarounds sind für andere Filter nötig, die Befehle aus benutzerschreibbaren Konfigurationsdateien ausführen.
Applizieren Sie den Quellcode-Patch aus dem nächsten Abschnitt oder installieren Sie eine aktualisierte Postfix Version. Postfix Versionen 2.4.9, 2.5.5 und 2.6-20080902 sind auf der Postfix Homepage verfügbar. Distributoren werden aktualisierte Versionen gem. ihrer eigenen Supportpolicies bereitstellen.
*** src/util/events.c.orig Mon Mar 24 13:19:23 2008 --- src/util/events.c Tue Aug 26 17:43:41 2008 *************** *** 426,431 **** --- 427,433 ---- #define EVENT_REG_INIT_HANDLE(er, n) do { \ er = event_epollfd = epoll_create(n); \ + if (event_epollfd >= 0) close_on_exec(event_epollfd, CLOSE_ON_EXEC); \ } while (0) #define EVENT_REG_INIT_TEXT "epoll_create"