[INetCop Security Advisory] Buffer Overflow vulnerability in HTTP Fetcher Library.

From: dong-h0un yoU (xploitat_private)
Date: Sun Jan 05 2003 - 19:22:01 PST

  • Next message: Lukas Grunwald: "Longshine WLAN Access-Point LCS-883R VU#310201"

    	========================================
    	INetCop Security Advisory #2003-0x82-011
    	========================================
    
    
    * Title: Buffer Overflow vulnerability in HTTP Fetcher Library.
    
    
    0x01. Description
    
    
    HTTP Fetcher is a small library that downloads files via HTTP.
    More detailed information is
    http://cs.nmu.edu/~lhanson/http_fetcher/README.
    
    The library supports function as following.
    
    http://cs.nmu.edu/~lhanson/http_fetcher/docs/
    
    These mainly, is transplanted much to client.
    Of course, is transplanted on server or many programs according to necessity.
    If vulnerability exists in this library,
    it may deal very fatal damage in transplanted program.
    Yes, of course is so.
    HTTP Fetcher library is exposed to very fatal buffer overflow.
    And, It influences in other several programs.
    
    Next time, functions are escaping buffer overflow only.
    
    http_parseFilename();
    http_setReferer();
    http_setUserAgent();
    example> t=malloc(strlen(x)); strcpy(t,x);
    
    But, requestBuf devours together 'Referer buffer' and 'UserAgent buffer',
    URL that user inputs etc.. in http_fetch() function.
    So, because of requestBuf array, problem happens.
    
    See http_fetch() function in 'http_fetcher.c' code.
    
    http_fetch() function:
       __
        97                  sprintf(requestBuf, "GET %s %s\n", charIndex, HTTP_VERSION);
       105          strcat(requestBuf, host); // Here, URL buffer overflow.
       111                  strcat(requestBuf, referer); // Here, Referer buffer overflow.
       126                  strcat(requestBuf, userAgent); // Here, UserAgent buffer overflow.
       --
    
    They happen by strcat() function.
    
    
    0x02. Vulnerable Packages
    
    
    Vendor site: http://cs.nmu.edu/~lhanson/http_fetcher/
    
    http fetcher 1.0.1
    -http-fetcher-dev_1.0.1_i386.deb
    -http-fetcher_1.0.1_i386.deb
    -http_fetcher-1.0.1-1.i386.rpm
    -http_fetcher-1.0.1-1.src.rpm
    -http_fetcher-1.0.1.tar.gz
    +Linux
    +Other
    http fetcher 1.0.0
    -http_fetcher-1.0.0.tar.gz
    
    
    0x03. Exploit
    
    
    As this is different according to purpose that program is made out,
    can become exploit. There is very good target program of 'fetch'.
    He's playing client role. (http://cs.nmu.edu/~lhanson/fetch/)
    
    Because used dangerous http_fetch library,
    'fetch' program becomes exploit as following.
    
    bash$ ./0x82-test.sucksfetch.xpl
    target: "./fetch"
    len: 1135
    jmp addr: 0xbffffb98
    netcat 0 31337.
    Connected to 0.
    id
    uid=501(x82) gid=501(x82) groups=501(x82)
    exit
    bash$
    
    Hehe, we did not find actuality program to do exploit yet.
    'fetch' gives nothing to us.
    It's test only.
    
    
    0x04. Patch
    
    
    === http_fetcher.patch ===
    
    --- http_fetcher.c	Tue Jul 31 03:47:15 2001
    +++ http_fetcher.patch.c	Thu Jan  2 22:24:48 2003
    @@ -94,7 +94,7 @@
     		 *	request */ 
     		sprintf(requestBuf, "GET / %s\n", HTTP_VERSION);
     	else
    -		sprintf(requestBuf, "GET %s %s\n", charIndex, HTTP_VERSION);
    +		snprintf(requestBuf, sizeof(requestBuf)/4-1,"GET %s %s\n", charIndex, HTTP_VERSION);
     
     	/* Null out the end of the hostname if need be */
     	if(charIndex != NULL)
    @@ -102,13 +102,13 @@
     	/* Use Host: even though 1.0 doesn't specify it.  Some servers
     	 *	won't play nice if we don't send Host, and it shouldn't hurt anything */
     	strcat(requestBuf, "Host: ");
    -	strcat(requestBuf, host);
    +	strncat(requestBuf, host, sizeof(requestBuf)/4-1);
     	strcat(requestBuf, "\n");
     
     	if(!hideReferer && referer != NULL)	/* NO default referer */
     		{
     		strcat(requestBuf, "Referer: ");
    -		strcat(requestBuf, referer);
    +		strncat(requestBuf, referer, sizeof(requestBuf)/4-1);
     		strcat(requestBuf, "\n");
     		}
     
    @@ -123,7 +123,7 @@
     	else if(!hideUserAgent)
     		{
     		strcat(requestBuf, "User-Agent: ");
    -		strcat(requestBuf, userAgent);
    +		strncat(requestBuf, userAgent, sizeof(requestBuf)/4-1);
     		strcat(requestBuf, "\n");
     		}
     
    
    
    
    === eof ===
    
    
    P.S: Sorry, for my poor english.
    
    
    --
    By "dong-houn yoU" (Xpl017Elz), in INetCop(c) Security.
    
    MSN & E-mail: szoahc(at)hotmail(dot)com,
                  xploit(at)hackermail(dot)com
    
    INetCop Security Home: http://www.inetcop.org (Korean hacking game)
                 My World: http://x82.i21c.net
    
    GPG public key: http://wizard.underattack.co.kr/~x82/h0me/pr0file/x82.k3y
    --
    
    
    -- 
    _______________________________________________
    Get your free email from http://www.hackermail.com
    
    Powered by Outblaze
    



    This archive was generated by hypermail 2b30 : Mon Jan 06 2003 - 20:47:25 PST