8cd64c
From 14ec36e107a8c9af7d0a80c3571fe39b291ff1d4 Mon Sep 17 00:00:00 2001
8cd64c
From: Prasad J Pandit <pjp@fedoraproject.org>
8cd64c
Date: Mon, 13 Jan 2020 17:44:31 +0530
8cd64c
Subject: [PATCH] slirp: tftp: restrict relative path access
8cd64c
8cd64c
tftp restricts relative or directory path access on Linux systems.
8cd64c
Apply same restrictions on Windows systems too. It helps to avoid
8cd64c
directory traversal issue.
8cd64c
8cd64c
Fixes: https://bugs.launchpad.net/qemu/+bug/1812451
8cd64c
Reported-by: Peter Maydell <peter.maydell@linaro.org>
8cd64c
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
8cd64c
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
8cd64c
Message-Id: <20200113121431.156708-1-ppandit@redhat.com>
8cd64c
---
8cd64c
 src/tftp.c | 9 +++++++--
8cd64c
 1 file changed, 7 insertions(+), 2 deletions(-)
8cd64c
8cd64c
diff -up slirp4netns-4992082b2af77c09bca6bd8504e2ebfa5e118c18/qemu/slirp/src/tftp.c.CVE-2020-7211 slirp4netns-4992082b2af77c09bca6bd8504e2ebfa5e118c18/qemu/slirp/src/tftp.c
8cd64c
--- slirp4netns-4992082b2af77c09bca6bd8504e2ebfa5e118c18/qemu/slirp/src/tftp.c.CVE-2020-7211	2020-01-17 08:02:02.837544967 +0100
8cd64c
+++ slirp4netns-4992082b2af77c09bca6bd8504e2ebfa5e118c18/qemu/slirp/src/tftp.c	2020-01-17 08:14:59.569544607 +0100
8cd64c
@@ -344,9 +344,13 @@ static void tftp_handle_rrq(Slirp *slirp
8cd64c
   k += 6; /* skipping octet */
8cd64c
 
8cd64c
   /* do sanity checks on the filename */
8cd64c
-  if (!strncmp(req_fname, "../", 3) ||
8cd64c
-      req_fname[strlen(req_fname) - 1] == '/' ||
8cd64c
-      strstr(req_fname, "/../")) {
8cd64c
+  if (
8cd64c
+#ifdef G_OS_WIN32
8cd64c
+    strstr(req_fname, "..\\") ||
8cd64c
+    req_fname[strlen(req_fname) - 1] == '\\' ||
8cd64c
+#endif
8cd64c
+    strstr(req_fname, "../") ||
8cd64c
+    req_fname[strlen(req_fname) - 1] == '/') {
8cd64c
       tftp_send_error(spt, 2, "Access violation", tp);
8cd64c
       return;
8cd64c
   }