UUID Insecurities

支持 HackTricks

基本信息

通用唯一标识符 (UUID) 是 用于唯一标识计算机系统中信息的 128 位数字。UUID 在需要唯一标识符而无需中央协调的应用程序中至关重要。它们通常用作数据库键,并可以引用各种元素,如文档和会话。

UUID 旨在唯一且 难以猜测。它们以特定格式结构化,分为五组,表示为 32 个十六进制数字。UUID 有不同的版本,每个版本服务于不同的目的:

  • UUID v1 是基于时间的,包含时间戳、时钟序列和节点 ID(MAC 地址),但可能会暴露系统信息。

  • UUID v2 类似于 v1,但包含针对本地域的修改(使用不广泛)。

  • UUID v3 和 v5 使用命名空间和名称的哈希值生成 UUID,v3 使用 MD5,v5 使用 SHA-1。

  • UUID v4 几乎完全随机生成,提供高水平的匿名性,但存在轻微的重复风险。

请注意,UUID 的版本和子版本通常出现在 UUID 内的相同位置。例如在: 12345678 - abcd - 1a56 - a539 - 103755193864 xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx

  • M 的位置 表示 UUID 的 版本。在上面的示例中,它是 UUID v1

  • N 的位置 表示 UUID 变体。

三明治攻击

“三明治攻击”是一种特定类型的攻击,利用 UUID v1 在 Web 应用程序中生成的可预测性,特别是在密码重置等功能中。UUID v1 是基于时间、时钟序列和节点的 MAC 地址生成的,如果攻击者能够获取一些在时间上接近生成的 UUID,这可能使其在某种程度上可预测。

示例

想象一个使用 UUID v1 生成密码重置链接的 Web 应用程序。攻击者可能如何利用这一点来获得未授权访问:

  1. 初始设置

  • 攻击者控制两个电子邮件帐户:`attacker1@acme.com` 和 `attacker2@acme.com`。

  • 目标的电子邮件帐户是 `victim@acme.com`。

  1. 执行

  • 攻击者为第一个帐户(`attacker1@acme.com`)触发密码重置,并收到一个带有 UUID 的密码重置链接,比如 `99874128-7592-11e9-8201-bb2f15014a14`。

  • 紧接着,攻击者为受害者的帐户(`victim@acme.com`)触发密码重置,然后迅速为第二个攻击者控制的帐户(`attacker2@acme.com`)触发。

  • 攻击者收到第二个帐户的重置链接,UUID 为 `998796b4-7592-11e9-8201-bb2f15014a14`。

  1. 分析

  • 攻击者现在有两个在时间上接近生成的 UUID(`99874128` 和 `998796b4`)。考虑到基于时间的 UUID 的顺序特性,受害者帐户的 UUID 很可能落在这两个值之间。

  1. 暴力攻击

  • 攻击者使用工具生成这两个值之间的 UUID,并通过尝试访问密码重置链接(例如,`https://www.acme.com/reset/<generated-UUID>`)来测试每个生成的 UUID。

  • 如果 Web 应用程序没有充分限制速率或阻止此类尝试,攻击者可以快速测试范围内的所有可能 UUID。

  1. 获得访问权限

  • 一旦发现受害者密码重置链接的正确 UUID,攻击者就可以重置受害者的密码并获得未授权访问其帐户的权限。

工具

参考文献

支持 HackTricks

Last updated