文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

VMware ESXi OpenSLP 堆溢出漏洞(CVE-2021–21974)问题分析

2023-03-13 11:44

关注

介绍

具体影响版本

大于以下版本则不受影响

被攻击之后的访问管理界面示例

漏洞成因

服务定位协议

服务定位协议是一种服务发现协议,它允许连接设备通过查询目录服务器来识别局域网内可用的服务。这类似于一个人走进购物中心并查看目录列表以查看商场中有哪些商店。为了保持简短,设备可以通过发出“服务请求”并指定要使用 URL 查找的服务类型来查询服务及其位置。

例如,要从目录服务器查找 VMInfrastructure 服务,设备将使用“service:VMwareInfrastructure”作为 URL 发出请求。服务器将回复类似“service:VMwareInfrastructure://localhost.localdomain”的内容。

设备还可以通过发出提供相同 URL 的“属性请求”来收集有关服务的其他属性和元数据。要添加到目录中的设备可以提交“服务注册”。此请求将包括发布公告的设备的 IP、服务类型以及要共享的任何元数据等信息。SLP 可以执行更多功能,但我感兴趣的最后一个消息类型是“目录代理通告”,因为这是漏洞所在。“目录代理通告”是由服务器发送的广播消息,让网络上的设备知道如果他们想要查询服务及其位置,应该联系谁。要了解有关 SLP 的更多信息,请参阅此处和该内容。

SLP 数据包结构

虽然不同 SLP 消息类型之间的 SLP 结构布局略有不同,但它们通常遵循标头 + 正文格式。

“服务请求”数据包如下所示:

“属性请求”数据包如下所示:

“服务注册”数据包如下所示:

最后,“目录代理通告”数据包如下所示:

漏洞点

该问题出在“SLPParseSrvURL”函数中,该函数在处理“目录代理通告”消息时被调用。

在第 18 行,URL 的长度与数字相加 0x1d 以形成从内存中“calloc”的最终大小。在第 22 行,调用 'strstr' 函数来查找子字符串 “:/” 的位置在网址中。在第 28 行,子字符串“:/”之前的 URL 内容将从第 18 行复制到新的 ‘calloced’内存中。

另一件需要注意的事情是,如果子字符串“:/”,'strstr'函数将返回0不存在或函数命中空字符。

我推测VMware测试用例只尝试长度小于256的“范围”。如果我们查看以下“目录代理通告”布局代码段,我们会看到示例 1 的“范围”长度包含一个空字节。这个空字节意外地充当了“URL”的字符串终止符,因为它紧随其后。如果 'scopes' 的长度高于 256,则长度的十六进制表示形式将没有空字节(如示例 2 所示),因此 'strstr' 函数将读取传递的 'URL' 并继续查找子字符串 “:/”在“范围”中。

因此,“memcpy”调用将导致堆溢出,因为源包含来自“URL”的内容+“范围”的一部分,而目标只有空格来容纳“URL”。

SLP 对象

在这里,我将介绍相关的 SLP 组件,因为它们是利用的构建块。

_SLPDSocket

连接到“slpd”守护程序的所有客户端都将在堆上创建一个“slpd-socket”对象。此对象包含有关连接的当前状态的信息,例如它是处于读取状态还是写入状态。此对象中存储的其他重要信息包括客户端的 IP 地址、用于连接的套接字文件描述符、指向此特定连接的“recv-buffer”和“send-buffer”的指针,以及指向从先前和将来建立的连接创建的“slpd-socket”对象的指针。此对象的大小固定为 0xd0,无法更改。

来自OpenSLP源代码的_SLPDSocket结构

_SLPDSocket对象的内存布局

_SLPBuffer

从服务器接收的所有 SLP 消息类型将创建至少两个 SLPBuffer 对象。一个称为“recv-buffer”,它存储服务器从客户端接收的数据。由于我可以控制从客户端发送的数据的大小,因此我可以控制“recv-buffer”的大小。另一个SLPBuffer对象称为“send-buffer”。此缓冲区存储将从服务器发送到客户端的数据。“发送缓冲区”具有固定的0x598大小,我无法控制其大小。此外,SLPBuffer 具有元数据属性,指向所述数据的起始位置、当前位置和结束位置。

从 OpenSLP 源代码_SLPBuffer

_SLPBuffer对象的内存布局

SLP 套接字状态

SLP 套接字状态定义特定连接的状态。状态值在_SLPSocket对象中设置。连接将调用“recv”或“发送”,具体取决于套接字的状态。

OpenSLP 源代码中定义的套接字状态常量

了解_SLPSocket、_SLPBuffer和套接字状态的属性非常重要,因为利用过程需要修改这些值。

利用步骤

参考链接:

我的 RCE PoC 演练 (CVE-2021–21974) VMware ESXi OpenSLP

https://github.com/straightblast/My-PoC-Exploits/blob/master/CVE-2021-21974.py

到此这篇关于VMware ESXi OpenSLP 堆溢出漏洞(CVE-2021–21974)的文章就介绍到这了,更多相关VMware ESXi OpenSLP 堆溢出漏洞内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