更多资料分享可看:
Track 安全社区 — 掌控安全在线教育- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者
分享一个在 Mozilla 的某款产品中的有趣业务逻辑漏洞。
应用的工作原理
首先,让我快速介绍一下该应用的工作原理。
Mozilla Monitor 旨在帮助用户了解数据泄露情况。用户可以使用邮箱注册该服务,以便在他们的凭据在任何已知的泄露事件中被曝光时收到提醒。它通过扫描大量泄露数据的数据库并与用户邮箱进行交叉对比,从而通知用户其信息是否被暴露。
架构
从架构上看,该应用的数据泄露信息由 haveibeenpwned.com 提供支持。在此基础上,我们的重点将转向识别和解决特定的逻辑漏洞。
主要功能 如前所述,该应用的核心功能是为监控添加电子邮件地址。在免费试用中,每个 Mozilla 账户最多可以添加五个邮箱。
例如,假设你添加了一个邮箱地址(如 moraa@gmail.com),系统会向该邮箱发送验证令牌。需要确认该令牌后,监控功能才能激活。
深入研究 Mozilla 的 Monitor 产品
我首先检查了响应中是否有任何泄露的验证令牌,但该部分的处理非常到位。接着,我尝试通过各种技巧来操纵发送到服务器的请求。例如,我尝试在同一个请求中添加多个邮箱地址,希望触发错误或发现潜在的漏洞。我还测试了竞争条件,通过在一个连接中发送多个邮箱,查看服务器是否会错误处理请求或将相同的验证令牌发送到不同的邮箱。然而,服务器再一次表现得毫无破绽。
还有一个问题!验证令牌长度太长,无法被猜测或通过暴力破解解决。例如,一个像 8034a6f3-cecd-49a4-9c43-2cf5976380a1
这样的令牌几乎不可能破解。
没有验证令牌,对我们黑客来说真是个麻烦事 :))
源代码审查
幸运的是,Mozilla 的产品是开源的。所以,我决定深入研究该产品 https://github.com/mozilla/blurts-server的开源代码,并花时间仔细审查。
我很幸运地发现了一个可以检索账户中所有添加邮箱的接口 /api/v1/user/breaches,同时还可以获取每个已验证邮箱关联的数据泄露信息。这是一个绝妙的发现!现在,让我们进一步探索它的功能,以便更好地理解。
getAllEmailsAndBreaches
函数的详细说明
通过搜索 getAllEmailsAndBreaches
函数,我发现该函数不仅检索已验证邮箱的数据,还会返回未验证邮箱的信息。
getAllEmailsAndBreaches
函数的设计目的是收集并返回与用户关联的邮箱地址及这些邮箱相关的数据泄露信息。以下是该函数的工作方式以及它在处理已验证和未验证邮箱方面的影响:
函数定义和参数
该函数接受两个参数:
1.user
:包含关于用户及其关联邮箱地址的信息。
2.allBreaches
:一个从数据库中获取的数据泄露记录数组。
数组初始化:
初始化了两个数组来存储已验证和未验证的电子邮件。verifiedEmails
数组将存储已确认有效的电子邮件,而 unverifiedEmails
数组则存储尚未验证的电子邮件。
错误处理:
该函数包含错误处理机制,以确保用户对象和泄露列表是有效的。
检索用户电子邮件:
这一行调用 getUserEmails
函数,从数据库中获取与用户关联的所有电子邮件地址。需要注意的是,这可能包括已验证和未验证的电子邮件 :))
处理已验证和未验证的电子邮件:
用户在 accounts.firefox.com 上的主要电子邮件始终首先进行处理,并被打包到 verifiedEmails
数组中:
接下来,函数遍历 monitoredEmails
。对于每个电子邮件,如果它被标记为已验证,则将其打包到 verifiedEmails
数组中。如果电子邮件未验证,则将其添加到 unverifiedEmails
数组中:
返回数据:
在函数的末尾,已验证和未验证的电子邮件作为对象的一部分返回。这意味着该函数暴露了未验证电子邮件的信息,如果处理不当,可能会导致安全隐患。
验证令牌在响应中泄露
如我们所见,未验证电子邮件返回的数据没有经过验证。当我访问这个端点时,发现未验证电子邮件的响应中泄露了验证令牌!
验证电子邮件端点
我能够抓取到验证令牌,并将其用于验证电子邮件端点来确认电子邮件。现在,由于这个配置错误,我可以轻松地监控任何我想要的电子邮件,而不需要电子邮件所有者的权限 :))
电子邮件已经通过验证,现在可以监控它了 :))
通过移除未使用的 API 端点 /user/breaches API GET 端点修复了漏洞
结论
总之,Mozilla Monitor 产品中的这个漏洞突显了彻底测试业务逻辑和访问控制的重要性。通过源代码审查,我发现了一个函数中的缺陷,使我能够绕过电子邮件验证,这展示了即使是小小的疏忽也可能导致重大的安全风险。Mozilla 迅速回应并解决了这个问题,体现了他们对用户安全的强烈承诺。我希望这篇总结能强调细致的代码分析和强有力的安全测试在识别和缓解此类漏洞中的价值。
更多资料分享可看:
Track 安全社区 — 掌控安全在线教育- Track 知识社区 - 掌控安全在线教育 - Powered by 掌控者
无偿领取网安资料+zkanzz
申明:本账号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关