xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

FreeBSD 4.4-RC中的OpenSSH存在漏洞


发布时间:2001-09-21
更新时间:2001-09-21
严重程度:
威胁程度:本地管理员权限
错误类型:设计错误
利用方式:服务器模式

受影响系统
FreeBSD 4.4-RC 和以前版本
详细描述
来自FreeBSD 4.4-RC 和以前版本中OpenSSH在处理login程序时没有丢弃
权利,问题存在于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);

用户可以在~/.login_conf中定义如下来读取系统任意文件:

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

或者

:welcome=/etc/master.passwd:

而login(1)是SUID程序并通过telnetd派生,也存在此问题:

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

在检查nologin时候使用超级用户权利,auth_checklogin()是libutil函数用来
显示nologin文件,用户可以通过定义如下来读取系统任意文件:

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

测试代码
见描述部分。

解决方案
使用补丁:

http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libutil/login_cap.c
?rev=1.17.2.3&content-type=text/plain

4.4-REL版本将不存在此漏洞。

相关信息
Przemyslaw Frasunek (venglin@freebsd.lublin.pl)