GitHub jest narażony na atak, który pozwala na przejęcie dostępu do konta poprzez manipulację znakami Unicode w e-mailu. Problem polega na tym, że niektóre znaki Unicode podczas zastosowania funkcji konwersji na małe lub duże litery są zmieniane na zwykłe znaki o podobnym kształcie (gdy kilka różnych znaków jest tłumaczonych na jeden znak — na przykład turecki znak „ı” i „i” podczas konwersji na wielką literę przekształcają się w „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 dopuszcza używanie znaków unicode w loginie lub e-mailu, atakujący może wykorzystać podobne znaki unicode do przeprowadzenia ataku, manipulującego kolizjami w tabelach konwersji wielkości liter (Unicode Case Mapping Collisions).
‘ß’.toUpperCase() == ‘ss’.toUpperCase() // 0x0131
‘K’.toLowerCase() == ‘K’.toLowerCase() // 0x212A
‘John@Gıthub.com’.toUpperCase() == ‘John@Github.com’.toUpperCase()
Na GitHubie atakujący za pomocą formularza przywracania zapomnianego hasła zainicjować wysyłkę kodu weryfikacyjnego na inny e-mail, wskazując w formularzu adres zawierający znak unicode, który wywołuje kolizję (na przykład zamiast mike@example.org podano e-mail mıke@example.org). Adres przeszedł kontrolę, ponieważ został przekształcony na wielką literę i zgadzał się z pierwotnym adresem (mike@example.org), ale przy wysyłce e-maila podstawiano go tak, jak jest, a kod weryfikacyjny szedł na fałszywy adres (mıke@example.org).
Niektóre z , wywołujących kolizje przy konwersji wielkości liter:
ß 0x00DF SS
ı 0x0131 I
ſ 0x017F S
ff 0xFB00 FF
fi 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
