Lucene search
K

iso9660handler.txt

🗓️ 22 Mar 2005 00:00:00Reported by Michal ZalewskiType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 25 Views

Number of kernel-level range checking flaws in ISO9660 filesystem handler (and Rock Ridge / Juliet extensions) in Linux up to and including 2.6.11. Bugs range from DoS conditions to potentially exploitable memory corruption. Most flaws expected to be fixed in Linux 2.6.12, but may take some time

Code
`Good morning,  
  
There appears to be a fair number of kernel-level range checking flaws in  
ISO9660 filesystem handler (and Rock Ridge / Juliet extensions) in Linux  
up to and including 2.6.11. These bugs range from DoS conditions to  
potentially exploitable memory corruption - all this whenever a specially  
crafted filesystem is mounted or directories are examined.  
  
Most apparent flaws are expected to be fixed in Linux 2.6.12 (rc to show  
up by tomorrow or so), although, as per Linus words, "that code is  
horrid", and it may take some time to work out all the issues.  
  
The impact is not dramatic, but there are two obvious ways such flaws can  
be used to benefit remote attackers:  
  
1) Bugs in removable media filesystems may be used to automatically  
compromise any system whose owner decided to examine a newly acquired  
CD-ROM, even if extreme caution is observed (that is, autorun is  
disabled, and no files are executed).  
  
2) For all types of filesystems, such problems can be additionally used  
to subvert forensic analysis efforts. Disk images from compromised  
machine may infect forensic examiner's system and alter results,  
or simply render the machine unusable.  
  
Attached is a trivial fuzz script that can be used to test fs drivers  
against most obvious fault conditions. With little effort, it can be  
further altered to test filesystems other than ISO9660, and OSes other  
than Linux.  
  
Regards,  
Michal Zalewski  
  
Obligatory plug: http://lcamtuf.coredump.cx/silence/  
  
  
#!/bin/bash  
  
cd /tmp || exit 1  
  
echo '[*] Compiling mangler...'  
  
cat >mangle.c <<_EOF_  
char buf[10240];  
main() {  
int i,x;  
srand(time(0) ^ getpid());  
while ( (i = read(0,buf,sizeof(buf))) > 0) {  
x = rand() % (i/20);  
while (x--) buf[rand() % i] = rand();  
write(1,buf,i);  
}  
}  
_EOF_  
  
gcc -O3 mangle.c -o mangle || exit 1  
rm -f mangle.c  
  
echo '[*] Preparing ISO master (feel free to alter this code)...'  
  
mkdir cd_dir || exit 1  
cd cd_dir  
  
CNT=0  
while [ "$CNT" -lt "200" ]; do  
mkdir A; cd A  
CNT=$[CNT+1]  
done  
  
cd /tmp/cd_dir  
  
A=`perl -e '{print "A"x255}' 2>/dev/null`  
CNT=0  
while [ "$CNT" -lt "3" ]; do  
mkdir "$A"; cd "$A"  
CNT=$[CNT+1]  
done  
  
cd /tmp  
  
echo '[*] Creating image (alter filesystem or parameters as needed)...'  
  
mkisofs -U -R -J -o cd.iso cd_dir 2>/dev/null || exit 1  
rm -rf cd_dir  
  
echo '[*] STRESS TEST PHASE...'  
  
while :; do   
DIR="/tmp/cdtest-$$-$RANDOM"  
mkdir "$DIR"  
dmesg -c 2>/dev/null  
cat cd.iso | ./mangle >cd_mod.iso  
mount -t iso9660 -o loop,ro /tmp/cd_mod.iso "$DIR" 2>/dev/null  
# ls -lAR "$DIR" - Uncomment if you like when it HURTS...  
umount "$DIR" 2>/dev/null  
rm -rf "$DIR" 2>/dev/null  
FAULT=`dmesg | grep -Ei 'oops|unable to handle'`  
test "$FAULT" = "" || break  
done  
  
dmesg | tail -30  
  
echo '[+] Something found (/tmp/cd-mod.iso)...'  
  
rm -f cd.iso mangle  
exit 0  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation