summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2019-09-10 12:29:12 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2019-09-10 12:33:28 +0100
commit8f84b06a462cb02821c09aeeb8ca77f1bbdc00cb (patch)
tree38c9dc26019ece495203b806d87ae214712530c3
parentb09c17939112f84e689a9c1343f00ca84610325d (diff)
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
-rw-r--r--src/src/deliver.c4
1 files changed, 4 insertions, 0 deletions
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,