Перед проверкой параметров входа во многих сервисах и приложениях переданные пользователем данные вначале преобразуются в нижний регистр, а затем проверяются в БД. Если сервис допускает применение unicode-символов в email, то атакующий может использовать похожие unicode-символы для совершения атаки, манипулирующией коллизиями в таблицах преобразования регистра символов (Unicode Case Mapping Collisions).
'ß'.toLowerCase() == 'SS'.toLowerCase() 'John@Gıthub.com'.toLowerCase() == 'John@Github.com'.toLowerCase()
В GitHub атакующий мог через форму восстановления забытого пароля инициировать отправку кода восстановления на другой email через указание в форме адреса, включающего unicode-символ, вызывающий коллизию (например, вместо mike@example.org указывался email 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
Источник: http://www.opennet.ru/opennews/art.shtml?num=52047
