CVE-2021-35211: SolarWinds Serv-U SSH 漏洞分析
SolarWinds发布安全公告,修复了Serv-U中存在的远程代码执行漏洞(CVE-2021-35211),该漏洞为微软发现在野利用后向SolarWinds报告,并提供了漏洞利用的概念证明。未经身份验证的远程攻击者利用此漏洞可在受影响的服务器上以特殊权限执行任意代码,请相关用户尽快采取措施进行防护。
该漏洞存在于SSH协议中,与 SUNBURST 供应链攻击无关,仅影响SolarWinds Serv-U Managed File Transfer和Serv-U Secure FTP。使用Serv-U管理控制台向导创建域时会默认选择启用SSH,若Serv-U环境中未启用SSH则不受此漏洞影响。
通过枚举ssh-字符串在Serv-U中发现了SSH实现。SSH实例如图1所示:
图 1. SSH-字符串
研究人员在上述代码中设置断点,并尝试用SSH客户端连接到Serv-U确认这一假设:
图 2. 图1中代码中设置的断点的调用栈
此时,研究人员发现Serv-U.dll和RhinoNET.dll都禁用了ASLR支持。研究人员逆向Serv-U.dll和RhinoNET.dll中相关的代码后发现可以追踪SSH消息的路径。为处理进入的SSH连接,Serv-U.dll从RhinoNET!CRhinoSocket 类创建了CSUSSHSocket对象。CSUSSHSocket 对象的lifetime是TCP连接的长度。底层的CRhinoSocket 为socket提供了缓存的接口,因此单个TCP包可能含有许多字节。这表明单个包也可能包含任意数量的SSH消息以及部分SSH消息。CSUSSHSocket::ProcessRecvBuffer函数负责处理来自缓存socket数据的SSH消息。
CSUSSHSocket::ProcessRecvBuffer首先用ParseBanner检查SSH版本。如果ParseBanner成功从banner获得SSH版本,ProcessRecvBuffer就会循环处理ParseMessage,会从socket数据中获取当前消息的指针,并从消息中提出msg_id和length域。
图 3. CSUSSHSocket::ProcessRecvBuffer处理循环部分代码
消息数据包含在payload缓存中,其中第一个字节就是msg_id:
然后,ProcessRecvBuffer会根据msg_id来处理消息。部分消息会直接经消息处理循环,其他消息会传递给ssh_pkt_others,ssh_pkt_others会发布消息给队列为另一个线程来处理。
图 4. CSUSSHSocket::ProcessRecvBuffer中的预认证处理
如果msg_id委托给另一个线程,CSSHSession::OnSSHMessage就会负责处理。该函数主要处理需要与Serv-U管理用户简介数据和UI更新交互的消息。由于CSSHSession::OnSSHMessage需要先成功进行用户交互,所以也没有发现漏洞。
在对Serv-U进行模糊测试时,很明显应用发现一些包含异常,比如日志记录错误、系统奔溃等。这些行为可以改善文件服务器应用的运行时间,还是引发可能的内容奔溃。攻击者可以利用这一机会来发起暴力破解等攻击。
在测试过程中,研究人员发现了一些读写访问违背等异常情况,这些可以引发奔溃:
图 5. WinDbg表明模糊测试生成的SSH消息引发的奔溃
如上所述,libeay32.dll中的CRYPTO_ctr128_encrypt尝试调用无效的地址。使用的OpenSSL版本是1.0.2u,下面是相关的OpenSSL函数:
同时,下面是处理的结构:
奔溃函数是通过以下路径从OpenSSL API获得的:
EVP_EncryptUpdate -> evp_EncryptDecryptUpdate -> aes_ctr_cipher -> CRYPTO_ctr128_encrypt
进一步分析调用栈,发现Serv-U会从CSUSSHSocket::ParseMessage 调用EVP_EncryptUpdate,如下所示:
图 6. 调用OpenSSL的位置,攻击者控制的函数指针可能会被调用
此时,研究人员通过测试操作了最小化的TCP包缓存以小到触发奔溃所需的最小SSH消息。
研究人员发现该问题产生的根本原因是Serv-U创建了OpenSSL AES128-CTR代码,如下所示:
用NULL key或空IV来调用EVP_EncryptInit_ex,Serv-U这么做是因为在处理 KEXINIT 消息时创建了上下文。但AES密钥扩展在密钥设置之前不会执行,并且ctx->cipher_data数据在密钥扩展执行前仍然保持未初始化状态。因此,研究人员推测消息的序列在密钥初始化之前就会引发enc_algo_client_to_server->decrypt被调用。Serv-U KEXINIT handler在消息中的所有参数创建对象。但对应的对象在NEWKEYS消息被处理签不会被新创建的对象替换。客户端会在发布NEWKEYS消息之前在正常的SSH连接过程中完成密钥交换过程。不轮是连接状态还是密钥交换,Serv-U会处理NEWKEYS。
CVE-2021-35211: SolarWinds Serv-U SSH 漏洞分析相关推荐
- CVE(Common Vulnerabilities and Exposures通用漏洞披露)笔记
产生背景:目前实时入侵检测和漏洞扫描评估基于的主要方法还是"已知入侵手法检测"和"已知漏洞扫描",即基于知识库的技术,因此决定一个IDnA(Intrusion ...
- 2022CTF培训(十一)IOT 相关 CVE 漏洞分析
附件下载链接 D-Link DIR-823G 固件全系统仿真 2022CTF培训(十)IOT 相关 CVE 漏洞分析 是采用 qemu-user 对个别程序进行仿真,而对于完整的仿真需要使用 qemu ...
- 国产软件CVE漏洞分析系列:泛微OA系统 漏洞编号:SSV-91661
今天开始扒拉一下各种国产软件已经公布的漏洞,有些公司自己把漏洞保密起来,其实真是傻啦吧唧的,以为不让大家知道,漏洞就不存在吗!没办法,可能也是为了上市公司的股价吧.普通人对于漏洞的理解还是有点狼来了的 ...
- linux内核安全数据,【漏洞分析】Linux内核XFRM权限提升漏洞分析预警(CVE–2017–16939)...
0x00 背景介绍 2017年11月24日, OSS社区披露了一个由独立安全研究员Mohamed Ghannam发现的一处存在于Linux 内核Netlink socket子系统(XFRM)的漏洞,漏 ...
- 【安全漏洞】Rocket.Chat 远程命令执行漏洞分析
简述 Rocket.Chat 是一个开源的完全可定制的通信平台,由 Javascript 开发,适用于具有高标准数据保护的组织. 2021年3月19日,该漏洞在 HackerOne 被提出,于2021 ...
- 2021年4月Oracle数据库补丁分析报告
点击上方"蓝字" 关注我们,享更多干货! 引言 编写目的 编写此文档为了更好地指导Oracle补丁安装工作,细化工作任务,规范安装升级操作. 背景 Oracle对于其产品每个季度发 ...
- CVE-2022-26923漏洞分析
漏洞简介 2022年5月10日,微软发布补丁修复了一个AD域权限提升漏洞(CVE-2022–26923).该漏洞是由于在申请证书时对AD域中的计算机账户身份审核不够严格,经过身份验证的攻击者可以操纵他 ...
- Android Parcelable反序列化漏洞分析与利用
文章目录 前言 背景知识 Parcelable序列化 Bundle的数据结构 LaunchAnyWhere CVE-2017-13288 漏洞利用原理解析 POC程序攻击演示 CVE-2017-133 ...
- CVE-2020-3119 Cisco CDP 协议栈溢出漏洞分析
Cisco Discovery Protocol(CDP)协议是用来发现局域网中的Cisco设备的链路层协议. 最近Cisco CDP协议爆了几个漏洞,挑了个栈溢出的CVE-2020-3119先来搞搞 ...
最新文章
- 动软 mysql 分页_动软.NET 分页存储过程UP_GetRecordByPage
- xen 虚拟机挂了,宿主机假死的问题追终,全思路
- 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
- android 刷卡布局,刷卡布局效果-开源AndroidSwipeLayout使用解析(二)
- P4137-Rmq Problem/mex【莫队,分块】
- 获取显示器的唯一编号_宝马奔驰才配拥有的HUD抬头显示器,买菜车也能无损安装!...
- linux ps 详解 博客,Linux PS 命令 详解(转)
- 基于Bootstrap和animate.css的模态框动画效果
- Javascript 中的false、0、null、undefined和空字符串对象
- Cheatsheet: 2014 03.01 ~ 03.31
- 仿淘宝验证码 php,PHP中仿制 ecshop验证码实例
- WordPress教程 – WordPress新手指南(2021)
- 邻接矩阵转换为邻接表;邻接表转换为邻接矩阵
- 阿里云思维导图系列(一)开篇
- iOS10.3.3 iPhone5使用爱思助手越狱后安装完openssl,afc2失效的解决办法
- 微信小程序 在tabBar某一项的右上角添加文本(购物车数量)
- 央行根据LPR调整房贷利率,看看你的房贷算法如何变化
- mysql易百_MySQL DATE类型(来自易百)
- CODING 告诉你硅谷的研发项目管理之道(5)
- python爬取学校新闻_python爬虫爬取新闻的简单实现
热门文章
- Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测
- 成功解决PermissionError(权限拒绝解决答案集锦): [Errno 13] Permission denied: ‘f:\\program files\\python\\python36\
- 成功解决Building wheels for collected packages: dlib Running setup.py bdist_wheel for dlib ... error
- Ubuntu18.04 CUDA与cudnn安装
- Noip2016day1 天天爱跑步running
- BaseControl按钮合集
- spring MVC配置详解
- linux系统vsftpd登陆慢卡怎么办
- ODBC驱动,没装怎么办
- ESP32的OTA详细过程逻辑