GitHub подложен на атака, позволяваща хакване на достъпа до сметката чрез манипулации с Unicode символи в имейл. Проблемът е, че някои Unicode символи при прилагане на функции за преобразуване в малки или големи букви се трансформират в обикновени символи, близки по написание (когато няколко различни символа се трансформират в един символ — например, турският символ 'ı' и 'i' при преобразуване в главни букви се трансформират в 'I').
Преди проверката на входните параметри в някои услуги и приложения подадените от потребителя данни първо се преобразуват в главни или малки букви, а след това се проверяват в базата данни. Ако услугата допуска използване на unicode символи в логина или имейла, атакуващият може да използва подобни unicode символи за извършване на атака, манипулираща колизиите в таблиците за преобразуване на регистри (Unicode Case Mapping Collisions).
‘ß’.toUpperCase() == ‘ss’.toUpperCase() // 0x0131
‘K’.toLowerCase() == ‘K’.toLowerCase() // 0x212A
‘John@Gıthub.com’.toUpperCase() == ‘John@Github.com’.toUpperCase()
В GitHub атакуващият чрез формата за възстановяване на забравена парола да инициира изпращането на код за възстановяване на друг имейл, като посочеше в формата адрес, включващ unicode символ, предизвикващ колизия (например, вместо mike@example.org да се указва имейл mıke@example.org). Адресът минаваше проверка, тъй като се преобразуваше в главни букви и съвпадаше с исходния адрес (mike@example.org), но при изпращането на писмото се подставяше както е и кодът за възстановяване отиваше на фалшивия адрес (mıke@example.org).
Някои от , предизвикващи колизии при преобразуването на регистър:
ß 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
Източник: opennet.ru
