[H20020304]: Remotely exploitable format string vulnerability inntop

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

 




        h o l o g r a m  |  s e c u r i t y  |  a d v i s o r y
_______________________________________________________________________


                       Advisory ID : H20020304
                          Software : ntop
                          Synopsis : Remotely exploitable format
                                     string vulnerability in ntop.
                            Vendor : Luca Deri <www.ntop.org>
                          Verified : Version 2.0
                            Author : hologram <holo@brained.org>

_______________________________________________________________________


| Overview |-----------------------------------------------------------

ntop is a UNIX tool that shows the network usage, similar to what the
popular top UNIX command does on the system level. A format string
vulnerability has been discovered on the programmatic level and
is currently known to affect the UNIX version, however, the Windows
port of the program remains untested. The vulnerability allows
for remote arbitrary code execution.

| Vulnerability |------------------------------------------------------

The format string vulnerability lies within the traceEvent() function
which is declared as:

void traceEvent(int eventTraceLevel, char* file,
  int line, char * format, ...)

in the file util.c. The third argument, as is apparent, is a format
string to be later manipulated by the traceEvent() call.

Further into the code, the following is made visible:

...

  va_list va_ap;
  va_start (va_ap, format);

...

    char buf[BUF_SIZE];

...

#ifdef WIN32
      /* Windows lacks of vsnprintf */
      vsprintf(buf, format, va_ap);
#else
      vsnprintf(buf, BUF_SIZE-1, format, va_ap);
#endif

      if(!useSyslog) {  // syslog() logging is not enabled
	printf(buf);  // vulnerability

...

#ifndef WIN32
      else {  // syslog() logging is enabled
#if 0
	switch(traceLevel) {
	case 0:
	  syslog(LOG_ERR, buf);  // vulnerability
	  break;
	case 1:
	  syslog(LOG_WARNING, buf);  // vulnerability
	  break;
	case 2:
	  syslog(LOG_NOTICE, buf);  // vulnerability
	  break;
	default:
	  syslog(LOG_INFO, buf);   // vulnerability
	  break;
	}
#else
	syslog(LOG_ERR, buf);

...

Obviously, a call such as syslog(LOG_ERR, buf) should be replaced
with syslog(LOG_ERR, "%s", buf) to remove the insecurity.

The bug can be exploited whether or not syslog() logging is enabled
because of the erroneous printf(buf) call, as well.

One of the simplest points of entry I have determined is if the -w
option was specified when ntop was ran, which allows web access
to the ntop information. A HTTP request of the following:

GET /%s%s%s HTTP/1.0

will cause program termination (the HTTP deamon for ntop is normally
listening on port 3000).

The vulnerability does allow remote execution of arbitrary commands,
and if concerned, an appropriate fix should be quickly applied.


-------------------------------| Copyright 2002. All rights reserved. |



        h o l o g r a m  |  s e c u r i t y  |  a d v i s o r y

_______________________________________________________________________





                       Advisory ID : H20020304

                          Software : ntop

                          Synopsis : Remotely exploitable format

                                     string vulnerability in ntop.

                            Vendor : Luca Deri <www.ntop.org>

                          Verified : Version 2.0

                            Author : hologram <holo@brained.org>



_______________________________________________________________________





| Overview |-----------------------------------------------------------



ntop is a UNIX tool that shows the network usage, similar to what the

popular top UNIX command does on the system level. A format string

vulnerability has been discovered on the programmatic level and

is currently known to affect the UNIX version, however, the Windows

port of the program remains untested. The vulnerability allows

for remote arbitrary code execution.



| Vulnerability |------------------------------------------------------



The format string vulnerability lies within the traceEvent() function

which is declared as:



void traceEvent(int eventTraceLevel, char* file,

  int line, char * format, ...)



in the file util.c. The third argument, as is apparent, is a format

string to be later manipulated by the traceEvent() call.



Further into the code, the following is made visible:



...



  va_list va_ap;

  va_start (va_ap, format);



...



    char buf[BUF_SIZE];



...



#ifdef WIN32

      /* Windows lacks of vsnprintf */

      vsprintf(buf, format, va_ap);

#else

      vsnprintf(buf, BUF_SIZE-1, format, va_ap);

#endif



      if(!useSyslog) {  // syslog() logging is not enabled

	printf(buf);  // vulnerability



...



#ifndef WIN32

      else {  // syslog() logging is enabled

#if 0

	switch(traceLevel) {

	case 0:

	  syslog(LOG_ERR, buf);  // vulnerability

	  break;

	case 1:

	  syslog(LOG_WARNING, buf);  // vulnerability

	  break;

	case 2:

	  syslog(LOG_NOTICE, buf);  // vulnerability

	  break;

	default:

	  syslog(LOG_INFO, buf);   // vulnerability

	  break;

	}

#else

	syslog(LOG_ERR, buf); 



...



Obviously, a call such as syslog(LOG_ERR, buf) should be replaced

with syslog(LOG_ERR, "%s", buf) to remove the insecurity.



The bug can be exploited whether or not syslog() logging is enabled

because of the erroneous printf(buf) call, as well.



One of the simplest points of entry I have determined is if the -w

option was specified when ntop was ran, which allows web access

to the ntop information. A HTTP request of the following:



GET /%s%s%s HTTP/1.0



will cause program termination (the HTTP deamon for ntop is normally

listening on port 3000).



The vulnerability does allow remote execution of arbitrary commands,

and if concerned, an appropriate fix should be quickly applied.





-------------------------------| Copyright 2002. All rights reserved. |




[Index of Archives]     [Linux Security]     [Netfilter]     [PHP]     [Yosemite News]     [Linux Kernel]

  Powered by Linux