From a7347f49b928f47fc37805c9f3a70a9487d45a65 Mon Sep 17 00:00:00 2001
From: Alexander Koeppe <alexander@koeppe.rocks>
Date: Sun, 8 Mar 2026 17:57:39 +0100
Subject: [PATCH] Fix heap-out-of-bounds read issue in etterfilter
 (CVE-2026-3606)

CVE: CVE-2026-3603
Upstream-Status: Backport [https://github.com/Ettercap/ettercap/commit/41c312d4be6f6067968a275bf66b2abd2a0ba385]
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
---
 include/ec.h                  | 6 ++++++
 utils/etterfilter/ef_output.c | 4 ++--
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/include/ec.h b/include/ec.h
index d69de613..80c7eaba 100644
--- a/include/ec.h
+++ b/include/ec.h
@@ -94,6 +94,12 @@
    ON_ERROR(x, NULL, "virtual memory exhausted"); \
 } while(0)
 
+#define SAFE_RECALLOC(x, s) do { \
+   x = realloc(x, s); \
+   ON_ERROR(x, NULL, "virtual memory exhausted"); \
+   memset(x, 0, s); \
+} while(0)
+
 #define SAFE_STRDUP(x, s) do{ \
    x = strdup(s); \
    ON_ERROR(x, NULL, "virtual memory exhausted"); \
diff --git a/utils/etterfilter/ef_output.c b/utils/etterfilter/ef_output.c
index 2530e599..2f49177e 100644
--- a/utils/etterfilter/ef_output.c
+++ b/utils/etterfilter/ef_output.c
@@ -150,10 +150,10 @@ static size_t create_data_segment(u_char** data, struct filter_header *fh, struc
 static size_t add_data_segment(u_char **data, size_t base, u_char **string, size_t slen)
 {
    /* make room for the new string */
-   SAFE_REALLOC(*data, base + slen + 1);
+   SAFE_RECALLOC(*data, base + slen + 1);
 
    /* copy the string, NULL separated */
-   memcpy(*data + base, *string, slen + 1);
+   memcpy(*data + base, *string, slen);
 
    /* 
     * change the pointer to the new string location 
