Date: Tue, 5 Feb 2002 19:05:30 +0000 From: biometrix <bio.metrix@gte.net> To: audit@freebsd.org Subject: tmpfile() libc call causes buffer overflow? Message-ID: <20020207010159.EFLX12982.out008.verizon.net@there>
next in thread | raw e-mail | index | archive | help
I found if I altered TMPDIR exported variable to an a long string (X50 "G") /usr/bin/pr would exit with a segmentation fault. export TMPDIR=`perl -e 'print "G" x 50'` bash-2.05# pr Cannot defer diagnostic messages Segmentation fault (core dumped) The code executed just before the segmentation fault is : if ((err = tmpfile()) == NULL) { (void)fputs("Cannot defer diagnosticm essages\n",stderr); return(1); } In : /usr/src/lib/libc/stdio/tmpfile.c there is a call for "tmpdir = getenv("TMPDIR");" so it returns a filename based on the enviroment variable "TMPDIR" so the result of tmpfile() can be poisoned by altering TMPDIR ? I tested it using most of the code found in "tmpfile.c" and got the result: ./test GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/tmp.XXXXXX gdb says the error occurs in: #0 0x280dca59 in __sfvwrite () from /usr/lib/libc.so.4 when pr crashes and the core file contains the string: strings pr.core | grep -i tmp GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/tmp.XXXXXX GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/tmp.GIvbJl TMPDIR /tmp TMPDIR=GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG pr is the only binary I can find in the source tree that uses the tmpfile() call so cannot test against anything else. Am I incorrect that this problem is caused by the getenv() for TMPDIR in tmpfile.c? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020207010159.EFLX12982.out008.verizon.net>