未受保护的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文件。该文件包含以下关键代码:
|
|
漏洞发现
存在一个端点/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日 - 发布博客
防护建议
- 双因素认证(2FA):HAwebsso.nl支持2FA,但默认未激活
- 不重复使用密码:防止凭证填充攻击
- 威胁建模:使用INCLUDESNODIRT.com方法
- 持续安全测试:建立道德黑客社区和使用漏洞赏金平台
- 透明披露政策:在所有在线资产上添加负责任披露政策
该报告展示了众包、透明度和适当披露政策的力量,使全球道德黑客能够帮助提高安全性。