#21 Fix command injection vulnerabilities.
Opened 6 months ago by lu4nx. Modified 20 days ago
rpms/ lu4nx/emacs f37  into  f37

file modified
+13 -1
@@ -5,7 +5,7 @@ 

  Name:          emacs

  Epoch:         1

  Version:       28.2

- Release:       3%{?dist}

+ Release:       4%{?dist}

  License:       GPLv3+ and CC0

  URL:           http://www.gnu.org/software/emacs/

  Source0:       https://ftp.gnu.org/gnu/emacs/emacs-%{version}.tar.xz
@@ -33,6 +33,12 @@ 

  # https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60208

  # backport of https://git.savannah.gnu.org/cgit/emacs.git/patch/?id=e59216d3be86918b995bd63273c851ebc6176a83

  Patch8:        native-compile-with_-Q.patch

+ # CVE-2022-48337

+ Patch9:        fixed-etags-local-command-injection-vulnerability.patch

+ # CVE-2022-48338

+ Patch10:       fixed-ruby-mode.el-local-command-injection-vulnerability.patch

+ # CVE-2022-48339

+ Patch11:       fixed-htmlfontify.el-command-injection-vulnerability.patch

  

  BuildRequires: gcc

  BuildRequires: atk-devel
@@ -220,6 +226,9 @@ 

  %patch6 -p1

  %patch7 -p1 -b .ctags-local-execution-cve

  %patch8 -p1 -b .native-compile-Q

+ %patch9 -p1 -b .etags-CVE-2022-48337

+ %patch10 -p1 -b .ruby-mode-CVE-2022-48338

+ %patch11 -p1 -b .htmlfontify-CVE-2022-48339

  autoconf

  

  grep -v "tetris.elc" lisp/Makefile.in > lisp/Makefile.in.new \
@@ -544,6 +553,9 @@ 

  %{_includedir}/emacs-module.h

  

  %changelog

+ * Sat Feb 25 2023 Xi Lu <lx@shellcodes.org> - 1:28.2-4

+ - Add patch to fix CVE-2022-48337#2171987, CVE-2022-48338#2171988 and CVE-2022-48339#2171989

+ 

  * Fri Jan 27 2023 Dan Čermák <dan.cermak@cgc-instruments.com> - 1:28.2-3

  - Ensure that emacs-nox loads the correct eln files

  

@@ -0,0 +1,106 @@ 

+ From e339926272a598bd9ee7e02989c1662b89e64cf0 Mon Sep 17 00:00:00 2001

+ From: lu4nx <lx@shellcodes.org>

+ Date: Tue, 6 Dec 2022 15:42:40 +0800

+ Subject: Fix etags local command injection vulnerability

+ 

+ * lib-src/etags.c: (escape_shell_arg_string): New function.

+ (process_file_name): Use it to quote file names passed to the

