一. 概述
云 IDE 指的是无需本地环境,通过浏览器访问即可实现云端开发环境获取、代码编写、编译调试、运行预览、访问代码仓库、命令行执行等能力的云端工具。云上代码开发编程的概念实际上在2000年就已被提出,2010年已经诞生了如Cloud9 IDE这样较成熟的产品。直到如今云IDE的产品已经很成熟,如亚马逊基于其云计算的的 Cloud9,老牌的云 IDE Eclipse Theia,以及宣布开源的 Coder等。国内厂商的云 IDE 产品也有很多,如华为的 Cloud IDE 以及Gitee的Cloud IDE等。
经星云实验室研究发现,本次漏洞根因在于腾讯Cloud IDE服务存在认证缺失风险,用户无需身份因子即可通过SSH接入Cloud IDE服务所在的宿主机,使得恶意用户能够以Root角色接管任意用户存活的Cloud IDE服务,造成较大风险。
注:本文涉及到的技术仅供教学、研究使用,禁止用于非法用途
二. 受影响服务介绍
腾讯云的云端开发环境 Cloud Studio 是基于浏览器的集成式开发环境(Integrated Development Environment,IDE),为开发者提供了一个稳定的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器即可使用。Cloud Studio功能包含代码高亮、自动补全、Git 集成、终端等 IDE 的基础功能,同时支持实时调试、插件扩展等,可以帮助开发者快速完成各种应用的开发、编译与部署工作[1]。
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助用户在无需购买和管理服务器的情况下运行代码。用户只需使用平台支持的语言编写核心代码并设置代码运行的条件即可在腾讯云基础设施上弹性、安全地运行代码[2]。
如图1所示,SCF服务在函数管理时,用户可通过Cloud Studio在线编辑函数内容,因此SCF服务受到Cloud Studio漏洞的级联影响。
图1 SCF在线编辑调用CloudStudio服务
本次漏洞发现源于一次简单的SSH连接:上述服务本质上提供给用户一台虚拟机,在详细了解使用文档后,发现这些虚拟机提供SSH连接服务,用户可凭借“ssh [email protected]”的类似链接,在无需输入任何密码证书的情况下登入虚拟机,其中randstr是一串随机字符串类似aaaabbbccdddeefffddkk,hostname是虚拟机主机名类似wezvpf(在后续了解后亦是由腾讯云定义的SpaceKey参数),在尝试修改randstr后发现仍能登入虚拟机,随后更进一步尝试发现,任意主机名只要对应的虚拟机存活即可登入,遂判定存在认证缺失且可跨租户劫持用户风险。
本文后续部分将依次介绍具体的攻击路径及其利用方法,漏洞影响和修复时间线,并在最后提出最佳实践。
三. 劫持与利用
3.1
攻击路径
如图2所示,处于外部域的用户所使用的云内部域Cloud Studio服务将经过代理域中继。那么如何找到漏洞背后发生的原因,需要探索具体的认证流程是如何处理的。我们首先介绍Cloud Studio服务所在宿主虚拟机上的进程,如图3所示,宿主虚拟机内部一个重要的进程ws-agent,在经过如图4的逆向和如图5的SSH登录等尝试后,判定该进程负责如图2所示的代理域到云内部域的认证,当用户使用SSH 登入虚拟机时,如图6所示,会由代理域来鉴别要连接的主机并向ws-agent认证,但从外部域到代理域用户仅需提供需要连接的主机名,无需提供身份因子,致使用户提供任意一个存活的虚拟机主机名即被代理域转发至ws-agent认证登录成功。
图2 云服务流程
图3 ws-agent进程
图4 ws-agent逆向
图5 ws-agent SSH连接
图6 ws-agent代理连接
以上过程,我们可以看出不充分的代理鉴权模式是导致跨租户劫持的根本原因,其攻击路径可简单描述如下:
1. ws-agent进程所启用的认证服务为SSH服务;
2. ws-agent读取运行路径下./ssh/AuthPub下的公钥;
3. 若用户需要ssh连接终端,则可通过以下方式连接:ssh x-hostname@ hostname.ssh.ide.cloud.tencent.com;
4. 修改任意hostname (hostname对应主机存活即可连接,无须认证因子)。
为了更清晰的描述劫持风险,以下我们简单演示客户服务被劫持的过程(注:所用的示例账号为作者正常注册使用的账号,不涉及任意第三方)。如图7所示,在修改SSH连接语句后,仅需保持登录主机名一致即可登录用户服务所在虚拟机;图8中我们可以看出登录后我们可进一步在虚拟机上执行命令;图9则显示了一个存活的云函数服务因调用Cloud Studio服务而被劫持。
图7 无认证因子跨租户登录
图8 劫持已存活服务
图9 云函数劫持
3.2
利用方法
1. 暴力枚举寻找存活主机主机名
笔者以主机型号CPU I7-12700H, 内存32G配置为例执行相应程序,结果如图10表明,搜索三百万次占整体解域的百分之一,耗时一个半小时找到一个存活主机,同时由于云上主机默认存活一小时,基于此可得出结论暴力枚举具备攻击可行性。
图10 暴力枚举获取主机名(SpaceKEY)
2. IP历史解析记录
利用公开的DNS解析记录查询用户的请求。
图11 利用公开的DNS解析记录
3. 本地DNS服务伪造
与被攻击者处于同一解析网络环境下,伪造DNS服务,从而在用户使用特定云服务时获取该域名,进而获取主机名(SpaceKEY)。
四. 影响及修复
4.1
漏洞影响
由于漏洞利用难度低,且能跨租户劫持,所以漏洞评级为高危,但云上受影响服务Cloud Studio需为存活时被探测到,若用户未使用或曾使用过相应服务,则不受影响。
4.2
修复时间线
2023-11-20 09:57:16 报告了该漏洞
2023-11-20 09:58:02 TSRC受理该漏洞
2023-11-24 17:54:37 TSRC确认了该漏洞
2023-11-27 12:00:17 问题已修复,请报告者复查
2023-11-28 15:32:24 复查了该漏洞,并确认修复
五. 最佳实践
当前的云上环境中,公有云提供商通常会以方便用户使用为出发点进行产品的开发和设计,然而,不当的设计可能会导致严重的安全事故,因此,在设计和使用云上环境时,应严格遵循一些设计原则,以确保安全性,如:
网络隔离:通过网络隔离,可以确保不同租户之间的流量是隔离的。可以利用虚拟局域网(VLAN)、虚拟专用云(VPC)等技术来实现,确保不同租户间无法未授权进行网络访问。
零信任认证授权: “零信任”(Zero Trust)是一种安全理念,强调不信任内部和外部网络中的任何用户、设备或应用程序,并要求对所有访问进行验证和授权。零信任认证和授权是在这一理念基础上构建的安全策略,它要求在每个访问点上都进行身份验证和授权,而不仅仅是在边界。提高网络的整体安全性,降低内部和外部威胁的风险,并防止横向扩散的攻击。
参考文献
[1] https://cloud.tencent.com/document/product/1039
[2] https://cloud.tencent.com/product/scf
往期回顾:
内容编辑:创新研究院 星云实验室
责任编辑:创新研究院 陈佛忠
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。
关于我们
绿盟科技研究通讯由绿盟科技创新研究院负责运营,绿盟科技创新研究院是绿盟科技的前沿技术研究部门,包括星云实验室、天枢实验室和孵化中心。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。
绿盟科技创新研究院作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。
我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。
长按上方二维码,即可关注我