HAwebsso.nl未受保护API端点泄露1.5万名医生敏感数据

荷兰医疗单点登录系统HAwebsso.nl因未受保护的API端点泄露超过1.5万名医生的用户名和密码哈希值,漏洞涉及IDOR和缺失身份验证等安全问题,暴露时间可能长达3-5年。

未受保护的API端点导致HAwebsso.nl数据泄露

背景

作为一名白天是全科医生、晚上是安全研究人员的双重身份,我的道德黑客目标之一是尽可能多地学习,以便能够审计医疗保健产品、应用程序、网站或基础设施的安全性。

今天我们将关注荷兰全科医生协会(NHG)和荷兰全科医生联盟(LHV)的安全性。这些都是荷兰全科医生的专业组织。NHG为全科医生制定标准并提供教育和培训,而LHV代表全科医生的利益,致力于提高初级保健的质量和可及性。

侦察开始

NHG和LHV都有许多在线应用程序,允许医生登录和交互。例如HAweb.nl(一个医生在线社区)和richtlijnen.nhg.org(允许医生在专业指南中添加个人笔记)。

大多数LHV和NHG应用程序共享使用域名hawebsso.nl的单点登录(SSO)认证方法。单点登录是一种认证方法,允许用户使用一组登录凭据访问多个应用程序和服务。

发现过程

登录页面引用了一个名为admin.js的JavaScript文件。查看登录页面的源代码后,发现其中一个加载的文件引起了我的注意:admin.js。

admin.js文件中的部分源代码:

1
2
3
4
5
6
7
8
$scope.GetAdmin = function () {
    return $http({
        method: 'GET',
        url: '/api/v1/user/admin',
    }).then(function (response) {
        // ... 处理管理员用户数据
    });
};

有一个端点可供管理员访问,返回用户的不同角色。奇怪的是这段代码在主要登录屏幕上共享。

漏洞发现

作为拥有SSO登录的全科医生之一,我登录并访问了该端点。该端点没有正确检查请求者身份,返回了所有用户信息,包括电子邮件、全名、密码哈希和一些会员详细信息。

当我们尝试访问相同的端点并将/admin替换为ID时,发现https://hawebsso.nl/api/v1/user/15000返回了用户ID 15000的所有账户详细信息,包括密码。

在技术术语中,我们称这种错误为IDOR(不安全的直接对象引用)。端点/api/v1/user/1是一个通用端点,很容易被黑客发现。

认证缺失

在浏览器的隐身模式中打开相同的端点,没有设置cookie,我没有登录,但所有用户详细信息都被返回。答案是肯定的,此端点不需要任何登录。在技术术语中,我们现在有另一个错误:关键功能缺失身份验证。

密码哈希分析

现在我们有了密码的哈希值。使用密码哈希减少了数据泄露的影响,因为必须首先破解哈希才能检索密码。

通过将自己的密码更改为相同的密码,可以确认生成了新的唯一哈希。这给了我们一个线索,彩虹表在这里可能不起作用(例如,如果每个用户包含唯一的盐)。

测试使用的哈希值:

1
em1EijmR7gmSA0NC2fbbl488pWDpX6YEfPtU4BNRsu01VX9VZFRuvSBAPaaIwVe5KC0enebMfwJC1AGZVNFbRsZ+7Pa7hj718HfKfIolp/5rDgsp/52UOqawXrNGHgwCHYsd+S0gG4K+ba3zjsjg5cVXCpIrqvlJbO45DkPqZ+B/REWhOmkBdRdie76z9oWk1qp7LFa9l/4Z3TtCgucS+m0Sl66mYcWwafRZkAas5a5z15v9iweiZK4WyEbkmUFQDgAqXMAsljftoJxSP0QN/BbXUtAm0wENIGvt7PPTg7dGxdUoySbUFpmnzm/eTeCcgbEpsJhb3bwAulMVl0F3

从侦察中知道ASP在服务器上运行,我们可能会从Microsoft提供的文档中获得更多线索。ASP.NET Core Identity版本3使用:PBKDF2 with HMAC-SHA256,128位盐,256位子密钥,10000次迭代。

结论

我们发现了一个数据泄露,泄露了荷兰全科医生使用的所有电子邮件和密码哈希。此端点未受保护,不需要任何授权。由于它是一个通用路径,很容易被黑客猜测到。

时间线

  • 2022年12月4日 - 发现错误,通过电子邮件向LHV隐私官报告
  • 2022年12月5日 - 隐私官回复确认错误
  • 2022年12月6日 - 隐私官更新
  • 2022年12月8日 - 隐私官更新:错误存在3年(自2019年底以来),过去2年的日志中没有滥用迹象
  • 2022年12月11日 - 撰写此博客
  • 2022年12月12日 - 通过电子邮件将博客草稿发送给隐私官
  • 2022年12月12日 - LHV和NHG通过电子邮件通知所有成员数据泄露;要求成员重置密码
  • 2022年12月13日 - LHV建议一些小的更改
  • 2022年12月14日 - 发布博客
  • 2022年12月15日 - 读者告知Admin.js文件在2017年存在;这意味着错误存在了5年以上?向LHV询问对此的见解,得到回复他们将与开发人员再次确认
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计