Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

   


   


   

















      :: Security-alerts
Security-Alerts mailing list archive (security-alerts@yandex-team.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[security-alerts] Fwd: [Full-disclosure] ProFTPD mod_tls pre-authentication buffer overflow



  !

The vulnerability could allow a remote un-authenticated attacker to gain 
root ...  ProFTPD 1.3.0a is still  vulnerable.


----------  Forwarded message  ----------

Subject: [Full-disclosure] ProFTPD mod_tls pre-authentication buffer overflow
Date: Tuesday 28 November 2006 11:13
From: research@xxxxxxxx
To: full-disclosure@xxxxxxxxxxxxxxxxx
Cc: bugtraq@xxxxxxxxxxxxxxxxx

Name:         ProFTPD mod_tls pre-authentication buffer overflow
Vendor:       http://www.proftpd.org
Release date: 28 Nov, 2006
Author:       Evgeny Legerov <research@xxxxxxxx>

I. DESCRIPTION

A remote buffer overflow vulnerability has been found in mod_tls module of
ProFTPD server.
The vulnerability could allow a remote un-authenticated attacker to gain root
privileges.

II. DETAILS

Let's have a look at the code (ProFTPD version 1.3.0):

contrib/mod_tls.c:
"""
static char *tls_x509_name_oneline(X509_NAME *x509_name) {
  static char buf[256] = {'\0'};

  /* If we are using OpenSSL 0.9.6 or newer, we want to use
 * X509_NAME_print_ex()
   * instead of X509_NAME_oneline().
   */

#if OPENSSL_VERSION_NUMBER < 0x000906000L
  memset(&buf, '\0', sizeof(buf));
  return X509_NAME_oneline(x509_name, buf, sizeof(buf));
#else

  /* Sigh...do it the hard way. */
  BIO *mem = BIO_new(BIO_s_mem());
  char *data = NULL;
  long datalen = 0;
  int ok;

  if ((ok = X509_NAME_print_ex(mem, x509_name, 0, XN_FLAG_ONELINE)))
[1]  datalen = BIO_get_mem_data(mem, &data);

  if (data) {
    memset(&buf, '\0', sizeof(buf));
[2] memcpy(buf, data, datalen);
    buf[datalen] = '\0';
    buf[sizeof(buf)-1] = '\0';

    BIO_free(mem);
    return buf;
  }

  BIO_free(mem);
  return NULL;
#endif /* OPENSSL_VERSION_NUMBER >= 0x000906000 */
}
"""

The value of 'datalen' parameter is fully controlled by us (see [1]).
On line [2] we will be able to overflow the 'buf' buffer with our data.

III. VENDOR RESPONSE

Vendor has been notified on Nov 16, 2006 but ProFTPD 1.3.0a is still
 vulnerable.

IV. CREDIT

Discovered by Evgeny Legerov.

The vulnerability is a part of VulnDisco Pack Professional since Jan, 2006.

-------------------------------------------------------

-- 
Dimitry

         



 




Copyright © Lexa Software, 1996-2009.