From 8f84b06a462cb02821c09aeeb8ca77f1bbdc00cb Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Tue, 10 Sep 2019 12:29:12 +0100 Subject: Refuse to open a msglog file with .. in the path. Recent exploits have use this as a step for overwriting system files, and msglog file should always be under the spooldir, so add this as a defence-in-depth tactic --- src/src/deliver.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/src/deliver.c b/src/src/deliver.c index 59fbeeaf9..72751c2dc 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -328,6 +328,10 @@ Returns: a file descriptor, or -1 (with errno set) static int open_msglog_file(uschar *filename, int mode, uschar **error) { +if (Ustrstr(filename, US"/../")) + log_write(0, LOG_MAIN|LOG_PANIC, + "Attempt to open msglog file path with upward-traversal: '%s'\n", filename); + for (int i = 2; i > 0; i--) { int fd = Uopen(filename, -- cgit v1.2.3