~ubuntu-branches/ubuntu/lucid/mutt/lucid-updates

« back to all changes in this revision

Viewing changes to debian/patches/ubuntu/mutt-CVE-2014-9116.patch

  • Committer: Package Import Robot
  • Author(s): Steve Beattie
  • Date: 2014-12-10 12:46:54 UTC
  • Revision ID: package-import@ubuntu.com-20141210124654-t6zmbycl2pyfa249
Tags: 1.5.20-7ubuntu1.3
* SECURITY UPDATE: heap-based overflow in mutt_substrdup() when
  handling headers beginning with newline.
  - debian/patches/ubuntu/mutt-CVE-2014-9116.patch
  - CVE-2014-9116

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Origin: http://dev.mutt.org/trac/changeset/897dcc62e4aa
 
2
Bug: http://dev.mutt.org/trac/ticket/3716
 
3
Bug-Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=1168463#c4
 
4
Description: fix problem where mutt_substrdup() was called with the
 
5
  start pointer > end pointer. This occurred because the header field
 
6
  had an empty body, so the trailing newline was skipped over. The
 
7
  fix is to just skip over ascii space and htab.
 
8
 
 
9
This patch also includes the fixes from the upstream commits
 
10
 
 
11
  http://dev.mutt.org/trac/changeset/9f1d56c0a247
 
12
  http://dev.mutt.org/trac/changeset/f01b306ebe0e
 
13
 
 
14
CVE-2014-9116
 
15
 
 
16
---
 
17
 sendlib.c |   18 +++++++++++++++++-
 
18
 1 file changed, 17 insertions(+), 1 deletion(-)
 
19
 
 
20
Index: b/sendlib.c
 
21
===================================================================
 
22
--- a/sendlib.c
 
23
+++ b/sendlib.c
 
24
@@ -1728,6 +1728,12 @@ static int write_one_header (FILE *fp, i
 
25
     if (pfx && *pfx)
 
26
       if (fputs (pfx, fp) == EOF)
 
27
        return -1;
 
28
+    if (!(t = strchr (valbuf, ':')))
 
29
+    {
 
30
+      dprint (1, (debugfile, "mwoh: warning: header not in "
 
31
+                 "'key: value' format!\n"));
 
32
+      return 0;
 
33
+    }
 
34
     if (print_val (fp, pfx, valbuf, flags) < 0)
 
35
     {
 
36
       FREE(&valbuf);
 
37
@@ -1738,8 +1744,18 @@ static int write_one_header (FILE *fp, i
 
38
   else
 
39
   {
 
40
     t = strchr (start, ':');
 
41
+    if (!t || t > end)
 
42
+    {
 
43
+      dprint (1, (debugfile, "mwoh: warning: header not in "
 
44
+                 "'key: value' format!\n"));
 
45
+      return 0;
 
46
+    }
 
47
     tagbuf = mutt_substrdup (start, t);
 
48
-    valbuf = mutt_substrdup (t + 2, end);
 
49
+    ++t; /* skip over the colon separating the header field name and value */
 
50
+    /* skip over any leading whitespace (WSP, as defined in RFC5322) */
 
51
+    while (*t == ' ' || *t == '\t')
 
52
+      t++;
 
53
+    valbuf = mutt_substrdup (t, end);
 
54
     dprint(4,(debugfile,"mwoh: buf[%s%s] too long, "
 
55
              "max width = %d > %dn",
 
56
              NONULL(pfx), valbuf, max, wraplen));