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

2019-06-09

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 验证截图

执行命令

获得shell

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服务均处于受影响的版本范围。该漏洞影响范围有限。

0x05 修复建议

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

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

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

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

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

0x06 时间线

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

2018-10-16 360CERT发布预警报告

2018-10-17 360CERT发布分析报告

0x07 参考链接

  1. libssh官方更新

    [https://www.libssh.org/2018/10/16/libssh-0-8-4-and-0-7-6-security-and-bugfix-release/]

  2. libssh修复patch

    [https://www.libssh.org/security/patches/stable-0.6_CVE-2018-10933.jmcd.patch01.txt]

  3. libssh CVE-2018-10933说明

    [https://www.libssh.org/security/advisories/CVE-2018-10933.txt]

  4. 360CERT预警报告

    [https://cert.360.cn/warning/detail?id=2c98df690f55f968ae4a9c582bc89e79]

推荐阅读:

长按下方二维码关注360CERT!谢谢你的关注!

注:360CERT官方网站提供《libssh CVE-2018-10933 身份验证绕过漏洞分析报告》完整预警详情,点击阅读原文

相关文章

CVE-2018-1111复现环境搭建与dhcp命令注入

2019-09-10
前言最近留意到CVE-2018-1111这个洞,关于dhcp命令注入,便想复现一波.DHCP是一个局域网的网络协议,主要用于内部网络动...

CVE-2018-1111复现环境搭建与dhcp命令注入

2019-09-02
前言最近留意到CVE-2018-1111这个洞,关于dhcp命令注入,便想复现一波.DHCP是一个局域网的网络协议,主要用于内部网络动...

CVE-2018-4990 Acrobat Reader堆内存越界访问释放漏洞分析

2019-06-28
样本MD5bd23ad33accef14684d42c32769092a0漏洞简介CVE-2018-4990是Adobe在2018年5月修复的一个Adobe DC系列PDF阅读...

CVE-2018-11776(Struts 2/S2-057)、GhostScript及UEditor漏洞应急响应公告

2019-06-19
CVE编号CVE-2018-11776漏洞影响此漏洞导致攻击者可以通过构造恶意请求执行系统命令获取服务器权限,威胁服务器安全.受影响...

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

2019-06-09
0x00 事件背景2018-10-16 libssh发布更新公告旨在解决CVE-2018-10933的问题libssh版本0.6及更高版本在服务端代码中具有身份验证...

CVE-2018-0798漏洞研究

2019-06-02
QAX A-TEAM漏洞介绍:下图为CVE-2018-0798的漏洞公告,描述比较简略:Office 2007、Office 2010、Office 2013、Office 2016中...

CVE-2018-4878 Flash 0day漏洞攻击样本解析

2019-05-25
0day CVE-2018-487漏洞利用代码被嵌入到Office文档中,样本使用Excel文档为载体,内嵌了一个动画用于加载其中恶意的Flash组件...

CVE-2018-1111复现

2019-05-24
近日,红帽官方发布了安全更新,修复了编号为CVE-2018-1111的远程代码执行漏洞,攻击者可以通过伪造DHCP服务器发送响应包,...

CVE-2018-14847 简单利用

2019-05-22
Baines针对CVE-2018-14847发布了一段新的概念验证(PoC)代码,实现了在受漏洞影响的MikroTik路由器上的远程代码执行.影响...

Office 0day(CVE-2018-0802与2017-11882)漏洞分析与利用

2019-04-13
CVE-2018-0802危险等级: 高危漏洞类型: 任意代码执行影响版本: Microsoft Office 2007 Service Pack3 Microsoft Office 2010 ...

随机推荐

【值得收藏】最全资料网站+最全英文诗歌软件APP(中文、英文资料都有)

2020-09-05
.php/start软件名字APP:Hymns mobile(安卓可能没有)【微️】【视频号】【诗歌公众号】【属灵英文&美图公众号】【全民K歌;酷...

公安部令大全(2019年10月版)

2019-06-23
建设部、公安部令第49号城市居民住宅安全防范设施建设管理规定公安部、国家工商行政管理局令第19号集贸市场消防安全管理办法...

实际生产中的 Android SDK开发总结| 完结

2019-06-19
Android SDK开发总结本篇将介绍:安全与校验压缩与优化依赖原则与打包方法1安全与校验一、前言本章介绍SDK开发中安全方面的...

对 UI 设计师来说,iPhone X 意味着什么?

2018-01-06
UI 设计师来说,我们本可以永远把「出血」和「安全区」的概念永远抛之脑后,因为屏幕不用裁切!全世界也许 99.99% 的手机屏都是...

计算机一二级MS Office考试大纲+教材(21年版)

2016-12-19
二级考试大纲21年计算机二级MS Office备考教材MS Office 二级备考教材需2本,准备明年考的可以去线下或线上书店买,都有的.21...

2021年西电考研 计算机&网安 复习、考纲、招生简章报名解读

2016-10-07
写留言 公众号/B站/知乎【西电研梦】 9月12日晚上7点讲解的 西电考研计算机&网安 复习、考纲、招生简章报名解读 B站讲解链接:...

Q新闻丨Oracle确认Java 9跳票!微软发布Azure备份服务器……

2015-11-14
8推迟到了Java9.类似地,我们可以推测如果要给Project Valhalla的完成预留更多时间,那么Java 10的发布也会延迟.2雅虎开源语义...

Java 程序员必知必会的 10 款开源工具!

2015-11-01
由于我们在Java项目中使用了大量第三方库,因此手动管理每个JAR及其依赖项可能非常麻烦,Maven通过自动为你下载正确的JAR来...

德国观察 28.07.2016

2015-10-01
Godis Chokladkrokant, Godis Chokladrån 和 Chokladkrokant Bredbar .这六款巧克力产品都可以要求无条件退回,且无论上面的标识...

算法的概念与特征

2015-07-28
课题:算法的概念与特征学校:上海市奉贤中学 执教者:许骏章节名称算法的概念与特征计划学时1学习者分析本堂课是华师大版信息...