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 bcfd1d7685)
			
			
This commit is contained in:
		 Russell Senior
					Russell Senior
				
			
				
					committed by
					
						 Petr Štetiar
						Petr Štetiar
					
				
			
			
				
	
			
			
			 Petr Štetiar
						Petr Štetiar
					
				
			
						parent
						
							61e51473c2
						
					
				
				
					commit
					46e9a9b04e
				
			| @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk | |||||||
|  |  | ||||||
| PKG_NAME:=patch | PKG_NAME:=patch | ||||||
| PKG_VERSION:=2.7.6 | PKG_VERSION:=2.7.6 | ||||||
| PKG_RELEASE:=5 | PKG_RELEASE:=6 | ||||||
| PKG_CPE_ID:=cpe:/a:gnu:patch | PKG_CPE_ID:=cpe:/a:gnu:patch | ||||||
|  |  | ||||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | ||||||
|   | |||||||
							
								
								
									
										38
									
								
								tools/patch/patches/060-CVE-2019-13638.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								tools/patch/patches/060-CVE-2019-13638.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user