forked from openwrt/packages
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]>
- Loading branch information
1 parent
7a783ee
commit b82198f
Showing
2 changed files
with
39 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
From 3fcd042d26d70856e826a42b5f93dc4854d80bf0 Mon Sep 17 00:00:00 2001 | ||
From: Andreas Gruenbacher <[email protected]> | ||
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 | ||
|