An input validation error that allows for arbitrary command execution and a buffer overflow exist in Greed 0.81p.
e30923d99ec472108172de0dad85a10cd5cd9e6a8d7e7de0283bcf056e33a5fa
From djb@cr.yp.to Wed Dec 15 14:23:11 2004
Date: 15 Dec 2004 08:31:43 -0000
From: D. J. Bernstein <djb@cr.yp.to>
To: securesoftware@list.cr.yp.to, Anoakie.Turner@asu.edu, trevor@freebsd.org
Subject: [remote] [control] greed 0.81p DownloadLoop overflows COMMAND;
DownloadLoop does not check for nasty characters
Manigandan Radhakrishnan, a student in my Fall 2004 UNIX Security Holes
course, has discovered two remotely exploitable security holes in ``Get
and Resume Elite Edition'' (greed), an FTP/HTTP downloading tool. I'm
publishing this notice, but all the discovery credits should be assigned
to Radhakrishnan.
You are at risk if you take a GRX file list from an email message (or a
web page or any other source that could be controlled by an attacker)
and feed it through greed. Whoever provides that file list then has
complete control over your account: he can read and modify your files,
watch the programs you're running, etc.
A GRX file list includes local file names; local file names are
dangerous in a much more obvious way, and presumably are checked by the
user. These attacks work even if the local file names are innocent. The
greed documentation does not tell users to check the remote file names.
Proof of concept: On an x86 computer running FreeBSD 4.10, as root, type
cd /usr/ports/ftp/greed
make install
to download and compile the greed program, version 0.81p (latest ports
version). Then, as any user, save the file 68-1.grx attached to this
message, and type
greed -T -G68-1.grx -D0
with the unauthorized result that a file matching EXPLOIT* is created in
the current directory. (I tested this with a 613-byte environment, as
reported by printenv | wc -c; beware that 68-1.grx is sensitive to the
environment size.) 68-2.grx is similar, but uses a different bug, and
has the unauthorized result of removing a file named x in the current
directory.
Here are the bugs. First, in main.c, DownloadLoop() uses strcat() to
copy an input filename to the end of a 128-byte COMMAND array. Second,
DownloadLoop() passes the input filename to system() without checking
for special characters such as semicolons.
---D. J. Bernstein, Associate Professor, Department of Mathematics,
Statistics, and Computer Science, University of Illinois at Chicago
[ Part 2, Text/PLAIN (charset: unknown-8bit) 4 lines. ]
[ Unable to print this part. ]
[ Part 3, Text/PLAIN 5 lines. ]
[ Unable to print this part. ]