[arch-commits] Commit in ettercap/trunk (3 files)

Jelle van der Waa jelle at archlinux.org
Mon Sep 18 17:43:26 UTC 2017


    Date: Monday, September 18, 2017 @ 17:43:25
  Author: jelle
Revision: 258769

upgpkg: ettercap 0.8.2-5

CVE-2017-6430 CVE-2017-8366 patches

Added:
  ettercap/trunk/CVE-2017-6430.patch
  ettercap/trunk/CVE-2017-8366.patch
Modified:
  ettercap/trunk/PKGBUILD

---------------------+
 CVE-2017-6430.patch |   68 +++++++++++++
 CVE-2017-8366.patch |  258 ++++++++++++++++++++++++++++++++++++++++++++++++++
 PKGBUILD            |   11 +-
 3 files changed, 334 insertions(+), 3 deletions(-)

Added: CVE-2017-6430.patch
===================================================================
--- CVE-2017-6430.patch	                        (rev 0)
+++ CVE-2017-6430.patch	2017-09-18 17:43:25 UTC (rev 258769)
@@ -0,0 +1,68 @@
+From 4ad7f85dc01202e363659aa473c99470b3f4e1f4 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
+Date: Tue, 7 Mar 2017 22:05:31 +0100
+Subject: [PATCH] Fix issue #782
+
+---
+ utils/etterfilter/ef_compiler.c |  4 +++-
+ utils/etterfilter/ef_main.c     | 10 +++++++---
+ utils/etterfilter/ef_output.c   |  3 +++
+ 3 files changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/utils/etterfilter/ef_compiler.c b/utils/etterfilter/ef_compiler.c
+index db876636e..ddb73bd30 100644
+--- a/utils/etterfilter/ef_compiler.c
++++ b/utils/etterfilter/ef_compiler.c
+@@ -239,7 +239,9 @@ size_t compile_tree(struct filter_op **fop)
+    struct filter_op *array = NULL;
+    struct unfold_elm *ue;
+ 
+-   BUG_IF(tree_root == NULL);
++   // invalid file
++   if (tree_root == NULL)
++      return 0;
+   
+    fprintf(stdout, " Unfolding the meta-tree ");
+    fflush(stdout);
+diff --git a/utils/etterfilter/ef_main.c b/utils/etterfilter/ef_main.c
+index ae4591344..431084b91 100644
+--- a/utils/etterfilter/ef_main.c
++++ b/utils/etterfilter/ef_main.c
+@@ -39,7 +39,7 @@ struct globals *gbls;
+ 
+ int main(int argc, char *argv[])
+ {
+-
++   int ret_value = 0;
+    globals_alloc();
+    /* etterfilter copyright */
+    fprintf(stdout, "\n" EC_COLOR_BOLD "%s %s" EC_COLOR_END " copyright %s %s\n\n", 
+@@ -84,8 +84,12 @@ int main(int argc, char *argv[])
+       fprintf(stdout, "\n\nThe script contains errors...\n\n");
+   
+    /* write to file */
+-   if (write_output() != E_SUCCESS)
+-      FATAL_ERROR("Cannot write output file (%s)", GBL_OPTIONS->output_file);
++   ret_value = write_output();
++   if (ret_value == -E_NOTHANDLED)
++      FATAL_ERROR("Cannot write output file (%s): the filter is not correctly handled.", GBL_OPTIONS->output_file);
++   else if (ret_value == -E_INVALID)
++      FATAL_ERROR("Cannot write output file (%s): the filter format is not correct. ", GBL_OPTIONS->output_file);
++
+    globals_free();
+    return 0;
+ }
+diff --git a/utils/etterfilter/ef_output.c b/utils/etterfilter/ef_output.c
+index 5ae591904..fcf19f010 100644
+--- a/utils/etterfilter/ef_output.c
++++ b/utils/etterfilter/ef_output.c
+@@ -51,6 +51,9 @@ int write_output(void)
+    if (fop == NULL)
+       return -E_NOTHANDLED;
+ 
++   if (ninst == 0)
++      return -E_INVALID;
++
+    /* create the file */
+    fd = open(GBL_OPTIONS->output_file, O_CREAT | O_RDWR | O_TRUNC | O_BINARY, 0644);
+    ON_ERROR(fd, -1, "Can't create file %s", GBL_OPTIONS->output_file);

Added: CVE-2017-8366.patch
===================================================================
--- CVE-2017-8366.patch	                        (rev 0)
+++ CVE-2017-8366.patch	2017-09-18 17:43:25 UTC (rev 258769)
@@ -0,0 +1,258 @@
+From d14d2558da14a33abf7baab28957488a75d16af1 Mon Sep 17 00:00:00 2001
+From: Alexander Koeppe <format_c at online.de>
+Date: Thu, 1 Jun 2017 08:56:23 +0200
+Subject: [PATCH 1/4] Add ASAN compiler flags in DEBUG build type
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 90050590f..8e823669c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -126,7 +126,7 @@ if(NOT DISABLE_RPATH)
+   set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+   set(CMAKE_MACOSX_RPATH 1)
+ endif(NOT DISABLE_RPATH)
+-set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls" CACHE STRING "" FORCE)
++set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls -fsanitize=address -fno-omit-frame-pointer" CACHE STRING "" FORCE)
+ set(CMAKE_C_FLAGS_RELEASE "-O2 -w -D_FORTIFY_SOURCE=2" CACHE STRING "" FORCE)
+ 
+ if(OS_DARWIN)
+
+From 044051d302da73e16b0577eb797cd42affba27e5 Mon Sep 17 00:00:00 2001
+From: Alexander Koeppe <format_c at online.de>
+Date: Thu, 1 Jun 2017 08:56:57 +0200
+Subject: [PATCH 2/4] fix buffer over- / underflow conditions
+
+---
+ include/ec_strings.h |  2 +-
+ src/ec_strings.c     | 25 +++++++++++++++----------
+ 2 files changed, 16 insertions(+), 11 deletions(-)
+
+diff --git a/include/ec_strings.h b/include/ec_strings.h
+index f791739da..9ad245ef3 100644
+--- a/include/ec_strings.h
++++ b/include/ec_strings.h
+@@ -43,7 +43,7 @@
+ 
+ EC_API_EXTERN int match_pattern(const char *s, const char *pattern);
+ EC_API_EXTERN int base64_decode(char *bufplain, const char *bufcoded);
+-EC_API_EXTERN int strescape(char *dst, char *src);
++EC_API_EXTERN int strescape(char *dst, char *src, size_t len);
+ EC_API_EXTERN int str_replace(char **text, const char *s, const char *d);   
+ EC_API_EXTERN size_t strlen_utf8(const char *s);
+ EC_API_EXTERN char * ec_strtok(char *s, const char *delim, char **ptrptr);
+diff --git a/src/ec_strings.c b/src/ec_strings.c
+index 53583851a..21b71926c 100644
+--- a/src/ec_strings.c
++++ b/src/ec_strings.c
+@@ -167,13 +167,14 @@ static int hextoint(int c)
+ /* 
+  * convert the escaped string into a binary one
+  */
+-int strescape(char *dst, char *src)
++int strescape(char *dst, char *src, size_t len)
+ {
+    char  *olddst = dst;
++   char  *oldsrc = src;
+    int   c;
+    int   val;
+ 
+-   while ((c = *src++) != '\0') {
++   while ((c = *src++) != '\0' && (size_t)(src - oldsrc) <= len) {
+       if (c == '\\') {
+          switch ((c = *src++)) {
+             case '\0':
+@@ -218,9 +219,11 @@ int strescape(char *dst, char *src)
+                   if (c >= '0' && c <= '7')
+                      val = (val << 3) | (c - '0');
+                   else 
+-                     --src;
++                     if (src > oldsrc) /* protect against buffer underflow */
++                        --src;
+                } else 
+-                  --src;
++                  if (src > oldsrc) /* protect against buffer underflow */
++                     --src;
+                *dst++ = (char) val;
+                break;
+ 
+@@ -232,15 +235,17 @@ int strescape(char *dst, char *src)
+                        c = hextoint(*src++);
+                        if (c >= 0) 
+                           val = (val << 4) + c;
+-                       else 
+-                          --src;
+-               } else 
+-                  --src;
++                       else if (src > oldsrc) /* protect against buffer underflow */
++                             --src;
++               } else if (src > oldsrc) /* protect against buffer underflow */
++                     --src;
+                *dst++ = (char) val;
+                break;
+          }
+-      } else if (c == 8 || c == 263)  /* the backspace */
+-         dst--;
++      } else if (c == 8 || c == 263) {  /* the backspace */
++         if (dst > oldsrc) /* protect against buffer underflow */
++            dst--;
++      }
+       else
+          *dst++ = (char) c;
+    }
+
+From 19706cf53b189fbc996791cdb4b0d9a1f0feae5f Mon Sep 17 00:00:00 2001
+From: Alexander Koeppe <format_c at online.de>
+Date: Thu, 1 Jun 2017 08:57:54 +0200
+Subject: [PATCH 3/4] adapt calls of strescape() adding strlen
+
+---
+ src/ec_encryption.c                                |  2 +-
+ src/interfaces/curses/ec_curses_view_connections.c |  2 +-
+ src/interfaces/gtk/ec_gtk_view_connections.c       |  2 +-
+ utils/etterfilter/ef_encode.c                      | 18 ++++++++++++------
+ 4 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/src/ec_encryption.c b/src/ec_encryption.c
+index 6c02529c1..3d5056030 100644
+--- a/src/ec_encryption.c
++++ b/src/ec_encryption.c
+@@ -218,7 +218,7 @@ int set_wep_key(char *string)
+ 
+    if (type == 's') {
+       /* escape the string and check its length */
+-      if (strescape((char *)tmp_wkey, p) != (int)tmp_wkey_len)
++      if (strescape((char *)tmp_wkey, p, strlen(tmp_wkey)+1) != (int)tmp_wkey_len)
+     	  SEMIFATAL_ERROR("Specified WEP key length does not match the given string");
+    } else if (type == 'p') {
+       /* create the key from the passphrase */
+diff --git a/src/interfaces/curses/ec_curses_view_connections.c b/src/interfaces/curses/ec_curses_view_connections.c
+index fb52331cf..011c0edf7 100644
+--- a/src/interfaces/curses/ec_curses_view_connections.c
++++ b/src/interfaces/curses/ec_curses_view_connections.c
+@@ -614,7 +614,7 @@ static void inject_user(void)
+    size_t len;
+ 
+    /* escape the sequnces in the buffer */
+-   len = strescape((char*)injectbuf, (char*)injectbuf);
++   len = strescape((char*)injectbuf, (char*)injectbuf, strlen(injectbuf)+1);
+    
+    /* check where to inject */
+    if (wdg_c1->flags & WDG_OBJ_FOCUSED) {
+diff --git a/src/interfaces/gtk/ec_gtk_view_connections.c b/src/interfaces/gtk/ec_gtk_view_connections.c
+index fa7dfdc58..b55e1755a 100644
+--- a/src/interfaces/gtk/ec_gtk_view_connections.c
++++ b/src/interfaces/gtk/ec_gtk_view_connections.c
+@@ -1627,7 +1627,7 @@ static void gtkui_inject_user(int side)
+    size_t len;
+     
+    /* escape the sequnces in the buffer */
+-   len = strescape(injectbuf, injectbuf);
++   len = strescape(injectbuf, injectbuf, strlen(injectbuf)+1);
+ 
+    /* check where to inject */
+    if (side == 1 || side == 2) {
+diff --git a/utils/etterfilter/ef_encode.c b/utils/etterfilter/ef_encode.c
+index d4b9110cd..7e359e062 100644
+--- a/utils/etterfilter/ef_encode.c
++++ b/utils/etterfilter/ef_encode.c
+@@ -136,7 +136,8 @@ int encode_const(char *string, struct filter_op *fop)
+       fop->op.test.string = (u_char*)strdup(string + 1);
+          
+       /* escape it in the structure */
+-      fop->op.test.slen = strescape((char*)fop->op.test.string, (char*)fop->op.test.string);
++      fop->op.test.slen = strescape((char*)fop->op.test.string, 
++            (char*)fop->op.test.string, strlen(fop->op.test.string)+1);
+      
+       return E_SUCCESS;
+       
+@@ -184,7 +185,8 @@ int encode_function(char *string, struct filter_op *fop)
+             fop->opcode = FOP_FUNC;
+             fop->op.func.op = FFUNC_SEARCH;
+             fop->op.func.string = (u_char*)strdup(dec_args[1]);
+-            fop->op.func.slen = strescape((char*)fop->op.func.string, (char*)fop->op.func.string);
++            fop->op.func.slen = strescape((char*)fop->op.func.string, 
++                  (char*)fop->op.func.string, strlen(fop->op.func.string)+1);
+             ret = E_SUCCESS;
+          } else
+             SCRIPT_ERROR("Unknown offset %s ", dec_args[0]);
+@@ -202,7 +204,8 @@ int encode_function(char *string, struct filter_op *fop)
+             fop->opcode = FOP_FUNC;
+             fop->op.func.op = FFUNC_REGEX;
+             fop->op.func.string = (u_char*)strdup(dec_args[1]);
+-            fop->op.func.slen = strescape((char*)fop->op.func.string, (char*)fop->op.func.string);
++            fop->op.func.slen = strescape((char*)fop->op.func.string, 
++                  (char*)fop->op.func.string, strlen(fop->op.func.string)+1);
+             ret = E_SUCCESS;
+          } else
+             SCRIPT_ERROR("Unknown offset %s ", dec_args[0]);
+@@ -272,9 +275,11 @@ int encode_function(char *string, struct filter_op *fop)
+          /* replace always operate at DATA level */
+          fop->op.func.level = 5;
+          fop->op.func.string = (u_char*)strdup(dec_args[0]);
+-         fop->op.func.slen = strescape((char*)fop->op.func.string, (char*)fop->op.func.string);
++         fop->op.func.slen = strescape((char*)fop->op.func.string, 
++               (char*)fop->op.func.string, strlen(fop->op.func.string)+1);
+          fop->op.func.replace = (u_char*)strdup(dec_args[1]);
+-         fop->op.func.rlen = strescape((char*)fop->op.func.replace, (char*)fop->op.func.replace);
++         fop->op.func.rlen = strescape((char*)fop->op.func.replace, 
++               (char*)fop->op.func.replace, strlen(fop->op.func.replace)+1);
+          ret = E_SUCCESS;
+       } else
+          SCRIPT_ERROR("Wrong number of arguments for function \"%s\" ", name);
+@@ -328,7 +333,8 @@ int encode_function(char *string, struct filter_op *fop)
+       if (nargs == 1) {
+          fop->op.func.op = FFUNC_MSG;
+          fop->op.func.string = (u_char*)strdup(dec_args[0]);
+-         fop->op.func.slen = strescape((char*)fop->op.func.string, (char*)fop->op.func.string);
++         fop->op.func.slen = strescape((char*)fop->op.func.string, 
++               (char*)fop->op.func.string, strlen(fop->op.func.string)+1);
+          ret = E_SUCCESS;
+       } else
+          SCRIPT_ERROR("Wrong number of arguments for function \"%s\" ", name);
+
+From b005d55d4eae444c5be14eb792b50657a14c7b1d Mon Sep 17 00:00:00 2001
+From: Alexander Koeppe <format_c at online.de>
+Date: Sun, 4 Jun 2017 08:09:04 +0200
+Subject: [PATCH 4/4] Only add ASAN flags depeding on compiler version
+
+---
+ CMakeLists.txt | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8e823669c..8f7c7c368 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -126,7 +126,27 @@ if(NOT DISABLE_RPATH)
+   set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+   set(CMAKE_MACOSX_RPATH 1)
+ endif(NOT DISABLE_RPATH)
+-set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls -fsanitize=address -fno-omit-frame-pointer" CACHE STRING "" FORCE)
++
++# set general build flags for debug build-type
++set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls" CACHE STRING "" FORCE)
++# append ASAN build flags if compiler version has support
++if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
++   if (CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.8)
++      set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer" CACHE STRING "" FORCE)
++      message("Building with ASAN support (GNU compiler)")
++   else (CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.8)
++      message("Building without ASAN support (GNU compiler)")
++   endif (CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.8)
++elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
++   if (CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.1)
++      set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fno-omit-frame-pointer" CACHE STRING "" FORCE)
++      message("Building with ASAN support (Clang compiler)")
++   elseif (CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.1)
++      message("Building without ASAN support (Clang compiler)")
++   endif (CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.1)
++endif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
++
++# set build flags for release build-type
+ set(CMAKE_C_FLAGS_RELEASE "-O2 -w -D_FORTIFY_SOURCE=2" CACHE STRING "" FORCE)
+ 
+ if(OS_DARWIN)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-09-18 17:33:18 UTC (rev 258768)
+++ PKGBUILD	2017-09-18 17:43:25 UTC (rev 258769)
@@ -5,7 +5,7 @@
 pkgbase=ettercap
 pkgname=('ettercap' 'ettercap-gtk')
 pkgver=0.8.2
