一、漏洞简介
1、漏洞编号和类型
CVE-2018-15473 SSH 用户名(USERNAME)暴力枚举漏洞
2、漏洞影响范围
OpenSSH 7.7及其以前版本
3、漏洞利用方式
由于SSH本身的认证机制存在缺陷,导致攻击者可以使用字典,暴力枚举SSH存在的用户名(Username)
4、漏洞修复方式
升级openssh
二、漏洞原理及其利用分析
1、漏洞原理
参考国外文献:http://www.openwall.com/lists/oss-security/2018/08/15/5
观察下列openssh代码
87 static int
88 userauth_pubkey(struct ssh *ssh)
89 {
...
101 if (!authctxt->valid) {
102 debug2("%s: disabled because of invalid user", __func__);
103 return 0;
104 }
105 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||
106 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
107 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
108 fatal("%s: parse request failed: %s", __func__, ssh_err(r));
可以看出来,当用户不可用时,连接userauth_pubkey会直接返回,如果用户可用,则会进入下一个条件判断,调用fatal函数。所以在username可用于不可用两种情况下,可以看出来这个函数的返回是不同的
2、PoC原理
PoC地址:https://github.com/Rhynorater/CVE-2018-15473-Exploit
可以看下这段代码,这就是判断username是否可用的原理
try:
transport.auth_publickey(username, paramiko.RSAKey.generate(1024))
except BadUsername:
return (username, False)
except paramiko.ssh_exception.AuthenticationExcep