CVE-2020-28007: Link attack in Exim's log directory
authorQualys Security Advisory <qsa@qualys.com>
Tue, 23 Feb 2021 16:33:03 +0000 (08:33 -0800)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Tue, 27 Apr 2021 22:40:51 +0000 (00:40 +0200)
commit93e9a18fbf09deb59bd133986f4c89aeb2d2d86a
treeee53640853e1ee81d94b0cf47ebaba250fcfba90
parent8b1e9bc2cac17ee24d595c97dcf97d9b016f8a46
CVE-2020-28007: Link attack in Exim's log directory

We patch this vulnerability by opening (instead of just creating) the
log file in an unprivileged (exim) child process, and by passing this
file descriptor back to the privileged (root) parent process. The two
functions log_send_fd() and log_recv_fd() are inspired by OpenSSH's
functions mm_send_fd() and mm_receive_fd(); thanks!

This patch also fixes:

- a NULL-pointer dereference in usr1_handler() (this signal handler is
  installed before process_log_path is initialized);

- a file-descriptor leak in dmarc_write_history_file() (two return paths
  did not close history_file_fd).

Note: the use of log_open_as_exim() in dmarc_write_history_file() should
be fine because the documentation explicitly states "Make sure the
directory of this file is writable by the user exim runs as."

(cherry picked from commit 2502cc41d1d92c1413eca6a4ba035c21162662bd)
src/src/dmarc.c
src/src/exim.c
src/src/functions.h
src/src/log.c
test/stderr/0397