背景
如果勒索软件团伙能够准确查看哪些医疗机构投保了勒索软件攻击保险(这些保险政策包含保证支付已付赎金的条款),那将是每个勒索软件团伙的梦想。今天我们将见证两个恰好实现这一点的漏洞。
在深入技术细节之前,首先介绍在没有适当协调漏洞披露的情况下进行道德黑客攻击的背景知识,以及有关为医疗机构支付赎金的勒索软件保险的一些思考。
医疗行业勒索软件威胁增加
根据医疗行业机构CERT组织Z-CERT.nl的2023年度报告,当前医疗行业最大的威胁之一是勒索软件和金融欺诈。报告描述称,IT供应商比医疗机构本身更常成为攻击目标。
在欧洲,Z-CERT登记了29起欧洲医疗机构的勒索软件事件,其中3起发生在荷兰(包括初级医疗保健)。
覆盖赎金支付的保险
为什么会有人对公司进行勒索软件攻击?为了钱。没有钱,就没有(不道德的)黑客。
医疗诊所之所以不会被持枪窃贼抢劫或勒索,有一个很好的理由:根本没有钱…由于荷兰政府和医疗保险规范了这些诊所的收入,因此没有巨额利润。这可能解释了为什么(商业)供应商目前更常成为攻击目标。
但如果保险公司开始提供覆盖诊所所需赎金的保险呢?我们可能会创造一个开始黑客攻击医疗诊所的好理由?
今天我们将仔细研究VvAA,这是荷兰医生和医疗诊所使用的最大保险和咨询公司之一。他们声称代表超过13万医疗保健提供者。
缺失的协调漏洞披露
一年多前,我们讨论了HAwebsso.nl的数据泄露事件,导致超过1.5万名荷兰医生的私人详细信息泄露,包括他们的电子邮件和哈希密码。这是一个有趣的发现,因为它揭露了一个存在至少3年(关于Archive.org日志甚至可能5年)的漏洞。
那次黑客攻击中获得的数据可以轻松用于进行鱼叉式网络钓鱼攻击。
今天我们将看看VvAA。在发现漏洞时(2023年3月24日),他们没有发布适当的责任披露或协调漏洞披露政策。
IDOR漏洞1:获取个人文件
我们此次黑客攻击的最终目标是获取每个人的私人保险保单文件。谁拥有覆盖勒索软件攻击的保险,包括保证的勒索软件支付?让我们获取这些文件!
由于我需要非常谨慎(没有CVD政策),我联系了一位也是VvAA保险客户的同事,询问她是否同意我尝试获取她的文件和保单。她同意并分享了她的账户详细信息。
在他们的内部门户上拥有两个账户有助于我以安全的方式发现IDOR漏洞;我可以使用我朋友的ID,而不是随机命中其他客户的ID。
开始!登录我自己的账户后,我立即识别出URL中的/s/。这通常暗示幕后使用了Salesforce。
Salesforce使用对象;幕后的一切都是对象。您的发票有一个对象ID,您的个人资料有一个对象ID,所有其他存储的数据都可以通过引用ID来访问。
当您能够找到一个ID时,您可以像这样构造URL:https://mijn.vvaa.nl/objectidhere
使用Burp作为代理来MITM流量时,我收集了在流量中看到的对象ID。当我访问我的联系方式详细信息时,有一个是0011r00002IXXXXX。
当我访问该URL时,我得到了另一个提示,表明Salesforce实例配置不当,暴露原始对象视图通常会暴露配置松懈。
这已经足以让我联系VvAA告知我的担忧;因此我在2023年3月24日午夜00:00通过电子邮件联系了他们的隐私官。同一天12:45,他们的CISO联系我安排通话讨论当前发现。
当天14:30,我发现了导致所有文件泄露的IDOR。
步骤1
启动Burp并使用2个账户登录。左侧是攻击者,右侧是受害者。
加载概览(Overzicht)页面时,它会共享您账户中可访问的文档/PDF文件。可以在右侧看到我的列表中有一些发票和保单协议。
填充此概览的请求使用relatienummer id(客户ID)来获取这些文件。这个ID是一个整数,可以轻松枚举。
仔细查看此截图,您会看到它想要运行命令getMijnVvAADocs,并使用RelatieNummer变量仅获取当前登录用户的文档。
重要的是,这是VvAA添加到他们自己网站的自定义功能。因此,此漏洞不是任何其他Salesforce实例的一部分,也不是Salesforce特定问题。
如果我们将该ID更改为我们受害者的客户ID会怎样?我们会得到其他用户的文档吗?
攻击者能够获取我们受害者的文档。
受害者的保单详细信息可以被攻击者下载。
轰!我们可以访问受害者和其它客户的所有文档,我们可以下载它们。这包括保单协议条款和发票。然而,所有类型的文档都可能可访问,包括网络风险保险保单。
勒索软件团伙可以简单地转储所有用户的文件列表,并仅下载网络风险保险特定文件。这恰好暴露了潜在受害者的约定条款和其他详细信息。对于鱼叉式网络钓鱼或攻击具有保证勒索软件支付的目标非常有用。
在我报告此概念验证28分钟后,VvAA确认了该漏洞,并承诺在一小时内推出补丁。此外,他们承诺进行审计以检查此漏洞是否被恶意行为者滥用。
几周后,我被邀请到他们的办公室讨论此事,我收到了一盒葡萄酒和一张礼品卡。我们握手,他们的领导承诺发布CVD政策。一个如何对待安全研究人员的绝佳例子,没有恐吓和迅速行动!
IDOR 2:未受保护的文档下载端点
一个月后,我检查了我们第一个漏洞的所有内容是否已解决;确实解决了!
然而,可能是时候再次查看其客户门户的其他部分了。其中之一是已订阅服务(Producten)的概览。
我拥有的有效订阅;我有一份法律保险。
点击订阅后,我可以下载与此保险相关的文件。
当我点击我的法律保险时,我可以下载相关文件:https://0ada17bd-xxxx-xxxx-xxxx.div.vvaa.nl/ApiGateway/Api/Documents/GetBinary/123456/0
我的法律保单。
但如果我们将此URL中的123456 ID更改为其他值会怎样?我们会看到另一个人的保单吗?
由于我的朋友没有有效订阅,因此我无法获取要使用的ID,我决定使用随机整数来快速查看这是否是一个漏洞。
我将整数ID更改为以1结尾的ID。
另一个以A开头名字的人的保险保单。该保险始于1985年。
轰!我们有了另一个泄露所有文档的IDOR,现在只需更改文档整数ID并转储所有文件即可发现谁拥有覆盖赎金支付的保险。
我测试了一些ID以确认确实可能获取所有文档。其中一个ID显示了一份2015年的文档,因此至少8年的文档是可访问的。此外,它包括电子邮件对话(eml文件)和其他机密信息。
这次VvAA也在24小时内响应,在一周内部署了补丁,并对日志文件进行了广泛审计;这是如何处理此类报告的完美例子。
结论
在本文中,我们证明了可以获取医生和其他医疗工作者的机密信息。我们能够恢复他们当前的保险保单和其他高度机密的信息,如电子邮件。
这使得恶意行为者能够精确攻击具有保证赎金支付保单的医疗实践或医生。
VvAA对日志文件进行了审计,并得出结论我是唯一发现该漏洞的人;好消息!
有人可能问我是否应该留在犯这些错误的公司?我的明确回答是肯定的。
所有开发人员都会引入错误;重要的是您处理它们的方式。透明度创造信任。
他们迅速回复,在几天内解决了漏洞,并支持我道德研究的目标;努力使医疗供应商更加安全。
多亏了他们,我能够分享这个故事,以便我们都能从中学习。他们最终甚至发布了CVD政策,以便我们未来的研究风险更小。
这是一个强大领导力的例子,一个我信任的公司。
时间线
- 24-03-2023 — 发现VvAA可能易受攻击的线索,联系他们告知我的研究
- 24-03-2023 — 与VvAA CISO通话讨论当前发现
- 24-03-2023 — 发现IDOR漏洞1,向VvAA发送报告
- 24-03-2023 — VvAA确认IDOR漏洞1并进行首次审计检查是否被滥用
- 05-04-2023 — VvAA邀请我于11-05-2023到办公室
- 04-05-2023 — 发现IDOR漏洞2,向VvAA发送报告
- 05-05-2023 — VvAA确认IDOR漏洞2
- 11-05-2023 — 与VvAA CISO和领导层会面,收到奖励(礼品卡和一瓶葡萄酒)
- 06-03-2024 — 告知VvAA CISO我想在演讲中提及此漏洞
- 10-03-2024 — 撰写本文并与VvAA安全团队分享草案以供事实核查和添加他们自己段落的选择
- 15-03-2024 — 收到VvAA法律主管和CISO的反馈
- 17-03-2024 — 发送更新的文章
- 20-03-2024 — 在演示期间披露该漏洞
- 21-03-2024 — 对文章进行微小更改,发布文章