UUID Insecurities

Support HackTricks

Basic Information

Identificadores Universais Únicos (UUIDs) são números de 128 bits usados para identificar informações de forma única em sistemas computacionais. UUIDs são essenciais em aplicações onde identificadores únicos são necessários sem coordenação central. Eles são comumente usados como chaves de banco de dados e podem se referir a vários elementos, como documentos e sessões.

UUIDs são projetados para serem únicos e difíceis de adivinhar. Eles são estruturados em um formato específico, divididos em cinco grupos representados como 32 dígitos hexadecimais. Existem diferentes versões de UUIDs, cada uma servindo a diferentes propósitos:

  • UUID v1 é baseado em tempo, incorporando o timestamp, sequência de relógio e ID do nó (endereço MAC), mas pode potencialmente expor informações do sistema.

  • UUID v2 é semelhante ao v1, mas inclui modificações para domínios locais (não amplamente utilizado).

  • UUID v3 e v5 geram UUIDs usando valores de hash de namespace e nome, com v3 usando MD5 e v5 usando SHA-1.

  • UUID v4 é gerado quase que totalmente de forma aleatória, proporcionando um alto nível de anonimato, mas com um leve risco de duplicatas.

Observe que a versão e subversão do UUID geralmente aparecem na mesma posição dentro do UUID. Por exemplo em: 12345678 - abcd - 1a56 - a539 - 103755193864 xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx

  • A posição do M indica a versão do UUID. No exemplo acima, é UUID v1.

  • A posição do N indica a variante do UUID.

Sandwich attack

O "Sandwich Attack" é um tipo específico de ataque que explora a previsibilidade da geração de UUID v1 em aplicações web, particularmente em recursos como redefinições de senha. UUID v1 é gerado com base no tempo, sequência de relógio e no endereço MAC do nó, o que pode torná-lo um tanto previsível se um atacante conseguir obter alguns desses UUIDs gerados próximos no tempo.

Example

Imagine uma aplicação web que usa UUID v1 para gerar links de redefinição de senha. Aqui está como um atacante pode explorar isso para obter acesso não autorizado:

  1. Configuração Inicial:

  • O atacante controla duas contas de email: `attacker1@acme.com` e `attacker2@acme.com`.

  • A conta de email do alvo é `victim@acme.com`.

  1. Execução:

  • O atacante aciona uma redefinição de senha para sua primeira conta (`attacker1@acme.com`) e recebe um link de redefinição de senha com um UUID, digamos `99874128-7592-11e9-8201-bb2f15014a14`.

  • Imediatamente depois, o atacante aciona uma redefinição de senha para a conta da vítima (`victim@acme.com`) e então rapidamente para a segunda conta controlada pelo atacante (`attacker2@acme.com`).

  • O atacante recebe um link de redefinição para a segunda conta com um UUID, digamos `998796b4-7592-11e9-8201-bb2f15014a14`.

  1. Análise:

  • O atacante agora tem dois UUIDs gerados próximos no tempo (`99874128` e `998796b4`). Dada a natureza sequencial dos UUIDs baseados em tempo, o UUID para a conta da vítima provavelmente estará entre esses dois valores.

  1. Ataque de Força Bruta:

  • O atacante usa uma ferramenta para gerar UUIDs entre esses dois valores e testa cada UUID gerado tentando acessar o link de redefinição de senha (por exemplo, `https://www.acme.com/reset/<generated-UUID>`).

  • Se a aplicação web não limitar adequadamente a taxa ou bloquear tais tentativas, o atacante pode rapidamente testar todos os UUIDs possíveis na faixa.

  1. Acesso Obtido:

  • Uma vez que o UUID correto para o link de redefinição de senha da vítima é descoberto, o atacante pode redefinir a senha da vítima e obter acesso não autorizado à sua conta.

Tools

References

Support HackTricks

Last updated