Your message dated Tue, 24 May 2005 22:32:04 -0400 with message-id <[EMAIL PROTECTED]> and subject line Bug#310468: fixed in lbreakout2 2.5.2-2 has caused the attached Bug report to be marked as done.
This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what I am talking about this indicates a serious mail system misconfiguration somewhere. Please contact me immediately.) Debian bug tracking system administrator (administrator, Debian Bugs database) -------------------------------------- Received: (at submit) by bugs.debian.org; 23 May 2005 19:43:19 +0000 >From [EMAIL PROTECTED] Mon May 23 12:43:19 2005 Return-path: <[EMAIL PROTECTED]> Received: from inutil.org (vserver151.vserver151.serverflex.de) [193.22.164.111] by spohr.debian.org with esmtp (Exim 3.35 1 (Debian)) id 1DaIpa-0007KT-00; Mon, 23 May 2005 12:43:18 -0700 Received: from p548957a6.dip.t-dialin.net ([84.137.87.166] helo=localhost.localdomain) by vserver151.vserver151.serverflex.de with esmtpsa (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.50) id 1DaInW-0004qB-5M for [EMAIL PROTECTED]; Mon, 23 May 2005 21:41:11 +0200 Received: from jmm by localhost.localdomain with local (Exim 4.50) id 1DaIpK-0001hW-Aq; Mon, 23 May 2005 21:43:02 +0200 Content-Type: multipart/mixed; boundary="===============1670380155==" MIME-Version: 1.0 From: Moritz Muehlenhoff <[EMAIL PROTECTED]> To: Debian Bug Tracking System <[EMAIL PROTECTED]> Subject: lbreakout2: Multiple security problems in lbreakout X-Mailer: reportbug 3.11 Date: Mon, 23 May 2005 21:43:01 +0200 X-Debbugs-Cc: [EMAIL PROTECTED] Message-Id: <[EMAIL PROTECTED]> X-SA-Exim-Connect-IP: 84.137.87.166 X-SA-Exim-Mail-From: [EMAIL PROTECTED] X-SA-Exim-Scanned: No (on vserver151.vserver151.serverflex.de); SAEximRunCond expanded to false Delivered-To: [EMAIL PROTECTED] X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 (1.212-2003-09-23-exp) on spohr.debian.org X-Spam-Status: No, hits=-11.0 required=4.0 tests=BAYES_00,HAS_PACKAGE, X_DEBBUGS_CC autolearn=ham version=2.60-bugs.debian.org_2005_01_02 X-Spam-Level: This is a multi-part MIME message sent by reportbug. --===============1670380155== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline Package: lbreakout2 Severity: grave Tags: security patch Justification: user security hole [ Details are sparse about this one, if you come to the conclusion that this is not RC, then please lower severity, but I assume it is. ] [ Woody might be affected as well, I haven't checked that yet ] >From the 2.6beta changelog: - security issue fixed: bad sprintf/scanf calls could lead to crashes or potential security problems (05/02/14 U.H.) There is no further information and upstream's website is very sparse and there's no mailing list or anything like that, so I had a look at the rather largish diff between 2.5.2 and 2.6beta and reviewed it for possibly security relevant changes, which you can find attached. At least a buffer overflow in highscore handling (should be writable by arbitrary users) and the missing format strings in network multiplayer handling code seem exploitable as lbreakout runs as setgid games. Please review the diff and upload a fixed package to t-p-u, if you agree. Cheers, Moritz -- System Information: Debian Release: 3.1 APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.11 Locale: LANG=C, [EMAIL PROTECTED] (charmap=ISO-8859-15) --===============1670380155== Content-Type: text/x-c; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="lbreakout2-security.diff" diff -Naur lbreakout2-2.5.2/client/chart.c lbreakout2-2.6beta/client/chart.c --- lbreakout2-2.5.2/client/chart.c 2003-05-25 11:37:05.000000000 +0200 +++ lbreakout2-2.5.2/client/chart.c 2005-03-28 20:07:30.000000000 +0200 @@ -138,7 +138,7 @@ if ( aux[0] != '>' ) break; chart = calloc( 1, sizeof( Set_Chart ) ); /* get name: >>>name */ - fscanf( file, ">>>%s\n", setname ); + fscanf( file, ">>>%1023s\n", setname ); chart->name = strdup( setname ); /* entries */ chart_read_entries( file, file_name, chart ); @@ -234,7 +234,7 @@ /* open file */ file = fopen( file_name, "w" ); if ( !file ) { - fprintf( stderr, "??? Highscore chart loaded properly but cannot save?\n" ); + fprintf( stderr, "??? Highscore chart loaded properly but cannot save? (%s)\n",file_name ); return; } /* save all charts */ diff -Naur lbreakout2-2.5.2/client/client_handlers.c lbreakout2-2.6beta/client/client_handlers.c --- lbreakout2-2.5.2/client/client_handlers.c 2003-06-18 10:46:13.000000000 +0200 +++ lbreakout2-2.5.2/client/client_handlers.c 2005-02-16 22:07:28.000000000 +0100 @@ -146,7 +146,7 @@ /* extract ip and port and build a new socket out of it */ gui_edit_get_text( edit_server, server, 128, 0, -1 ); - snprintf( config.server, 64, server ); + snprintf( config.server, 64, "%s", server ); if ( !net_build_addr( &newaddr, server, 0 ) ) { client_printf_chatter( 1, "ERROR: address %s does not resolve", config.server ); return; diff -Naur lbreakout2-2.5.2/client/client_recv.c lbreakout2-2.6beta/client/client_recv.c --- lbreakout2-2.5.2/client/client_recv.c 2003-05-29 21:05:39.000000000 +0200 +++ lbreakout2-2.5.2/client/client_recv.c 2005-02-16 22:07:32.000000000 +0100 @@ -157,7 +157,7 @@ /* users */ case MSG_ADD_USER: num = msg_read_int32(); - snprintf( name, 16, msg_read_string() ); name[15] = 0; + snprintf( name, 16, "%s", msg_read_string() ); name[15] = 0; if ( msg_read_failed() ) break; client_add_user( num, name ); gui_list_update( @@ -223,8 +223,8 @@ client_transmit( CODE_BLUE, msglen, msgbuf ); break; } - snprintf( mp_peer_name, 15, msg_read_string() ); - snprintf( mp_levelset, 16, msg_read_string() ); + snprintf( mp_peer_name, 15, "%s", msg_read_string() ); + snprintf( mp_levelset, 16, "%s", msg_read_string() ); mp_diff = msg_read_int8(); mp_rounds = msg_read_int8(); mp_frags = msg_read_int8(); diff -Naur lbreakout2-2.5.2/client/comm.c lbreakout2-2.6beta/client/comm.c --- lbreakout2-2.5.2/client/comm.c 2005-01-13 21:02:27.000000000 +0100 +++ lbreakout2-2.5.2/client/comm.c 2005-03-28 16:04:37.000000000 +0200 @@ -237,7 +237,7 @@ break; case MSG_ADD_USER: i = msg_read_int32(); - snprintf( name, 16, msg_read_string() ); name[15] = 0; + snprintf( name, 16, "%s", msg_read_string() ); name[15] = 0; if ( msg_read_failed() ) break; client_add_user( i, name ); handled = 1; diff -Naur lbreakout2-2.5.2/client/editor.c lbreakout2-2.6beta/client/editor.c --- lbreakout2-2.5.2/client/editor.c 2003-05-18 19:22:11.000000000 +0200 +++ lbreakout2-2.5.2/client/editor.c 2005-02-16 22:07:28.000000000 +0100 @@ -639,12 +639,12 @@ strcpy( str, "" ); if ( edit_buttons[x][y] == BUTTON_EDIT_AUTHOR ) if ( enter_string( font, "Author's Name:", str, 24 ) ) { - snprintf( edit_cur_level->author, 31, str ); + snprintf( edit_cur_level->author, 31, "%s", str ); *full_update = 1; } if ( edit_buttons[x][y] == BUTTON_EDIT_NAME ) if ( enter_string( font, "Title:", str, 24 ) ) { - snprintf( edit_cur_level->name, 31, str ); + snprintf( edit_cur_level->name, 31, "%s", str ); *full_update = 1; } /* sel frame tile position */ diff -Naur lbreakout2-2.5.2/game/comm.c lbreakout2-2.6beta/game/comm.c --- lbreakout2-2.5.2/game/comm.c 2005-01-13 20:51:36.000000000 +0100 +++ lbreakout2-2.6beta/game/comm.c 2005-04-08 22:27:44.000000000 +0200 @@ -494,8 +494,8 @@ { char *ptr = msg + *pos; - snprintf( ptr, 16, level->name ); ptr[15] = 0; ptr += 16; - snprintf( ptr, 16, level->author); ptr[15] = 0; ptr += 16; + snprintf( ptr, 16, "%s", level->name ); ptr[15] = 0; ptr += 16; + snprintf( ptr, 16, "%s", level->author); ptr[15] = 0; ptr += 16; memcpy( ptr, level->bricks, 252 ); ptr += 252; memcpy( ptr, level->extras, 252 ); ptr += 252; @@ -507,8 +507,8 @@ { char *ptr = msg + *pos; - snprintf( level->name, 16, ptr ); ptr += 16; - snprintf( level->author, 16, ptr ); ptr += 16; + snprintf( level->name, 16, "%s", ptr ); ptr += 16; + snprintf( level->author, 16, "%s", ptr ); ptr += 16; memcpy( level->bricks, ptr, 252 ); ptr += 252; memcpy( level->extras, ptr, 252 ); ptr += 252; diff -Naur lbreakout2-2.5.2/game/levels.c lbreakout2-2.6beta/game/levels.c --- lbreakout2-2.5.2/game/levels.c 2004-09-25 19:41:06.000000000 +0200 +++ lbreakout2-2.5.2/game/levels.c 2005-05-15 13:39:51.000000000 +0200 @@ -74,7 +74,7 @@ if ( fname[0] != '/' ) /* keep global pathes */ snprintf( path, sizeof(path)-1, "%s/levels/%s", SRC_DIR, fname ); else - snprintf( path, sizeof(path)-1, fname ); + snprintf( path, sizeof(path)-1, "%s", fname ); if ( ( file = fopen( path, mode ) ) == 0 ) { fprintf( stderr, "couldn't open %s\n", path ); @@ -192,7 +192,7 @@ if ( levels->count == 0 ) return 0; set = salloc( 1, sizeof( LevelSet ) ); - snprintf( set->name, 20, name ); + snprintf( set->name, 20, "%s", name ); set->levels = salloc( levels->count, sizeof( Level* ) ); set->count = levels->count; set->version = version; @@ -344,10 +344,10 @@ if ( !strequal( "Level:", buffer ) ) goto failure; /* author */ if ( !next_line( file, buffer ) ) goto failure; - snprintf( level->author, 31, buffer ); + snprintf( level->author, 31, "%s", buffer ); /* level name */ if ( !next_line( file, buffer ) ) goto failure; - snprintf( level->name, 31, buffer ); + snprintf( level->name, 31, "%s", buffer ); /* bricks: */ if ( !next_line( file, buffer ) ) goto failure; if ( !strequal( "Bricks:", buffer ) ) goto failure; @@ -389,8 +389,8 @@ { int i, j; Level *level = calloc( 1, sizeof( Level ) ); - snprintf( level->author, 31, author ); - snprintf( level->name, 31, name ); + snprintf( level->author, 31, "%s", author ); + snprintf( level->name, 31, "%s", name ); /* empty arena */ for ( i = 0; i < EDIT_WIDTH; i++ ) for ( j = 0; j < EDIT_HEIGHT; j++ ) { diff -Naur lbreakout2-2.5.2/gui/gui_edit.c lbreakout2-2.6beta/gui/gui_edit.c --- lbreakout2-2.5.2/gui/gui_edit.c 2003-06-04 21:15:30.000000000 +0200 +++ lbreakout2-2.5.2/gui/gui_edit.c 2005-02-16 22:07:24.000000000 +0100 @@ -422,7 +422,7 @@ { if ( widget->type != GUI_EDIT ) return; /* copy text */ - snprintf( widget->spec.edit.buffer, widget->spec.edit.size + 1, text ); + snprintf( widget->spec.edit.buffer, widget->spec.edit.size + 1, "%s", text ); widget->spec.edit.length = strlen( widget->spec.edit.buffer ); /* reset */ /* first character in first line */ @@ -456,7 +456,7 @@ if ( length > limit ) length = limit; if ( length ) - snprintf( buffer, limit, widget->spec.edit.buffer ); + snprintf( buffer, limit, "%s", widget->spec.edit.buffer ); else buffer[0] = 0; return 1; --===============1670380155==-- --------------------------------------- Received: (at 310468-close) by bugs.debian.org; 25 May 2005 02:42:29 +0000 >From [EMAIL PROTECTED] Tue May 24 19:42:29 2005 Return-path: <[EMAIL PROTECTED]> Received: from newraff.debian.org [208.185.25.31] (mail) by spohr.debian.org with esmtp (Exim 3.35 1 (Debian)) id 1Dalqm-0000xG-00; Tue, 24 May 2005 19:42:28 -0700 Received: from katie by newraff.debian.org with local (Exim 3.35 1 (Debian)) id 1Dalgi-00081Y-00; Tue, 24 May 2005 22:32:04 -0400 From: Daniel Burrows <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] X-Katie: $Revision: 1.55 $ Subject: Bug#310468: fixed in lbreakout2 2.5.2-2 Message-Id: <[EMAIL PROTECTED]> Sender: Archive Administrator <[EMAIL PROTECTED]> Date: Tue, 24 May 2005 22:32:04 -0400 Delivered-To: [EMAIL PROTECTED] X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 (1.212-2003-09-23-exp) on spohr.debian.org X-Spam-Status: No, hits=-6.0 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER autolearn=no version=2.60-bugs.debian.org_2005_01_02 X-Spam-Level: Source: lbreakout2 Source-Version: 2.5.2-2 We believe that the bug you reported is fixed in the latest version of lbreakout2, which is due to be installed in the Debian FTP archive: lbreakout2-data_2.5.2-2_all.deb to pool/main/l/lbreakout2/lbreakout2-data_2.5.2-2_all.deb lbreakout2_2.5.2-2.diff.gz to pool/main/l/lbreakout2/lbreakout2_2.5.2-2.diff.gz lbreakout2_2.5.2-2.dsc to pool/main/l/lbreakout2/lbreakout2_2.5.2-2.dsc lbreakout2_2.5.2-2_i386.deb to pool/main/l/lbreakout2/lbreakout2_2.5.2-2_i386.deb A summary of the changes between this version and the previous one is attached. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to [EMAIL PROTECTED], and the maintainer will reopen the bug report if appropriate. Debian distribution maintenance software pp. Daniel Burrows <[EMAIL PROTECTED]> (supplier of updated lbreakout2 package) (This message was generated automatically at their request; if you believe that there is a problem with it please contact the archive administrators by mailing [EMAIL PROTECTED]) -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.7 Date: Tue, 24 May 2005 18:52:21 -0700 Source: lbreakout2 Binary: lbreakout2 lbreakout2-data Architecture: source i386 all Version: 2.5.2-2 Distribution: unstable Urgency: high Maintainer: Daniel Burrows <[EMAIL PROTECTED]> Changed-By: Daniel Burrows <[EMAIL PROTECTED]> Description: lbreakout2 - A ball-and-paddle game with nice graphics lbreakout2-data - A ball-and-paddle game with nice graphics (DATA FILES) Closes: 310468 Changes: lbreakout2 (2.5.2-2) unstable; urgency=high . * Apply backported security fixes for bad usage of s*printf/scanf. Thanks to Moritz Muehlenhoff for spotting the problem in the upstream changelog and for sifting through the diff to find the relevant fixes. (Closes: #310468) Files: 25c5fe1e3fcb0ec43af3d6d2c62ffd16 657 games optional lbreakout2_2.5.2-2.dsc b035faa2bde554f6b313313e7e9eea46 21172 games optional lbreakout2_2.5.2-2.diff.gz 118709987dc7204a4f140b905c741c56 2445372 games optional lbreakout2-data_2.5.2-2_all.deb 2a1690562a4852079827df86f68f12ca 226802 games optional lbreakout2_2.5.2-2_i386.deb -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFCk+Dpch6xsM7kSXgRAnAjAKDNrSjxAoIFc952i3UcNBuyR1rIIQCgx6ii ChXJOr5FHj9uKp73MgVwuKo= =sHRh -----END PGP SIGNATURE----- -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]