aboutsummaryrefslogtreecommitdiffstats
path: root/tools/patch/patches
diff options
context:
space:
mode:
authorRussell Senior <russell@personaltelco.net>2019-08-11 13:57:08 -0700
committerPetr Štetiar <ynezz@true.cz>2019-08-14 09:12:23 +0200
commitdc2f2a16d385147abf8bc13b0b05ab0f2512b537 (patch)
treee12b29fb5549484fedc65ed499594051458533f3 /tools/patch/patches
parentc99ceb7030ed92926d6e3561b176cb9940daa3cb (diff)
downloadupstream-dc2f2a16d385147abf8bc13b0b05ab0f2512b537.tar.gz
upstream-dc2f2a16d385147abf8bc13b0b05ab0f2512b537.tar.bz2
upstream-dc2f2a16d385147abf8bc13b0b05ab0f2512b537.zip
tools/patch: apply upstream patch for cve-2019-13638
GNU patch through 2.7.6 is vulnerable to OS shell command injection that can be exploited by opening a crafted patch file that contains an ed style diff payload with shell metacharacters. The ed editor does not need to be present on the vulnerable system. This is different from CVE-2018-1000156. https://nvd.nist.gov/vuln/detail/CVE-2019-13638 Signed-off-by: Russell Senior <russell@personaltelco.net> (cherry picked from commit bcfd1d76852974170780dbe368e6194dbb0e123e)
Diffstat (limited to 'tools/patch/patches')
-rw-r--r--tools/patch/patches/060-CVE-2019-13638.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/tools/patch/patches/060-CVE-2019-13638.patch b/tools/patch/patches/060-CVE-2019-13638.patch
new file mode 100644
index 0000000000..38caff628a
--- /dev/null
+++ b/tools/patch/patches/060-CVE-2019-13638.patch
@@ -0,0 +1,38 @@
+From 3fcd042d26d70856e826a42b5f93dc4854d80bf0 Mon Sep 17 00:00:00 2001
+From: Andreas Gruenbacher <agruen@gnu.org>
+Date: Fri, 6 Apr 2018 19:36:15 +0200
+Subject: Invoke ed directly instead of using the shell
+
+* src/pch.c (do_ed_script): Invoke ed directly instead of using a shell
+command to avoid quoting vulnerabilities.
+---
+ src/pch.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/pch.c b/src/pch.c
+index 4fd5a05..16e001a 100644
+--- a/src/pch.c
++++ b/src/pch.c
+@@ -2459,9 +2459,6 @@ do_ed_script (char const *inname, char const *outname,
+ *outname_needs_removal = true;
+ copy_file (inname, outname, 0, exclusive, instat.st_mode, true);
+ }
+- sprintf (buf, "%s %s%s", editor_program,
+- verbosity == VERBOSE ? "" : "- ",
+- outname);
+ fflush (stdout);
+
+ pid = fork();
+@@ -2470,7 +2467,8 @@ do_ed_script (char const *inname, char const *outname,
+ else if (pid == 0)
+ {
+ dup2 (tmpfd, 0);
+- execl ("/bin/sh", "sh", "-c", buf, (char *) 0);
++ assert (outname[0] != '!' && outname[0] != '-');
++ execlp (editor_program, editor_program, "-", outname, (char *) NULL);
+ _exit (2);
+ }
+ else
+--
+cgit v1.0-41-gc330
+