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

荷兰医疗协会SSO系统存在未授权访问漏洞,通过/api/v1/user/{id}端点可获取所有医生的邮箱、姓名、密码哈希等敏感信息,涉及1.5万医疗从业者数据,漏洞存在时间长达3-5年。

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

背景

作者身兼医疗从业者与安全研究员双重身份,旨在通过道德黑客技术评估医疗系统安全性。本次研究对象为荷兰两大全科医生专业组织:Nederlandse Huisartsen Genootschap(NHG)与Landelijke Huisartsen Vereniging(LHV),二者共同服务全国1.3万名全科医生。

侦察过程

两大组织采用统一单点登录(SSO)系统(hawebsso.nl),该系统的突破意味着可访问所有关联应用(如HAweb.nl在线社区和richtlijnen.nhg.org指南平台)。通过检查OpenID配置端点(/.well-known/openid-configuration),发现系统支持多种权限范围(scopes),如WaarneemApp排班工具访问权限。

漏洞发现

登录页面引用的admin.js文件暴露关键端点:

1
2
3
4
5
6
$scope.GetAdmin = function () {
    return $http({
        method: 'GET',
        url: '/api/v1/user/admin',
    })...
}

该端点未实施权限验证,返回当前登录用户的全部信息(含密码哈希)。进一步测试发现,将URL中的/admin替换为数字ID(如/api/v1/user/15000)可获取任意用户数据,确认为IDOR(不安全的直接对象引用)漏洞。

技术细节

  • 漏洞类型:IDOR + 关键功能缺失认证
  • 影响范围:所有注册hawebsso.nl的用户(约1.5万医生)
  • 数据泄露内容:邮箱、全名、密码哈希、会员详情
  • 哈希算法分析:ASP.NET Core Identity V3的PBKDF2 with HMAC-SHA256(128位盐、256位子密钥、10000次迭代),抗彩虹表攻击

利用方式

  1. 端点猜测:使用Assetnote.io等单词表暴力枚举端点(如/api/v1/user/{id}
  2. JS文件扫描:通过LinkFinder等工具发现隐藏端点
  3. 无认证访问:即使在未登录状态下也可直接获取数据

防护建议

  1. 启用双因素认证(2FA)(系统已支持但未默认开启)
  2. 避免密码复用,防止凭据填充攻击
  3. 实施威胁建模(如INCLUDESNODIRT.com方法)
  4. 建立漏洞披露政策(当前仅LHV官网提供,NHG及hawebsso.nl缺失)
  5. 结合渗透测试与漏洞众测(如HackerOne平台)

时间线

  • 2022-12-04:发现并报告漏洞
  • 2022-12-06:确认漏洞存在3年(2019年末引入)
  • 2022-12-12:通知全体成员重置密码
  • 2022-12-14:公开披露(根据协调披露政策)

深度讨论

  • 行业认证(如ISO 27001)不能替代实际安全防护
  • 需在所有数字资产明确标注漏洞披露政策
  • 透明度构建信任:LHV隐私官全程保持沟通更新
  • 社区协作模式(如Hack the Hague)可提升安全水平

漏洞可能实际存在5年(Web存档显示admin.js早于2017年存在),凸显持续安全监测的重要性。

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