HAwebsso.nl未受保护API端点泄露1.5万名医生数据的技术分析

本文详细分析了荷兰医疗系统HAwebsso.nl SSO服务中存在的未授权API端点漏洞,该漏洞导致1.5万名医生的用户名和密码哈希值泄露,涉及IDOR和缺失身份验证等关键技术问题。

未受保护的API端点导致HAwebsso.nl数据泄露1.5万名医生用户名和密码哈希

背景

作者白天是全科医生,晚上是安全研究员。他致力于通过道德黑客学习更多知识,以便能够审计医疗保健产品、应用程序、网站或基础设施的安全性。

本次调查对象是荷兰的两个全科医生专业组织:Nederlandse Huisartsen Genootschap(NHG)和Landelijke Huisartsen Vereniging(LHV)。NHG为全科医生制定标准并提供教育和培训,而LHV代表全科医生的利益并致力于提高初级保健的质量和可及性。

侦察过程

NHG和LHV都有许多在线应用程序允许医生登录和交互。这些应用程序大多共享使用hawebsso.nl域的单点登录(SSO)身份验证方法。

SSO是一种身份验证方法,允许用户使用一组登录凭据访问多个应用程序和服务。这消除了用户记住和管理多组登录信息的需要,可以大大改善用户体验和生产力。

技术发现

OpenID端点侦察

通过访问https://hawebsso.nl/.well-known/openid-configuration可以快速查看SSO系统的可能范围。该系统包含有趣的用户数据(在OpenID中称为声明),并支持许多不同的范围。

系统识别

SSO运行在Microsoft IIS/10.0上,但没有提示使用的软件。

源代码分析

登录页面引用了一个名为admin.js的JavaScript文件。该文件包含以下关键代码:

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

漏洞发现

存在一个端点/api/v1/user/admin,返回登录用户的所有数据,包括密码哈希。该端点没有正确检查请求者身份,返回所有用户信息,包括电子邮件、全名、密码哈希和一些会员详细信息。

进一步测试发现,通过将URL中的/admin替换为ID(如/api/v1/user/15000),可以访问任何用户的数据。这被称为IDOR(不安全的直接对象引用)漏洞。

认证缺失

该端点不需要任何身份验证即可访问。在浏览器的隐身模式下打开相同端点(未设置cookie,未登录),仍然返回所有用户详细信息。这在技术上被称为关键功能缺失身份验证漏洞。

密码哈希分析

获得的密码哈希看起来像是base64编码的字符串,解码后正好是255字节长。根据服务器运行ASP的线索,推测可能使用ASP.NET Core Identity的默认哈希算法:PBKDF2 with HMAC-SHA256,128位盐,256位子密钥,10000次迭代。

影响评估

该数据泄露影响了荷兰几乎所有全科医生的电子邮件和密码哈希。该端点未受保护,不需要任何授权。由于是通用路径,黑客可以轻松猜测到。

时间线

  • 2022年12月4日 - 发现漏洞并通过电子邮件向LHV隐私官报告
  • 12月5日 - 隐私官确认漏洞
  • 12月8日 - 更新:漏洞存在3年(自2019年底起)
  • 12月12日 - LHV和NHG通过电子邮件通知所有会员数据泄露
  • 12月14日 - 发布博客

防护建议

  1. 双因素认证(2FA):HAwebsso.nl支持2FA,但默认未激活
  2. 不重复使用密码:防止凭证填充攻击
  3. 威胁建模:使用INCLUDESNODIRT.com方法
  4. 持续安全测试:建立道德黑客社区和使用漏洞赏金平台
  5. 透明披露政策:在所有在线资产上添加负责任披露政策

该报告展示了众包、透明度和适当披露政策的力量,使全球道德黑客能够帮助提高安全性。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计