Usando caracteres Unicode semelhantes para ignorar a autenticação

GitHub virado é suscetível a um ataque que permite obter acesso a uma conta por meio da manipulação de caracteres Unicode no email. O problema é que alguns caracteres Unicode, ao usar as funções de conversão de letras minúsculas ou maiúsculas, são traduzidos em caracteres regulares de estilo semelhante (quando vários caracteres diferentes são traduzidos em um caractere - por exemplo, o caractere turco "ı" e "i " quando convertido para maiúsculas são convertidos para "I").

Antes de verificar os parâmetros de login em alguns serviços e aplicativos, os dados fornecidos pelo usuário são primeiro convertidos para letras maiúsculas ou minúsculas e depois verificados no banco de dados. Se um serviço permitir o uso de caracteres Unicode em um login ou e-mail, um invasor poderá usar caracteres Unicode semelhantes para realizar um ataque que manipula colisões em colisões de mapeamento de casos Unicode.

'ß'.toUpperCase() == 'ss'.toUpperCase() // 0x0131
'K'.toLowerCase() == 'K'.toLowerCase() // 0x212A
'John@Gıthub.com'.toUpperCase() == '[email protegido]'.toUpperCase()

Atacante no GitHub poderia através do formulário de recuperação de senha esquecida, inicie o envio de um código de recuperação para outro e-mail indicando no formulário um endereço que inclua um caractere unicode que cause uma colisão (por exemplo, em vez de [email protegido] e-mail m foi especificadoı[email protegido]). O endereço passou no teste porque foi convertido para letras maiúsculas e correspondeu ao endereço original ([email protegido] ), mas ao enviar a carta ela foi substituída como está e o código de recuperação foi enviado para um endereço falso (mı[email protegido]).

Alguns caracteres, causando colisões ao converter o registro:

0x00DF SS
eu 0x0131 eu
0x017F S
0xFB00FF
fi 0xFB01 FI
fl 0xFB02 FL
ffi 0xFB03 FFI
0xFB04 FFL
0xFB05ST
0xFB06ST
K 0x212A k

Fonte: opennet.ru

Adicionar um comentário