Package: release.debian.org Severity: normal Tags: buster User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: guil...@debian.org
Fix for CVE-2020-10188, which doesn' really warrant a DSA. (The numbering in debian/patches/series is the following what's in unstable, the same patch is present there since a few months already) Debdiff attached. Cheers, Moritz
diff -Nru inetutils-1.9.4/debian/changelog inetutils-1.9.4/debian/changelog --- inetutils-1.9.4/debian/changelog 2019-02-16 18:09:37.000000000 +0100 +++ inetutils-1.9.4/debian/changelog 2020-09-18 20:06:42.000000000 +0200 @@ -1,3 +1,9 @@ +inetutils (2:1.9.4-7+deb10u1) buster; urgency=medium + + * CVE-2020-10188 (Closes: #956084) + + -- Moritz Mühlenhoff <j...@debian.org> Fri, 18 Sep 2020 20:06:42 +0200 + inetutils (2:1.9.4-7) unstable; urgency=medium * Remove debian/tmp prefix from man pages paths in debhelper fragment files. diff -Nru inetutils-1.9.4/debian/patches/0053-telnetd-Fix-arbitrary-remote-code-execution-via-shor.patch inetutils-1.9.4/debian/patches/0053-telnetd-Fix-arbitrary-remote-code-execution-via-shor.patch --- inetutils-1.9.4/debian/patches/0053-telnetd-Fix-arbitrary-remote-code-execution-via-shor.patch 1970-01-01 01:00:00.000000000 +0100 +++ inetutils-1.9.4/debian/patches/0053-telnetd-Fix-arbitrary-remote-code-execution-via-shor.patch 2020-09-18 15:58:19.000000000 +0200 @@ -0,0 +1,130 @@ +From 99afdd5ecd787e40f06473304125eee93139031a Mon Sep 17 00:00:00 2001 +From: Michal Ruprich <michalrupr...@gmail.com> +Date: Sun, 12 Apr 2020 22:41:50 +0200 +Subject: [PATCH 53/60] telnetd: Fix arbitrary remote code execution via short + writes or urgent data + +Fixes: CVE-2020-10188 +Closes: #956084 +Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2020-10188 +Patch-Origin: Fedora / RedHat +Patch-URL: https://src.fedoraproject.org/rpms/telnet/raw/master/f/telnet-0.17-overflow-exploit.patch +--- + telnetd/telnetd.h | 2 +- + telnetd/utility.c | 35 ++++++++++++++++++++++------------- + 2 files changed, 23 insertions(+), 14 deletions(-) + +diff --git a/telnetd/telnetd.h b/telnetd/telnetd.h +index 044025d2..fa970e24 100644 +--- a/telnetd/telnetd.h ++++ b/telnetd/telnetd.h +@@ -271,7 +271,7 @@ void io_drain (void); + + int stilloob (int s); + void ptyflush (void); +-char *nextitem (char *current); ++char *nextitem (char *current, const char *endp); + void netclear (void); + void netflush (void); + +diff --git a/telnetd/utility.c b/telnetd/utility.c +index db93c205..c9df8a79 100644 +--- a/telnetd/utility.c ++++ b/telnetd/utility.c +@@ -484,10 +484,14 @@ stilloob (int s) + * character. + */ + char * +-nextitem (char *current) ++nextitem (char *current, const char *endp) + { ++ if (current >= endp) ++ return NULL; + if ((*current & 0xff) != IAC) + return current + 1; ++ if (current + 1 >= endp) ++ return NULL; + + switch (*(current + 1) & 0xff) + { +@@ -495,19 +499,20 @@ nextitem (char *current) + case DONT: + case WILL: + case WONT: +- return current + 3; ++ return current + 3 <= endp ? current + 3 : NULL; + + case SB: /* loop forever looking for the SE */ + { + char *look = current + 2; + +- for (;;) +- if ((*look++ & 0xff) == IAC && (*look++ & 0xff) == SE) ++ while (look < endp) ++ if ((*look++ & 0xff) == IAC && look < endp && (*look++ & 0xff) == SE) + return look; + +- default: +- return current + 2; ++ return NULL; + } ++ default: ++ return current + 2 <= endp ? current + 2 : NULL; + } + } /* end of nextitem */ + +@@ -529,8 +534,9 @@ nextitem (char *current) + * us in any case. + */ + #define wewant(p) \ +- ((nfrontp > p) && ((*p&0xff) == IAC) && \ +- ((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL)) ++ ((nfrontp > p) && ((*p & 0xff) == IAC) && \ ++ (nfrontp > p + 1 && (((*(p + 1) & 0xff) != EC) && \ ++ ((*(p + 1)&0xff) != EL)))) + + + void +@@ -545,7 +551,7 @@ netclear (void) + thisitem = netobuf; + #endif /* ENCRYPTION */ + +- while ((next = nextitem (thisitem)) <= nbackp) ++ while ((next = nextitem (thisitem, nbackp)) != NULL && next <= nbackp) + thisitem = next; + + /* Now, thisitem is first before/at boundary. */ +@@ -556,15 +562,18 @@ netclear (void) + good = netobuf; /* where the good bytes go */ + #endif /* ENCRYPTION */ + +- while (nfrontp > thisitem) ++ while (thisitem != NULL && nfrontp > thisitem) + { + if (wewant (thisitem)) + { + int length; + +- for (next = thisitem; wewant (next) && nfrontp > next; +- next = nextitem (next)) ++ for (next = thisitem; ++ next != NULL && wewant (next) && nfrontp > next; ++ next = nextitem (next, nfrontp)) + ; ++ if (next == NULL) ++ next = nfrontp; + + length = next - thisitem; + memmove (good, thisitem, length); +@@ -573,7 +582,7 @@ netclear (void) + } + else + { +- thisitem = nextitem (thisitem); ++ thisitem = nextitem (thisitem, nfrontp); + } + } + +-- +2.26.0.292.g33ef6b2f38 + diff -Nru inetutils-1.9.4/debian/patches/series inetutils-1.9.4/debian/patches/series --- inetutils-1.9.4/debian/patches/series 2019-02-16 17:21:30.000000000 +0100 +++ inetutils-1.9.4/debian/patches/series 2020-09-18 15:58:34.000000000 +0200 @@ -29,3 +29,4 @@ 0036-ftpd-ftpd.c-options-max-timeout-Mention-mandatory-ar.patch 0037-src-hostname.c-set_name-Handle-case-when-hostname_ne.patch 0038-src-hostname.c-parse_file-Free-name-and-allocate-one.patch +0053-telnetd-Fix-arbitrary-remote-code-execution-via-shor.patch