-pkgrel=4
+pkgrel=5
 arch=('i686' 'x86_64')
 url="http://ettercap.github.com/ettercap/"
 license=('GPL')
@@ -12,13 +12,18 @@
 depends=('openssl' 'libpcap' 'pcre' 'libltdl' 'libnet' 'ethtool' 'curl')
 makedepends=('ghostscript' 'cmake' 'libpcap' 'libltdl' 'libnet' 'gtk2')
 options=('!makeflags' '!emptydirs')
-source=("$pkgbase-$pkgver.tar.gz::https://github.com/Ettercap/ettercap/archive/v$pkgver.tar.gz" 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch)
+source=("$pkgbase-$pkgver.tar.gz::https://github.com/Ettercap/ettercap/archive/v$pkgver.tar.gz" 0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch
+        CVE-2017-6430.patch CVE-2017-8366.patch)
 sha1sums=('7e528632ca01c5977da1a0af56a5e05fbc383832'
-          '425fd778afd8fd75baccb9fb0a43c7b246304b32')
+          '425fd778afd8fd75baccb9fb0a43c7b246304b32'
+          '3a3d6423368403f03205077493e80c1c4ebaab26'
+          'eabee4ad0ff0832b3cf46f453e3fa4ee8768f325')
 
 prepare() {
   cd "${pkgbase}-${pkgver}"
   patch -Np1 -i $srcdir/0001-First-draft-of-openssl-1.1-compatibility-layer-from-.patch
+  patch -Np1 -i $srcdir/CVE-2017-6430.patch
+  patch -Np1 -i $srcdir/CVE-2017-8366.patch
 }
 
 build() {



More information about the arch-commits mailing list