Używanie podobnych znaków Unicode w celu ominięcia uwierzytelniania

GitHub skończyło się jest podatny na atak, który pozwala przejąć dostęp do konta poprzez manipulację znakami Unicode w wiadomościach e-mail. Problem polega na tym, że niektóre znaki Unicode podczas korzystania z funkcji konwersji małych i wielkich liter są tłumaczone na zwykłe znaki o podobnym stylu (kiedy kilka różnych znaków jest tłumaczonych na jeden znak - na przykład turecki znak „ı” i „i " po konwersji na wielkie litery są konwertowane na "I").

Przed sprawdzeniem parametrów logowania w niektórych usługach i aplikacjach dane podane przez użytkownika są najpierw konwertowane na wielkie lub małe litery, a następnie sprawdzane w bazie danych. Jeśli usługa umożliwia użycie znaków Unicode w loginie lub wiadomości e-mail, osoba atakująca może użyć podobnych znaków Unicode w celu przeprowadzenia ataku manipulującego kolizjami w przypadku kolizji mapowania przypadków Unicode.

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

Atak na GitHubie mógł poprzez formularz odzyskiwania zapomnianego hasła zainicjuj wysyłkę kodu odzyskiwania na inny adres e-mail, wskazując w formularzu adres zawierający znak Unicode powodujący kolizję (np. [email chroniony] e-mail m został wskazanyı[email chroniony]). Adres przeszedł test, ponieważ został zamieniony na wielkie litery i odpowiadał oryginalnemu adresowi ([email chroniony] ), jednak przy wysyłaniu listu został on podstawiony tak jak jest i kod odzyskiwania został wysłany na fałszywy adres (m.inı[email chroniony]).

Niektóre z znaków, powodując kolizje podczas konwersji rejestru:

ß 0x00DF SS
mam 0x0131 I
─ 0x017F S
ff 0xFB00 FF
─ 0xFB01 FI
fl 0xFB02 FL
ffi 0xFB03 FFI
ffl 0xFB04 FFL
ſt 0xFB05 ST
st 0xFB06 ST
K 0x212A k

Źródło: opennet.ru

Dodaj komentarz