荷兰医疗SSO系统API漏洞导致1.5万医生数据泄露

荷兰医疗协会SSO系统hawebsso.nl存在未授权API端点漏洞,导致超过1.5万名医生的用户名、邮箱、密码哈希等敏感信息泄露。本文详细分析了漏洞发现过程、技术细节及安全建议。

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

背景

作者白天是一名全科医生,晚上则是安全研究员。本次研究目标是评估荷兰全科医生协会(NHG)和荷兰全科医生联盟(LHV)的安全性。这两个组织负责制定全科医生标准、提供教育培训并代表医生利益,目前荷兰约有1.3万名全科医生。

侦察过程

NHG和LHV的多个在线应用都使用hawebsso.nl域的单点登录(SSO)认证。SSO允许用户使用一套凭证访问多个服务,但若SSO被攻破,所有关联系统都将面临风险。

通过检查OpenID端点(https://hawebsso.nl/.well-known/openid-configuration),发现SSO系统包含大量用户数据(OpenID中的"claims")并支持多种作用域,例如访问WaarneemApp(医生调班工具)。服务器运行在Microsoft IIS/10.0上,但未透露具体软件信息。

发现漏洞

登录页面加载的JavaScript文件中,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) {
        // 处理管理员用户数据
    });
};

该端点返回当前登录用户的详细信息,包括密码哈希。更严重的是,将URL中的/admin替换为用户ID(如/api/v1/user/15000)可获取任意用户的完整数据,包括邮箱、全名、密码哈希和会员详情。

此漏洞属于IDOR(不安全的直接对象引用),且端点无需认证即可访问,属于"关键功能缺失认证"漏洞。

密码哈希分析

获取的密码哈希看似Base64编码字符串,解码后长度为255字节。根据服务器运行ASP.NET,推测使用PBKDF2 with HMAC-SHA256算法,包含128位盐和256位子密钥,迭代10000次。这种哈希算法目前难以破解。

影响与时间线

漏洞存在约3年(可能长达5年),影响所有使用该SSO的荷兰全科医生。时间线如下:

  • 2022年12月4日:发现并报告漏洞
  • 12月6-8日:确认漏洞存在3年,日志未见滥用迹象
  • 12月12日:LHV和NHG通知成员重置密码
  • 12月14日:发布博客

防护建议

  1. 启用双因素认证(2FA):hawebsso.nl支持但未默认启用
  2. 避免密码复用:防止凭证填充攻击
  3. 实施威胁建模:采用INCLUDESNODIRT等方法评估新功能安全性
  4. 建立漏洞披露政策:所有在线资产应包含负责任的披露政策
  5. 结合认证与众测:通过ISO 27001等认证的同时,建立 ethical hacker 社区持续测试

总结

通过透明披露和协作,LHV快速响应并修复了漏洞。本文展示了众测、透明度和正确披露政策如何帮助组织提升安全性,最终实现更安全的医疗系统。

作者呼吁读者尝试破解提供的示例哈希,成功者可获得独特奖励。

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