diff -Nru mutt-1.13.2/debian/changelog mutt-1.13.2/debian/changelog --- mutt-1.13.2/debian/changelog 2022-04-19 14:15:19.000000000 +0000 +++ mutt-1.13.2/debian/changelog 2023-09-14 15:12:08.000000000 +0000 @@ -1,3 +1,16 @@ +mutt (1.13.2-1ubuntu0.6) focal-security; urgency=medium + + * SECURITY UPDATE: null pointer dereference + - d/p/upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch: Fix + rfc2047 base64 decoding to abort on illegal characters. + - d/p/upstream/Check-for-NULL-userhdrs.patch: Check for NULL userhdrs. + - d/p/upstream/Fix-write_one_header-illegal-header-check.patch: Fix + write_one_header() illegal header check. + - CVE-2023-4874 + - CVE-2023-4875 + + -- Fabian Toepfer Thu, 14 Sep 2023 17:12:08 +0200 + mutt (1.13.2-1ubuntu0.5) focal-security; urgency=medium * SECURITY UPDATE: OOB read diff -Nru mutt-1.13.2/debian/patches/series mutt-1.13.2/debian/patches/series --- mutt-1.13.2/debian/patches/series 2022-04-19 14:10:18.000000000 +0000 +++ mutt-1.13.2/debian/patches/series 2023-09-14 15:11:46.000000000 +0000 @@ -20,3 +20,6 @@ CVE-2021-3181-3.patch CVE-2021-32055.patch CVE-2022-1328.patch +upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch +upstream/Check-for-NULL-userhdrs.patch +upstream/Fix-write_one_header-illegal-header-check.patch diff -Nru mutt-1.13.2/debian/patches/upstream/Check-for-NULL-userhdrs.patch mutt-1.13.2/debian/patches/upstream/Check-for-NULL-userhdrs.patch --- mutt-1.13.2/debian/patches/upstream/Check-for-NULL-userhdrs.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutt-1.13.2/debian/patches/upstream/Check-for-NULL-userhdrs.patch 2023-09-14 15:11:20.000000000 +0000 @@ -0,0 +1,50 @@ +From: Kevin McCarthy +Date: Mon, 4 Sep 2023 12:50:07 +0800 +Subject: Check for NULL userhdrs. +Origin: https://gitlab.com/muttmua/mutt/-/commit/4cc3128abdf52c615911589394a03271fddeefc6 +Bug-Debian: https://bugs.debian.org/1051563 +Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2023-4875 + +When composing an email, miscellaneous extra headers are stored in a +userhdrs list. Mutt first checks to ensure each header contains at +least a colon character, passes the entire userhdr field (name, colon, +and body) to the rfc2047 decoder, and safe_strdup()'s the result on +the userhdrs list. An empty result would from the decode would result +in a NULL headers being added to list. + +The previous commit removed the possibility of the decoded header +field being empty, but it's prudent to add a check to the strchr +calls, in case there is another unexpected bug resulting in one. + +Thanks to Chenyuan Mi (@morningbread) for discovering the two strchr +crashes, giving a working example draft message, and providing the +stack traces for the two NULL derefences. +--- + sendlib.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sendlib.c b/sendlib.c +index c2283972f1d3..763bff4117f2 100644 +--- a/sendlib.c ++++ b/sendlib.c +@@ -2418,7 +2418,7 @@ int mutt_write_rfc822_header (FILE *fp, ENVELOPE *env, BODY *attach, char *date, + /* Add any user defined headers */ + for (; tmp; tmp = tmp->next) + { +- if ((p = strchr (tmp->data, ':'))) ++ if ((p = strchr (NONULL (tmp->data), ':'))) + { + q = p; + +@@ -2466,7 +2466,7 @@ static void encode_headers (LIST *h) + + for (; h; h = h->next) + { +- if (!(p = strchr (h->data, ':'))) ++ if (!(p = strchr (NONULL (h->data), ':'))) + continue; + + i = p - h->data; +-- +2.40.1 + diff -Nru mutt-1.13.2/debian/patches/upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch mutt-1.13.2/debian/patches/upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch --- mutt-1.13.2/debian/patches/upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutt-1.13.2/debian/patches/upstream/Fix-rfc2047-base64-decoding-to-abort-on-illegal-char.patch 2023-09-14 15:11:11.000000000 +0000 @@ -0,0 +1,45 @@ +From: Kevin McCarthy +Date: Sun, 3 Sep 2023 12:22:01 +0800 +Subject: Fix rfc2047 base64 decoding to abort on illegal characters. +Origin: https://gitlab.com/muttmua/mutt/-/commit/452ee330e094bfc7c9a68555e5152b1826534555 +Bug-Debian: https://bugs.debian.org/1051563 +Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2023-4875 +Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2023-4874 + +For some reason, the rfc2047 base64 decoder ignored illegal +characters, instead of aborting. This seems innocuous, but in fact +leads to at least three crash-bugs elsewhere in Mutt. + +These stem from Mutt, in some cases, passing an entire header +field (name, colon, and body) to the rfc2047 decoder. (It is +technically incorrect to do so, by the way, but is beyond scope for +these fixes in stable). Mutt then assumes the result can't be empty +because of a previous check that the header contains at least a colon. + +This commit takes care of the source of the crashes, by aborting the +rfc2047 decode. The following two commits add protective fixes to the +specific crash points. + +Thanks to Chenyuan Mi (@morningbread) for discovering the strchr +crashes, giving a working example draft message, and providing the +stack traces for the two NULL derefences. +--- + rfc2047.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rfc2047.c b/rfc2047.c +index 1ce82ebbe49a..36cc76dbc402 100644 +--- a/rfc2047.c ++++ b/rfc2047.c +@@ -724,7 +724,7 @@ static int rfc2047_decode_word (BUFFER *d, const char *s, char **charset) + if (*pp == '=') + break; + if ((*pp & ~127) || (c = base64val(*pp)) == -1) +- continue; ++ goto error_out_0; + if (k + 6 >= 8) + { + k -= 2; +-- +2.40.1 + diff -Nru mutt-1.13.2/debian/patches/upstream/Fix-write_one_header-illegal-header-check.patch mutt-1.13.2/debian/patches/upstream/Fix-write_one_header-illegal-header-check.patch --- mutt-1.13.2/debian/patches/upstream/Fix-write_one_header-illegal-header-check.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutt-1.13.2/debian/patches/upstream/Fix-write_one_header-illegal-header-check.patch 2023-09-14 15:11:11.000000000 +0000 @@ -0,0 +1,40 @@ +From: Kevin McCarthy +Date: Sun, 3 Sep 2023 14:11:48 +0800 +Subject: Fix write_one_header() illegal header check. +Origin: https://gitlab.com/muttmua/mutt/-/commit/a4752eb0ae0a521eec02e59e51ae5daedf74fda0 +Bug-Debian: https://bugs.debian.org/1051563 +Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2023-4874 + +This is another crash caused by the rfc2047 decoding bug fixed in the +second prior commit. + +In this case, an empty header line followed by a header line starting +with ":", would result in t==end. + +The mutt_substrdup() further below would go very badly at that point, +with t >= end+1. This could result in either a memcpy onto NULL or a +huge malloc call. + +Thanks to Chenyuan Mi (@morningbread) for giving a working example +draft message of the rfc2047 decoding flaw. This allowed me, with +further testing, to discover this additional crash bug. +--- + sendlib.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sendlib.c b/sendlib.c +index 763bff4117f2..204b13085227 100644 +--- a/sendlib.c ++++ b/sendlib.c +@@ -2130,7 +2130,7 @@ static int write_one_header (FILE *fp, int pfxw, int max, int wraplen, + else + { + t = strchr (start, ':'); +- if (!t || t > end) ++ if (!t || t >= end) + { + dprint (1, (debugfile, "mwoh: warning: header not in " + "'key: value' format!\n")); +-- +2.40.1 +