安全研究

安全漏洞
Linux SSH 1.2.27-8i.src.rpm允许任意用户登陆系统

发布日期:2000-05-11
更新日期:2000-05-11

受影响系统:

RedHat Linux RPM ssh-1.2.27-8i.src.rpm(打了含有错误补丁代码的版本)
(ftp://ftp.zedz.net/pub/cryptoI/incoming下的该RPM包)
不受影响系统:
SSH 1.2.27-7us.rpm
SSH 1.2.27-7i.rpm
描述:
有一个针对SSH-1.2.27的补丁程序,它包含一些错误的代码,没有正确的进行安全审核。
如果使用了这个补丁程序,将导致(本地或者远程)用户可以登陆进系统的任意拥有有效
登陆shell的账号。

这段错误代码在一个补丁文件ssh-1.2.27-pam.patch中:

        +#ifdef HAVE_PAM
        +  {
        +     retval = origretval;
        +     pampasswd = xstrdup(password);
        +     if (retval == PAM_SUCCESS)
        +        retval = pam_authenticate ((pam_handle_t *)pamh, 0);
        +     if (retval == PAM_SUCCESS || retval == PAM_AUTH_ERR)
        +        retval = pam_acct_mgmt ((pam_handle_t *)pamh, 0);
        +     xfree(pampasswd);
        +  }
        +#else /* HAVE_PAM */

在最后一个'if'判断上,不管pam_authenticate()函数调用是否成功,pam_acct_mgmt()
都会覆盖retval的内容,如果pam_acct_mgmt()调用成功,它将打开一个连接会话,返回
认证成功信号:


        +#ifdef HAVE_PAM
        +  {
        +    if (retval == PAM_SUCCESS)
        +      retval = pam_open_session ((pam_handle_t *)pamh, 0);
        +    return (retval == PAM_SUCCESS);
        +  }
        +#endif /* HAVE_PAM */

这段错误代码被插入到auth-passwd.c中的auth_password()代码的745-755行和
879-885行处。

值得注意的问题:
1) 即使一个账号已经被锁了,如果它有一个有效的登陆shell,仍然可以访问


2) 很多标准Linux系统的缺省/常用账号也可以被用来登陆进系统,例如:
  'gdm','postgres','mysql'

<* 来源:  John McNeely
           Dennis Edmonds in SSES, Inc.
           www.sses.net
*>           


测试方法:

警 告

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

如果/etc/ssh/sshd_config文件中包含了'PermitRootLogin=yes',允许root
远程登陆的话,任意用户只要提供一个非空的口令,就可以以root身份登陆进
系统。例如,如果在系统(pigpen)中使用了有问题的sshd包,其中有一个有效
账号(joe),那么远程攻击者可以登陆进这个账号:


% ssh -l joe pigpen
joe@pigpen's password: 123 <--- 输入任意非空口令
...                        <--- 进行错误的认证判断
[joe@pigpen]$              <--- 获得了shell权限

建议:

建议删除有问题的版本,重新安装1.2.27-7us版本。
或者使用OpenSSH , http://www.openssh.com

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