Subject: Re: kdemultimedia pkg and xine-lib security problems
To: Lubomir Sedlacik <salo@Xtrmntr.org>
From: Nuno Teixeira <nu@nunotex.freeshell.org>
List: netbsd-users
Date: 02/27/2005 20:50:37
Hello,
OK, thanks. I will wait for the pull up in 2004Q4.
Just one more question: this means that xine-lib package will appear at
200Q4 packages again?
Yours,
Nuno Teixeira
On Sun, Feb 27, 2005 at 09:42:40PM +0100, Lubomir Sedlacik wrote:
> On Sun, Feb 27, 2005 at 06:30:35PM +0000, Nuno Teixeira wrote:
> > I've updated my 2004Q4 via cvs today and when I tried to make a package
> > from multimedia/xine-lib I get the error:
> >
> > =================
> > ===> Checking for vulnerabilities in xine-lib-1rc6anb2
> > *** WARNING - remote-code-execution vulnerability in xine-lib-1rc6anb2 - see http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-1187 for more information ***
> > *** WARNING - remote-code-execution vulnerability in xine-lib-1rc6anb2 - see http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-1188 for more information ***
> > or define ALLOW_VULNERABLE_PACKAGES if this package is absolutely essential
> > *** Error code 1
> >
> > Stop.
> > make: stopped in /usr/pkgsrc/multimedia/xine-lib
> > *** Error code 1
> >
> > Stop.
> > make: stopped in /usr/pkgsrc/multimedia/xine-lib
> > =================
> >
> > I have audit-packages installed with pkg-vulnerabilities updated today.
> >
> > What I should do?
>
> update your pkg-vulnerabilities again and apply the attached patch or
> wait for the ticket #317 to be pulled up to the 2004Q4 branch later
> today. http://releng.netbsd.org/cgi-bin/req-pkgsrc.cgi?show=317
>
> regards,
>
> --
> -- Lubomir Sedlacik <salo@{NetBSD,Xtrmntr,silcnet}.org> --
> Index: Makefile
> ===================================================================
> RCS file: /cvsroot/pkgsrc/multimedia/xine-lib/Makefile,v
> retrieving revision 1.14.2.1
> diff -u -r1.14.2.1 Makefile
> --- Makefile 7 Jan 2005 01:22:20 -0000 1.14.2.1
> +++ Makefile 27 Feb 2005 20:20:43 -0000
> @@ -3,7 +3,7 @@
>
> .include "Makefile.common"
>
> -PKGREVISION= 2
> +PKGREVISION= 3
>
> .if ${MACHINE_ARCH} == "i386"
> DEPENDS+= win32-codecs>=011227:../../multimedia/win32-codecs
> Index: distinfo
> ===================================================================
> RCS file: /cvsroot/pkgsrc/multimedia/xine-lib/distinfo,v
> retrieving revision 1.9.2.1
> diff -u -r1.9.2.1 distinfo
> --- distinfo 7 Jan 2005 01:22:20 -0000 1.9.2.1
> +++ distinfo 27 Feb 2005 20:20:43 -0000
> @@ -22,3 +22,5 @@
> SHA1 (patch-av) = 56f462e6091a72e87544ece689557d60fbb749aa
> SHA1 (patch-ba) = a527975fe9675358090bddc1361b707aa122f89b
> SHA1 (patch-bb) = fcfdf5dae066837cb35e51a5d114c366a5b3a7b2
> +SHA1 (patch-bc) = c07129e89ed5b958c9361b864e227cc7569e4a33
> +SHA1 (patch-bd) = 2af09a00178b2cc499f98a454667e9dbfcc8e072
> Index: patches/patch-bc
> ===================================================================
> RCS file: patches/patch-bc
> diff -N patches/patch-bc
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-bc 27 Feb 2005 20:20:43 -0000
> @@ -0,0 +1,102 @@
> +$NetBSD$
> +
> +--- src/input/pnm.c 2003/12/12 22:53:15 1.20
> ++++ src/input/pnm.c 2004/12/15 12:53:36 1.21
> +@@ -205,16 +205,21 @@
> + char *data, int *need_response) {
> +
> + unsigned int chunk_size;
> +- int n;
> ++ unsigned int n;
> + char *ptr;
> +-
> ++
> ++ if( max < PREAMBLE_SIZE )
> ++ return -1;
> ++
> + /* get first PREAMBLE_SIZE bytes and ignore checksum */
> + _x_io_tcp_read (p->stream, p->s, data, CHECKSUM_SIZE);
> + if (data[0] == 0x72)
> + _x_io_tcp_read (p->stream, p->s, data, PREAMBLE_SIZE);
> + else
> + _x_io_tcp_read (p->stream, p->s, data+CHECKSUM_SIZE, PREAMBLE_SIZE-CHECKSUM_SIZE);
> +-
> ++
> ++ max -= PREAMBLE_SIZE;
> ++
> + *chunk_type = be2me_32(*((uint32_t *)data));
> + chunk_size = be2me_32(*((uint32_t *)(data+4)));
> +
> +@@ -222,7 +227,11 @@
> + case PNA_TAG:
> + *need_response=0;
> + ptr=data+PREAMBLE_SIZE;
> ++
> ++ if( max < 1 )
> ++ return -1;
> + _x_io_tcp_read (p->stream, p->s, ptr++, 1);
> ++ max -= 1;
> +
> + while(1) {
> + /* The pna chunk is devided into subchunks.
> +@@ -235,17 +244,29 @@
> + * if first byte is 'F', we got an error
> + */
> +
> ++ if( max < 2 )
> ++ return -1;
> + _x_io_tcp_read (p->stream, p->s, ptr, 2);
> ++ max -= 2;
> ++
> + if (*ptr == 'X') /* checking for server message */
> + {
> + xprintf(p->stream->xine, XINE_VERBOSITY_DEBUG, "input_pnm: got a message from server:\n");
> ++ if( max < 1 )
> ++ return -1;
> + _x_io_tcp_read (p->stream, p->s, ptr+2, 1);
> ++ max -= 1;
> +
> + /* two bytes of message length*/
> + n=be2me_16(*(uint16_t*)(ptr+1));
> +
> + /* message itself */
> ++ if( max < n )
> ++ return -1;
> + _x_io_tcp_read (p->stream, p->s, ptr+3, n);
> ++ max -= n;
> ++ if( max < 1 )
> ++ return -1;
> + ptr[3+n]=0;
> + xprintf(p->stream->xine, XINE_VERBOSITY_DEBUG, "%s\n", ptr+3);
> + return -1;
> +@@ -265,10 +286,15 @@
> + }
> + if (*ptr != 0x4f) break;
> + n=ptr[1];
> +- _x_io_tcp_read (p->stream, p->s, ptr+2, n);
> ++ if( max < n )
> ++ return -1;
> ++ _x_io_tcp_read (p->stream, p->s, ptr+2, n);
> + ptr+=(n+2);
> ++ max-=n;
> + }
> + /* the checksum of the next chunk is ignored here */
> ++ if( max < 1 )
> ++ return -1;
> + _x_io_tcp_read (p->stream, p->s, ptr+2, 1);
> + ptr+=3;
> + chunk_size=ptr-data;
> +@@ -278,11 +304,11 @@
> + case PROP_TAG:
> + case MDPR_TAG:
> + case CONT_TAG:
> +- if (chunk_size > max) {
> ++ if (chunk_size > max || chunk_size < PREAMBLE_SIZE) {
> + xprintf(p->stream->xine, XINE_VERBOSITY_DEBUG, "error: max chunk size exeeded (max was 0x%04x)\n", max);
> ++#ifdef LOG
> + /* reading some bytes for debugging */
> + n=_x_io_tcp_read (p->stream, p->s, &data[PREAMBLE_SIZE], 0x100 - PREAMBLE_SIZE);
> +-#ifdef LOG
> + xine_hexdump(data,n+PREAMBLE_SIZE);
> + #endif
> + return -1;
> Index: patches/patch-bd
> ===================================================================
> RCS file: patches/patch-bd
> diff -N patches/patch-bd
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-bd 27 Feb 2005 20:20:43 -0000
> @@ -0,0 +1,27 @@
> +$NetBSD$
> +
> +--- src/input/libreal/real.c 2004/09/08 15:09:30 1.19
> ++++ src/input/libreal/real.c 2004/12/15 12:53:46 1.20
> +@@ -604,6 +604,8 @@
> + return (n <= 0) ? 0 : n+12;
> + }
> +
> ++//! maximum size of the rtsp description, must be < INT_MAX
> ++#define MAX_DESC_BUF (20 * 1024 * 1024)
> + rmff_header_t *real_setup_and_get_header(rtsp_t *rtsp_session, uint32_t bandwidth) {
> +
> + char *description=NULL;
> +@@ -652,6 +654,13 @@
> + else
> + size=atoi(rtsp_search_answers(rtsp_session,"Content-length"));
> +
> ++ if (size > MAX_DESC_BUF) {
> ++ printf("real: Content-length for description too big (> %uMB)!\n",
> ++ MAX_DESC_BUF/(1024*1024) );
> ++ xine_buffer_free(buf);
> ++ return NULL;
> ++ }
> ++
> + if (!rtsp_search_answers(rtsp_session,"ETag"))
> + lprintf("real: got no ETag!\n");
> + else
--
SDF Public Access UNIX System - http://sdf.lonestar.org