A normalização do Unicode leva ao controle da conta

Mar 27 2023
Olá a todos, encontrei uma falha que me deu acesso a contas de usuário usando a normalização Unicode durante minha análise de segurança do aplicativo da web. Resumo: uma vulnerabilidade de segurança do sistema que permite que invasores executem um ataque de controle de conta.

Olá pessoal,

Encontrei uma falha que me deu acesso a contas de usuário usando normalização Unicode durante minha análise de segurança do aplicativo da web.

Normalização Unicode

Resumo:

Uma vulnerabilidade de segurança do sistema que permite que invasores executem um ataque de controle de conta. O problema surge como resultado da ausência de testes de normalização Unicode suficientes no sistema. Os invasores podem aproveitar essa falha para burlar medidas de segurança e obter acesso não autorizado a contas de usuário.

O que é um caractere Unicode?

Unicode é um conjunto de caracteres universal ou um padrão que define todos os caracteres necessários para escrever a maioria dos idiomas ativos usados ​​em computadores em um local.
Ele aspira a ser, e em grande parte já é, um superconjunto de todos os outros conjuntos de caracteres codificados.

Detalhes da vulnerabilidade:

A falha está no procedimento de normalização Unicode do sistema.
A normalização Unicode é o processo de padronização de representações distintas do mesmo caractere para eliminar problemas como várias codificações de caracteres para o mesmo caractere.
Como o sistema não executa verificações de normalização Unicode suficientes nas entradas do usuário, os invasores podem tirar proveito dessa falha.

Os invasores podem inserir uma string Unicode especialmente construída que se assemelha à string legal, mas contém diferentes caracteres Unicode.
O sistema não consegue diferenciar entre as duas strings, permitindo que o invasor burle a segurança e acesse a conta da vítima.

Passos para reproduzir:

  1. Crie uma conta no site com um endereço de e-mail que contenha caracteres Unicode. Por exemplo, use um endereço de e-mail como “té [email protected] ” em vez de “ [email protected] ”.

3. Usando uma linguagem de programação que suporte a normalização Unicode (como Python), execute uma normalização Unicode no endereço de e-mail usando um formulário de normalização diferente do formulário usado pelo site. Por exemplo, use o formulário de normalização NFKD em vez do formulário de normalização NFC.

4. Use o endereço de e-mail normalizado para fazer login na conta novamente. Desta vez, a tentativa de login deve ser bem-sucedida, mesmo que o endereço de e-mail tenha sido modificado pelo processo de normalização.

5. Se a tentativa de login for bem-sucedida, o invasor assumiu com sucesso a conta do usuário.

6. O invasor agora pode acessar as informações pessoais da vítima, detalhes de pagamento e outros dados confidenciais.

Prova de conceito:

  1. Crie uma conta com um endereço de e-mail contendo caracteres Unicode

2. Execute uma normalização Unicode no endereço de e-mail

normalized_email = unicodedata.normalize('NFKD', email)

import unicodedata

email = "té[email protected]"

# Normalize the email address using NFKD
normalized_email = unicodedata.normalize('NFKD', email)

print(normalized_email)

3. Faça login com o endereço de e-mail normalizado

dados = {“email”: e-mail_normalizado, “senha”: senha} resposta = requests.post(“https://example.com/api/login", json=dados)

4. O sistema autentica a conta com sucesso

afirmar resposta.status_code == 200

Recomendação:

Todos os caracteres Unicode inseridos pelos usuários devem ser verificados pelo site, e aqueles que são proibidos devem ser rejeitados.
O problema pode ser reduzido implementando uma lista branca de caracteres Unicode permitidos e formulários de normalização.
Adicionar autenticação de dois fatores e ficar de olho em comportamentos incomuns de login também pode impedir o acesso ilegal a contas de usuário.