本文为译文,原文地址:https://www.wiz.io/blog/attachme-oracle-cloud-vulnerability-allows-unauthorized-cross-tenant-volume-access
在打补丁之前,#AttachMe可能允许攻击者未经授权访问和修改任何其他用户的OCI存储卷,从而违反云隔离。在披露后,Oracle在数小时内修复了该漏洞。不需要客户操作。
今年6月,Wiz工程师发现并报告了#AttachMe,这是Oracle云基础设施(OCI)中的一个主要云隔离漏洞,促使Oracle在数小时内修补该漏洞,而不需要客户采取行动。
- 潜在影响——在打补丁之前,OCI的所有客户都可能成为了解#AttachMe的攻击者的目标。只要攻击者拥有Oracle Cloud Identifier (cid),就可以对任何未附加的存储卷或允许多附件的附加存储卷进行读写,从而允许敏感数据被窃取或通过可执行文件操作发起更具破坏性的攻击。
- 补救——在接到Wiz通知的24小时内,Oracle为所有OCI客户打了#AttachMe补丁。不需要客户操作。
- 关键结论——云租户隔离是云中的一个关键元素。客户希望他们的数据不能被其他客户访问。然而,云隔离漏洞打破了租户之间的隔离墙。这突出了积极主动的云漏洞研究、负责任的披露和公开跟踪云漏洞对云安全的至关重要性。
什么是AttachMe?
#AttachMe是报告的最严重的云漏洞之一,因为它可能会影响所有OCI客户。云隔离漏洞通常会影响特定的云服务。然而,在本例中,影响与核心云服务相关。
Wiz工程师发现,用另一个帐户将磁盘绑定到虚拟机不需要任何权限。这意味着潜在的攻击者可以访问和修改来自任何OCI客户的数据,在某些情况下甚至可以接管环境。
潜在的攻击流程很简单:
1、通过搜索web或使用低特权用户权限从受害者的环境中读取卷的cid来发现目标受害者卷的ID (cid)。
2、在攻击者控制的租户中启动计算实例,该租户位于与目标卷相同的可用性域(AD)中。
3、将受害者的卷附加到攻击者的计算实例,从而获得对该卷的读/写权限。
从那里,一个潜在的攻击者可以执行许多严重的行动:
- 导出存储在卷上的敏感数据。
- 在卷中搜索明文机密,以便在受害者的环境中横向移动and/or升级特权。
- 修改现有的块卷和引导卷。通过操作二进制文件—以便在将卷挂载到计算实例上时获得代码执行。
当Wiz负责任地披露其发现#AttachMe时,Oracle的反应非常迅速。作为Oracle的合作伙伴和客户,Wiz感谢Oracle的合作和对这个问题的迅速关注。Oracle感谢Wiz在其2022年7月的关键补丁更新建议中发现了该漏洞。
Wiz是如何发现AttachMe的
在为Wiz构建OCI连接器时,我们的软件工程师注意到,在给定Oracle Cloud Identifier (cid)的情况下,可以将几乎所有块卷和引导卷附加到一个计算实例,而无需显式授权。经过更多的测试,我们意识到,当卷和计算实例位于不同的OCI租户中时,这甚至是可能的!这意味着攻击者可以获得对另一个租户中的卷的访问权(只要他们知道OCID),而拥有该卷的任何人(受害者)将完全不知道其他人对他们的数据具有读/写访问权,因为计算实例和附件将位于攻击者的租户中。
背景—OCI中的卷是什么?
在OCI文档中,卷是为计算实例提供持久存储空间的虚拟磁盘。OCI中有两种类型的卷:
- 块卷一种可拆卸的块存储设备,可以动态扩展实例的存储容量。
- 启动卷一种可拆卸的启动卷设备,其中包含用于启动计算实例的映像,通常在创建计算实例时创建。
OCI支持块卷的多挂载,这意味着您可以使用具有读/写或只读权限的可共享特性,将单个卷同时挂载到多个实例。
从CLI将引导卷或块卷挂载到计算实例非常简单,只需要卷和实例id:
oci compute volume-attachment attach --type paravirtualized --instance-id <instance_ocid> --volume-id <volume_ocid>
根据策略引用,“AttachVolume”的权限分别为“VOLUME_WRITE”、“VOLUME_ATTACHMENT_CREATE”和“INSTANCE_ATTACH_VOLUME”。实例和卷不一定要在同一个分隔区内。
卷附件是一种OCI资源,驻留在计算实例的分区中,描述卷到计算实例的附件。权限应用于一个分隔区(及其分隔区树)。因此,VOLUME_ATTACHMENT_CREATE和INSTANCE_ATTACH_VOLUME在实例的分区范围(在本例中是攻击者的分区)中是必需的,而VOLUME_WRITE在卷的分区范围(受害者的分区)中是必需的。
然而,正如我们所发现的,在挂载卷时,在验证VOLUME_WRITE权限时存在一个空白,这使得无需授权就可以挂载任何卷。此外,还可以跨不同的租户进行附加:我们设法将一个卷从一个租户附加到另一个租户的计算实例。
Demo
当未经授权的用户试图对卷执行任何操作时,服务(正确地)返回一个错误,表明该用户缺乏所需的权限:
elad_gabay@cloudshell:~ (us-ashburn-1)$ oci bv volume get --volume-id ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn*******************************************
ServiceError:
{
"client_version": "Oracle-PythonSDK/2.69.0, Oracle-PythonCLI/3.10.0",
"code": "NotAuthorizedOrNotFound",
"logging_tips": "Please run the OCI CLI command using --debug flag to find more debug information.",
"message": "Authorization failed or requested resource not found.",
"opc-request-id": "DFB9SCC25*****",
"operation_name": "get_volume",
"request_endpoint": "GET https://iaas.us-ashburn-oraclecloud.com/20160918/volumes/ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn*******************************************",
"status": 404,
"target_service": "blockstorage",
"timestamp": "2022-06-07114:12:21.408280",
"troubleshooting_tips": "See https://docs.oracle.com/iaas/Content/API/References/apierrors.htm#apierrors_404_404_notauthorizedornotfound for more information about resolving this error. If you are unable to resolve this issue, run this CLI command with --debug option and contact Oracle support and provide them the full error message."
}
(试图在没有足够权限的情况下使用CLI访问卷)
然而,在#AttachMe被纠正之前,无论用户是否有足够的权限,尝试将卷挂载到计算实例都成功:
elad_gabay@cloudshell:~(us-ashburn-1)$ oci compute volume-attachment attach --instance-id ocid1.instance.oc1.iad.anuwcljrixjtluica******************************************* --volume-id ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn3******************************************* --type paravirtualized
{
"data": {
"attachment-type": "paravirtualized",
"availability-domain": "zSfH:US-ASHBURN-AD-1",
"compartment-id": "ocid1.tenancy.oc1..aaaaaaaaote2dzazv**********************",
"device": "null",
"display-name": "volumeattachment20220607141228",
"id": "ocid1.volumeattachment.oc1.iad.anuwcljrixjtluic***********************",
"instance-id": "ocid1.instance-oc1.iad.anuwcljrixjtluica*********************",
"is-multipath": null,
"is-pv-encryption-in-transit-enabled":false,
"is-read-only":false,
"is-shareable": false,
"iscsi-login-state": null,
"lifecycle-state": "ATTACHING",
"time-created": "2022-06-07T14:12:29.027000+00:00",
"volume-id": "ocid1.bootvolume.oc1.iad.abuwcljrybvvdsn3***********************",
},
"etag": "992e06ff86b86a5fe732308092a55***********************************"
}
(成功地挂载我们没有访问权限的同一个卷)
一旦卷被附加,我们就可以查看和修改它的内容。
使用#AttachMe的详细要求如下:
- 攻击者必须知道目标卷的cid——虽然OCID通常是私有的,但它们不会被视为秘密,因此这很容易实现。
- 攻击者的计算实例必须位于与目标卷相同的可用性域(Availability Domain, AD)中——这个条件很容易满足,因为可用性域的数量相对较少(某些地区最多为三个),因此可以枚举。
- 目标卷必须被分离或附加为可共享卷——分离卷相对常见,因为默认情况下与终止的计算实例关联的引导卷不会被删除。此外,备份数据卷通常不附加到正在运行的计算实例。
风险分析
当攻击者获得对卷的读访问权时,主要的风险是数据泄露。卷可能包含敏感信息,如个人识别信息(PII)、机密等。
另一个风险是数据操纵和对云网络的入侵。挂载卷提供了写访问,可用于操作卷上的任何数据,包括操作系统运行时(例如,通过修改二进制文件),从而获得远程计算实例上的代码执行,并在使用卷引导机器时在受害者的云环境中获得立脚点。
潜在的攻击路径包括:
在隔间或租约内的特权升级——如果攻击者设法获得对受害者的OCI环境的初始访问权,#AttachMe可能被利用来进一步升级特权。攻击者可以查询隔间中所有可用的卷,获取它们的ocid,挂载它们,并读取存储在其中的任何敏感信息。
跨租户访问——一个更有影响的场景是,攻击者设法获得远程租户中的卷的ocid。#AttachMe可以被用来通过读取存储在目标卷中的敏感信息和长期机密来获得对受害者环境的初始访问权。此外,攻击者还可以操纵现有的块卷和引导卷,从而在将卷挂载到计算实例时提供攻击者的代码执行。
鉴于ocid通常不被视为机密,我们认为这两种潜在的攻击路径都是可行的。通过简单的在线搜索,可以找到各种环境(包括大公司的环境)的块卷和引导卷的大量ocid。
(在Oracle的一个公共GitHub项目中发现的OCI卷标识符(OCID))
也可以找到在GitHub上发布的卷的ocid,这表明这些id确实没有被开发人员视为机密。特权较低的用户和对环境具有读访问权限的第三方供应商可以非常容易地获得ocid。
发现和披露时间表
在发现#AttachMe后,我们立即向Oracle披露了我们的发现,Oracle在不到24小时内调查并解决了这个问题。我们很高兴能与如此专业的团队合作。
- 2022年6月6日- wiz发现了漏洞
- 2022年6月9日-向Oracle报告漏洞
- 2022年6月10日- Oracle确认报告
- 2022年6月10日-该漏洞已被修复
云构建者和云防御者的经验教训
用户权限验证不足是云服务提供商中常见的错误类别。识别此类问题的最佳方法是在开发阶段对每个敏感API执行严格的代码审查和全面测试。Oracle告诉我们,他们使用静态代码分析技术来检测已经在开发中的问题,并调查已知和报告的问题,以确保问题模式不会在代码库的其他地方重复出现。
我们还建议执行特定于服务的渗透测试,并参与bug赏金计划,因为这些已被证明对这类问题有效。
跟踪云漏洞
#AttachMe是研究社区发现的一系列云隔离漏洞中最新的一个:最近的例子包括“ExtraReplica”——一个在Azure PostgreSQL中的跨租户数据库漏洞,也是由Wiz研究发现的,以及eBay笔测试团队的Chen Cohen在Azure cloud Shell中发现的跨租户漏洞。
今天,安全社区还没有针对云漏洞实施明确的流程。云漏洞通常不会被发布cve,因此客户很难跟踪它们。最近,来自Wiz的研究人员和其他云安全社区成员发起了开放云漏洞和安全问题数据库,以帮助云用户和防御者监视和跟踪云漏洞。如果您对投稿感兴趣,可以查看OpenCVDB GitHub。