From b000b72b71ff9d29898d7977a4a999d876ab2930 Mon Sep 17 00:00:00 2001 From: Fredrik Rinnestam Date: Mon, 28 Sep 2015 22:36:28 +0200 Subject: [PATCH] [notify] unzip: added fedora patch for heap overflow issue. http://seclists.org/oss-sec/2015/q3/512 --- unzip/.footprint | 15 ++- unzip/.md5sum | 1 + unzip/Pkgfile | 4 +- unzip/unzip-6.0-heap-overflow-infloop.patch | 103 ++++++++++++++++++++ 4 files changed, 114 insertions(+), 9 deletions(-) create mode 100644 unzip/unzip-6.0-heap-overflow-infloop.patch diff --git a/unzip/.footprint b/unzip/.footprint index fa863ce80..12b423797 100644 --- a/unzip/.footprint +++ b/unzip/.footprint @@ -5,11 +5,10 @@ drwxr-xr-x root/root usr/bin/ -rwxr-xr-x root/root usr/bin/unzipsfx -rwxr-xr-x root/root usr/bin/zipgrep lrwxrwxrwx root/root usr/bin/zipinfo -> unzip -drwxr-xr-x root/root usr/share/ -drwxr-xr-x root/root usr/share/man/ -drwxr-xr-x root/root usr/share/man/man1/ --rw-r--r-- root/root usr/share/man/man1/funzip.1.gz --rw-r--r-- root/root usr/share/man/man1/unzip.1.gz --rw-r--r-- root/root usr/share/man/man1/unzipsfx.1.gz --rw-r--r-- root/root usr/share/man/man1/zipgrep.1.gz --rw-r--r-- root/root usr/share/man/man1/zipinfo.1.gz +drwxr-xr-x root/root usr/man/ +drwxr-xr-x root/root usr/man/man1/ +-rw-r--r-- root/root usr/man/man1/funzip.1.gz +-rw-r--r-- root/root usr/man/man1/unzip.1.gz +-rw-r--r-- root/root usr/man/man1/unzipsfx.1.gz +-rw-r--r-- root/root usr/man/man1/zipgrep.1.gz +-rw-r--r-- root/root usr/man/man1/zipinfo.1.gz diff --git a/unzip/.md5sum b/unzip/.md5sum index 0a5b32bad..96220d8d9 100644 --- a/unzip/.md5sum +++ b/unzip/.md5sum @@ -2,5 +2,6 @@ cf3e3a98ff85d784c5d3843758645874 unzip-6.0-cve-2014-8139.patch 4f6a01093e9a05fe0d2916170d961e29 unzip-6.0-cve-2014-8140.patch 2a05a5d2f21511c5e393b62e4044e913 unzip-6.0-cve-2014-8141.patch +694e3c8ad965798a72569ff42101cc83 unzip-6.0-heap-overflow-infloop.patch 40ae64ba09670480195539bcdf92c0ef unzip-6.0-overflow.patch 62b490407489521db863b523a7f86375 unzip60.tar.gz diff --git a/unzip/Pkgfile b/unzip/Pkgfile index 110f4c3ee..e5ccbcd1b 100644 --- a/unzip/Pkgfile +++ b/unzip/Pkgfile @@ -7,6 +7,7 @@ version=6.0 release=6 source=(http://downloads.sourceforge.net/sourceforge/infozip/${name}${version//./}.tar.gz \ unzip-6.0-overflow.patch unzip-6.0-attribs-overflow.patch \ + unzip-6.0-heap-overflow-infloop.patch \ unzip-6.0-cve-2014-8139.patch \ unzip-6.0-cve-2014-8140.patch \ unzip-6.0-cve-2014-8141.patch) @@ -15,12 +16,13 @@ build() { cd ${name}${version//./} patch -p1 -i $SRC/unzip-6.0-overflow.patch patch -p1 -i $SRC/unzip-6.0-attribs-overflow.patch + patch -p1 -i $SRC/unzip-6.0-heap-overflow-infloop.patch patch -p1 -i $SRC/unzip-6.0-cve-2014-8139.patch patch -p1 -i $SRC/unzip-6.0-cve-2014-8140.patch patch -p1 -i $SRC/unzip-6.0-cve-2014-8141.patch sed -i 's/-O3//' unix/configure make -f unix/Makefile LOCAL_UNZIP="$CFLAGS" generic - make -f unix/Makefile prefix=$PKG/usr MANDIR=$PKG/usr/share/man/man1 install + make -f unix/Makefile prefix=$PKG/usr install ln -sf unzip $PKG/usr/bin/zipinfo } diff --git a/unzip/unzip-6.0-heap-overflow-infloop.patch b/unzip/unzip-6.0-heap-overflow-infloop.patch new file mode 100644 index 000000000..e2c27a519 --- /dev/null +++ b/unzip/unzip-6.0-heap-overflow-infloop.patch @@ -0,0 +1,103 @@ +From bdd4a0cecd745cb4825e4508b5bdf2579731086a Mon Sep 17 00:00:00 2001 +From: Petr Stodulka +Date: Mon, 14 Sep 2015 18:23:17 +0200 +Subject: [PATCH 1/3] upstream fix for heap overflow + +https://bugzilla.redhat.com/attachment.cgi?id=1073002 +--- + crypt.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/crypt.c b/crypt.c +index 784e411..a8975f2 100644 +--- a/crypt.c ++++ b/crypt.c +@@ -465,7 +465,17 @@ int decrypt(__G__ passwrd) + GLOBAL(pInfo->encrypted) = FALSE; + defer_leftover_input(__G); + for (n = 0; n < RAND_HEAD_LEN; n++) { +- b = NEXTBYTE; ++ /* 2012-11-23 SMS. (OUSPG report.) ++ * Quit early if compressed size < HEAD_LEN. The resulting ++ * error message ("unable to get password") could be improved, ++ * but it's better than trying to read nonexistent data, and ++ * then continuing with a negative G.csize. (See ++ * fileio.c:readbyte()). ++ */ ++ if ((b = NEXTBYTE) == (ush)EOF) ++ { ++ return PK_ERR; ++ } + h[n] = (uch)b; + Trace((stdout, " (%02x)", h[n])); + } +-- +2.4.6 + + +From 4b48844661ff9569f2ecf582a387d46a5775b5d8 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Mon, 14 Sep 2015 18:24:56 +0200 +Subject: [PATCH 2/3] fix infinite loop when extracting empty bzip2 data + +Bug: https://sourceforge.net/p/infozip/patches/23/ +--- + extract.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/extract.c b/extract.c +index 7134bfe..29db027 100644 +--- a/extract.c ++++ b/extract.c +@@ -2733,6 +2733,12 @@ __GDEF + int repeated_buf_err; + bz_stream bstrm; + ++ if (G.incnt <= 0 && G.csize <= 0L) { ++ /* avoid an infinite loop */ ++ Trace((stderr, "UZbunzip2() got empty input\n")); ++ return 2; ++ } ++ + #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) + if (G.redirect_slide) + wsize = G.redirect_size, redirSlide = G.redirect_buffer; +-- +2.4.6 + + +From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Tue, 22 Sep 2015 18:52:23 +0200 +Subject: [PATCH 3/3] extract: prevent unsigned overflow on invalid input + +Suggested-by: Stefan Cornelius +--- + extract.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/extract.c b/extract.c +index 29db027..b9ae667 100644 +--- a/extract.c ++++ b/extract.c +@@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk, + if (G.lrec.compression_method == STORED) { + zusz_t csiz_decrypted = G.lrec.csize; + +- if (G.pInfo->encrypted) ++ if (G.pInfo->encrypted) { ++ if (csiz_decrypted <= 12) { ++ /* handle the error now to prevent unsigned overflow */ ++ Info(slide, 0x401, ((char *)slide, ++ LoadFarStringSmall(ErrUnzipNoFile), ++ LoadFarString(InvalidComprData), ++ LoadFarStringSmall2(Inflate))); ++ return PK_ERR; ++ } + csiz_decrypted -= 12; ++ } + if (G.lrec.ucsize != csiz_decrypted) { + Info(slide, 0x401, ((char *)slide, + LoadFarStringSmall2(WrnStorUCSizCSizDiff), +-- +2.5.2