+ shell.  (Bug#59817)

+ 

+ (cherry picked from commit 01a4035c869b91c153af9a9132c87adb7669ea1c)

+ ---

+  lib-src/etags.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----

+  1 file changed, 58 insertions(+), 5 deletions(-)

+ 

+ diff --git a/lib-src/etags.c b/lib-src/etags.c

+ index c9c3269..a6bd7f6 100644

+ --- a/lib-src/etags.c

+ +++ b/lib-src/etags.c

+ @@ -408,6 +408,7 @@ static void invalidate_nodes (fdesc *, node **);

+  static void put_entries (node *);

+  static void clean_matched_file_tag (char const * const, char const * const);

+ 

+ +static char *escape_shell_arg_string (char *);

+  static void do_move_file (const char *, const char *);

+  static char *concat (const char *, const char *, const char *);

+  static char *skip_spaces (char *);

+ @@ -1704,13 +1705,16 @@ process_file_name (char *file, language *lang)

+        else

+  	{

+  #if MSDOS || defined (DOS_NT)

+ -	  char *cmd1 = concat (compr->command, " \"", real_name);

+ -	  char *cmd = concat (cmd1, "\" > ", tmp_name);

+ +          int buf_len = strlen (compr->command) + strlen (" \"\" > \"\"") + strlen (real_name) + strlen (tmp_name) + 1;

+ +          char *cmd = xmalloc (buf_len);

+ +          snprintf (cmd, buf_len, "%s \"%s\" > \"%s\"", compr->command, real_name, tmp_name);

+  #else

+ -	  char *cmd1 = concat (compr->command, " '", real_name);

+ -	  char *cmd = concat (cmd1, "' > ", tmp_name);

+ +          char *new_real_name = escape_shell_arg_string (real_name);

+ +          char *new_tmp_name = escape_shell_arg_string (tmp_name);

+ +          int buf_len = strlen (compr->command) + strlen ("  > ") + strlen (new_real_name) + strlen (new_tmp_name) + 1;

+ +          char *cmd = xmalloc (buf_len);

+ +          snprintf (cmd, buf_len, "%s %s > %s", compr->command, new_real_name, new_tmp_name);

+  #endif

+ -	  free (cmd1);

+  	  inf = (system (cmd) == -1

+  		 ? NULL

+  		 : fopen (tmp_name, "r" FOPEN_BINARY));

+ @@ -7689,6 +7693,55 @@ etags_mktmp (void)

+    return templt;

+  }

+  

+ +/*

+ + * Adds single quotes around a string, if found single quotes, escaped it.

+ + * Return a newly-allocated string.

+ + *

+ + * For example:

+ + * escape_shell_arg_string("test.txt") => 'test.txt'

+ + * escape_shell_arg_string("'test.txt") => ''\''test.txt'

+ + */

+ +static char *

+ +escape_shell_arg_string (char *str)

+ +{

+ +  char *p = str;

+ +  int need_space = 2;           /* ' at begin and end */

+ +

+ +  while (*p != '\0')

+ +    {

+ +      if (*p == '\'')

+ +        need_space += 4;        /* ' to '\'', length is 4 */

+ +      else

+ +        need_space++;

+ +

+ +      p++;

+ +    }

+ +

+ +  char *new_str = xnew (need_space + 1, char);

+ +  new_str[0] = '\'';

+ +  new_str[need_space-1] = '\'';

+ +

+ +  int i = 1;                    /* skip first byte */

+ +  p = str;

+ +  while (*p != '\0')

+ +    {

+ +      new_str[i] = *p;

+ +      if (*p == '\'')

+ +        {

+ +          new_str[i+1] = '\\';

+ +          new_str[i+2] = '\'';

+ +          new_str[i+3] = '\'';

+ +          i += 3;

+ +        }

+ +

+ +      i++;

+ +      p++;

+ +    }

+ +

+ +  new_str[need_space] = '\0';

+ +  return new_str;

+ +}

+ +

+  static void

+  do_move_file(const char *src_file, const char *dst_file)

+  {

+ -- 

+ cgit v1.1

@@ -0,0 +1,28 @@ 

+ From 807d2d5b3a7cd1d0e3f7dd24de22770f54f5ae16 Mon Sep 17 00:00:00 2001

+ From: Xi Lu <lx@shellcodes.org>

+ Date: Sat, 24 Dec 2022 16:28:54 +0800

+ Subject: Fix htmlfontify.el command injection vulnerability.

+ 

+ * lisp/htmlfontify.el (hfy-text-p): Fix command injection

+ vulnerability.  (Bug#60295)

+ 

+ (cherry picked from commit 1b4dc4691c1f87fc970fbe568b43869a15ad0d4c)

+ ---

+  lisp/htmlfontify.el | 2 +-

+  1 file changed, 1 insertion(+), 1 deletion(-)

+ 

+ diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el

+ index 115f67c..f8d1e20 100644

+ --- a/lisp/htmlfontify.el

+ +++ b/lisp/htmlfontify.el

+ @@ -1882,7 +1882,7 @@ Hardly bombproof, but good enough in the context in which it is being used."

+  

+  (defun hfy-text-p (srcdir file)

+    "Is SRCDIR/FILE text?  Use `hfy-istext-command' to determine this."

+ -  (let* ((cmd (format hfy-istext-command (expand-file-name file srcdir)))

+ +  (let* ((cmd (format hfy-istext-command (shell-quote-argument (expand-file-name file srcdir))))

+           (rsp (shell-command-to-string    cmd)))

+      (string-match "text" rsp)))

+  

+ -- 

+ cgit v1.1

@@ -0,0 +1,28 @@ 

+ From 22fb5ff5126dc8bb01edaa0252829d853afb284f Mon Sep 17 00:00:00 2001

+ From: Xi Lu <lx@shellcodes.org>

+ Date: Fri, 23 Dec 2022 12:52:48 +0800

+ Subject: Fix ruby-mode.el local command injection vulnerability (bug#60268)

+ 

+ * lisp/progmodes/ruby-mode.el

+ (ruby-find-library-file): Fix local command injection vulnerability.

+ 

+ (cherry picked from commit 9a3b08061feea14d6f37685ca1ab8801758bfd1c)

+ ---

+  lisp/progmodes/ruby-mode.el | 2 +-

+  1 file changed, 1 insertion(+), 1 deletion(-)

+ 

+ diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el

+ index 72631a6..9b05b04 100644

+ --- a/lisp/progmodes/ruby-mode.el

+ +++ b/lisp/progmodes/ruby-mode.el

+ @@ -1819,7 +1819,7 @@ or `gem' statement around point."

+        (setq feature-name (read-string "Feature name: " init))))

+    (let ((out

+           (substring

+ -          (shell-command-to-string (concat "gem which " feature-name))

+ +          (shell-command-to-string (concat "gem which " (shell-quote-argument feature-name)))

+            0 -1)))

+      (if (string-match-p "\\`ERROR" out)

+          (user-error "%s" out)

+ -- 

+ cgit v1.1

  • Fix etags local command injection vulnerability (CVE-2022-48337)
  • Fix ruby-mode.el local command injection vulnerability (CVE-2022-48338)
  • Fix htmlfontify.el command injection vulnerability (CVE-2022-48339)

rebased onto 2350af5cf87621327a61d9cb0eb682156df976f1

6 months ago

rebased onto 9255b0c4c3b62e276dcd596086aa07dd35bd48c5

6 months ago

rebased onto 2c6c18e1adcf2309065aec648d252c1bdb040ed3

6 months ago

Can you please also add the respective Bugzilla ids here?

Can you please also add the respective Bugzilla ids here?

CVE-2022-48337: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2022-48337

CVE-2022-48338: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2022-48338

CVE-2022-48339: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2022-48339

I meant into the %changelog section of the spec file.

rebased onto fd28379

6 months ago

I meant into the %changelog section of the spec file.

Ok, added, thank you.

Hi, can this patch merge?

Will resolve conflicts and merge in f37 and f38

Metadata Update from @fed500:
- Request assigned

20 days ago