首页 -> 安全研究

安全研究

安全漏洞
FreeBSD .login_conf 泄漏敏感文件内容漏洞

发布日期:2001-09-21
更新日期:2001-09-26

受影响系统:

FreeBSD FreeBSD 5.0-CURRENT
FreeBSD FreeBSD 4.4-RC
FreeBSD FreeBSD 4.3
FreeBSD FreeBSD 4.2
FreeBSD FreeBSD 4.1
不受影响系统:

FreeBSD FreeBSD 4.4-RELEASE
描述:

FreeBSD 支持 BSD "login class capability database"(登录分类能力数据库)。通常
/etc/login.conf中包含了一些相关的属性和能力的配置选项。FreeBSD也支持在每个用户
的主目录下创建一个文件.login_conf,这个文件允许用户自己定义登录时的一些选项,
例如显示欢迎信息、环境变量等等。

FreeBSD 所带的OpenSSH在处理.login_conf时并没有丢弃root权限,因此可能导致普通
用户通过设置.login_conf文件选项来读取任意系统文件。

有问题的代码如下(session.c):

        if (newcommand == NULL && !quiet_login && !options.use_login) {
                fname = login_getcapstr(lc, "copyright", NULL, NULL);
                if (fname != NULL && (f = fopen(fname, "r")) != NULL) {
                        while (fgets(buf, sizeof(buf), f) != NULL)
                                fputs(buf, stdout);
                                fclose(f);

和:

                f = fopen(login_getcapstr(lc, "welcome", "/etc/motd",
                    "/etc/motd"), "r");
[...]
                        while (fgets(buf, sizeof(buf), f))
                                fputs(buf, stdout);
                        fclose(f);

FreeBSD的login(1)程序调用libutil库中的auth_checknologin()函数来判断用户是否允许
登录,并显示nologin文件的内容。由于login是以root身份执行的,并且在显示文件内容
时没有丢弃root权限,因此如果用户在主目录下的.login_conf中将nologin文件指向某些
系统文件,用户登录时就会获取该文件的内容。

有问题的代码在:

        if (!rootlogin)
                auth_checknologin(lc);
[...]
        (void)setegid(pwd->pw_gid);
        (void)seteuid(rootlogin ? 0 : pwd->pw_uid);

<*来源:Przemyslaw Frasunek (venglin@freebsd.lublin.pl)
  链接:http://archives.neohapsis.com/archives/bugtraq/2001-09/0173.html
*>



测试方法:

警 告

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


1. 在用户目录下的~/.login_conf中设置如下语句:

default:\
:copyright=/etc/master.passwd:

或者

:welcome=/etc/master.passwd:

当使用ssh登录时,就会显示/etc/master.passwd的内容(服务器需提供了openssh服务)。

2. 在用户目录下的~/.login_conf中设置如下语句:

default:\
:nologin=/etc/master.passwd:

用户通过控制台或者telnet登录时将显示/etc/master.passwd的内容。
注意:这样将使得该用户无法登录进入系统。



建议:

临时解决方法:

如果您暂时无法升级,您可以禁止普通用户修改自己的~/.login_conf文件.
例如,对于用户test:

bash# cat /dev/null > ~test/.login_conf
bash# chflags schg ~test/.login_conf

这样test用户的.login_conf文件被清空并且他无法删除或者修改该文件。

厂商补丁:

升级到FreeBSD 4.4-RELEASE
或者通过CVS升级更新:
http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libutil/login_cap.c?rev=1.17.2.3&content-type=text/plain
FreeBSD将很快发布一个正式公告以及补丁。


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