This attack targets the format string vulnerabilities in the syslog()
function. An attacker would typically inject malicious input in the format
string parameter of the syslog function. This is a common problem, and many
public vulnerabilities and associated exploits have been posted.
Attack Execution Flow
The attacker finds that he can inject data to the
format string parameter of Syslog().
The attacker craft a malicious input and inject it
into the format string parameter. From now on, the
attacker can exeute arbitrary code and do more
damage.
Attack Prerequisites
The format string argument of the Syslog function can be tainted with user
supplid data.
Typical Likelihood of Exploit
Likelihood: High
Methods of Attack
Injection
Examples-Instances
Description
Format string vulnerability in TraceEvent function for ntop before 2.1
allows remote attackers to execute arbitrary code by causing format
strings to be injected into calls to the syslog function, via (1) an
HTTP GET request, (2) a user name in HTTP authentication, or (3) a
password in HTTP authentication.
Related Vulnerabilities
CVE-2002-0412
Probing Techniques
If the source code of the application is available, an attacker can use
static analysis tools to spot a syslog vulnerability (a simple grep may also
work).
If the source code is not available, automated tools such as Fuzzer and
advanced Web Scanner can be used. If the tool supplied data reaches the
syslog's format string argument, the application under scrutiny may have
unexpected behavior.
If the source code is not available, a more complexe technique involve the
use of library and system call tracer combined with the use of binary
auditing tool such as IDA Pro. Reverse Engineering technique can be used to
find format string vulnerability in the syslog function call. For instance
it is possible to get the address of the buffer that is later used as the
format string when reading data
Solutions and Mitigations
The code should be reviewed for misuse of the Syslog function call. Manual
or automated code review can be used. The reviewer needs to ensure that all
format string functions are passed a static string which cannot be
controlled by the user and that the proper number of arguments are always
sent to that function as well. If at all possible, do not use the %n
operator in format strings. The following code shows a correct usage of
Syslog():
...
syslog(LOG_ERR, "%s", cmdBuf);
...
The following code shows a vulnerable usage of Syslog():
...
syslog(LOG_ERR, cmdBuf); // the buffer cmdBuff is taking user supplied
data.
...
Attack Motivation-Consequences
Run Arbitrary Code
Denial of Service
Privilege Escalation
Data Modification
Injection Vector
Untrusted user supplied data is the injection vector.
Payload
The maliciously crafted data can read from the stack if passed to the Syslog
function as a format String.
Activation Zone
The signature of the syslog function is as following : "void syslog(int
priority, const char *format, ...);"
A vulnerable usage would be : "syslog(LOG_ERR, cmdBuf);" where cmdBuf is a
user controlled data which leads to a format string vulnerability. The
activation zone is the format String argument which accepts user supplied
data.
Payload Activation Impact
The impacts of this attack can be execution of arbitrary code. Execution of
arbitary code can lead to many problems such as corruption of data, unauthorized
access, etc.
Vision and Technical Leadership provided by Cigital, Inc.
This Web site is hosted by The MITRE Corporation.
Copyright 2009, The MITRE Corporation. CAPEC and the CAPEC logo are trademarks of The MITRE Corporation.