首页 -> 安全研究

安全研究

安全漏洞
FreeBSD-SA-00:54 fingerd泄漏系统文件

发布日期:2000-10-16
更新日期:2000-10-16

受影响系统:
FreeBSD 4.1.1-RELEASE
不受影响系统:
FreeBSD 4.1.1-STABLE (2000-10-05以后版本)
FreeBSD 4.1-RELEASE  
FreeBSD 4.0-RELEASE
FreeBSD 3.5.1-RELEASE
FreeBSD 4.1-STABLE
描述:
CVE     ID : CVE-2000-0915
BUGTRAQ ID : 1803

FreeBSD 4.4.1-RELEASE所带的fingerd增加了一些代码,允许程序将管理员指定的文件
发送给特定的finger请求。然而,这部分代码也导致攻击者可以直接指定文件名发送
finger请求,从而获取该文件内容。

通常finger守护进程是以'nobody'身份运行,因此攻击者不能访问敏感文件,例如
"/etc/master.passwd"等等,但是可以访问任何'nobody'用户有权读取的文件,这可能
泄漏一些系统的内部信息,并为攻击者所利用来进行进一步的攻击。

如果该服务器上运行web服务时也使用'nobody'身份,就可能导致攻击者查看web服务器
的内部web数据,例如web服务器的口令文件,cgi程序的源代码。

<* 来源: NIIMI Satoshi (sa2c@and.or.jp)
          FreeBSD Security Advisory: FreeBSD-SA-00:54.fingerd
*>

测试方法:

警 告

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

$ finger /patch/to/file@vul.freebsd.host

建议:
临时解决方法:

NSFOCUS建议您在没有升级程序之前按照FreeBSD安全公告中的方法去做:

在/etc/inetd.conf中禁止finger服务。

确保该文件中包含finger的行被注释成如下所示:

#finger  stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

在使用IPv6连接的系统,则应该这样注释:

#finger stream  tcp6    nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

解决方法:

您可以采用下列方法中的任意一种:

1) 将您的有问题的FreeBSD系统升级到正确日期后的4.1.1-STABLE版本

2) 使用下面的补丁程序并且重建fingerd二进制程序

您可以保存这则公告到一个文件,或者从下列地址下载补丁以及PGP签名文件,并使用
您的PGP工具来验证签名。

ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:54/fingerd.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:54/fingerd.patch.asc

然后这样操作:

# cd /usr/src/usr.bin/finger
# patch -p < /path/to/patch_or_advisory
# make all install
# cd /usr/src/libexec/fingerd
# make all install

针对4.1.x系统的补丁如下:

    Index: finger.c
    ===================================================================
    RCS file: /home/ncvs/src/usr.bin/finger/finger.c,v
    retrieving revision 1.15.2.3
    retrieving revision 1.21
    diff -u -r1.15.2.3 -r1.21
    --- finger.c    2000/09/15 21:51:00    1.15.2.3
    +++ finger.c    2000/10/05 15:56:13    1.21
    @@ -293,6 +293,16 @@
             goto net;

         /*
    +     * Mark any arguments beginning with '/' as invalid so that we
    +     * don't accidently confuse them with expansions from finger.conf
    +     */
    +    for (p = argv, ip = used; *p; ++p, ++ip)
    +        if (**p == '/') {
    +        *ip = 1;
    +        warnx("%s: no such user", *p);
    +        }
    +
    +    /*
          * Traverse the finger alias configuration file of the form
          * alias:(user|alias), ignoring comment lines beginning '#'.
          */
    @@ -323,11 +333,11 @@
          * gathering the traditional finger information.
          */
         if (mflag)
    -        for (p = argv; *p; ++p) {
    -            if (**p != '/' || !show_text("", *p, "")) {
    +        for (p = argv, ip = used; *p; ++p, ++ip) {
    +            if (**p != '/' || *ip == 1 || !show_text("", *p, "")) {
                     if (((pw = getpwnam(*p)) != NULL) && !hide(pw))
                         enter_person(pw);
    -                   else
    +                else if (!*ip)
                         warnx("%s: no such user", *p);
                 }
             }

浏览次数:9049
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障