GitHub podléhá útoku, který umožňuje převzít přístup k účtu prostřednictvím manipulace s Unicode znaky v e-mailu. Problém souvisí s tím, že některé Unicode znaky se při aplikaci funkcí pro převod na malá nebo velká písmena transliterují na běžné znaky, které mají podobný tvar (když se několik různých znaků transliteruje na jeden znak — například turecké znaky „ı“ a „i“ se při převodu na velká písmena převádějí na „I“).
Před kontrolou přihlašovacích parametrů u některých služeb a aplikací se uživatelská data nejprve převádějí na velká nebo malá písmena a poté se kontrolují v databázi. Pokud služba umožňuje použití unicode znaků v přihlašovacích údajích nebo e-mailu, může útočník využít podobné unicode znaky k provedení útoku manipulujícího s kolizemi v tabulkách převodu znaků (kolize vzorů Unicode Case Mapping).
‘ß’.toUpperCase() == ‘ss’.toUpperCase() // 0x0131
‘K’.toLowerCase() == ‘K’.toLowerCase() // 0x212A
‘John@Gıthub.com’.toUpperCase() == ‘John@Github.com’.toUpperCase()
Na GitHubu útočník prostřednictvím formuláře pro obnovu zapomenutého hesla iniciovat odeslání kódu pro obnovení na jiný e-mail uvedením v rámci formuláře adresy, která zahrnovala unicode znak vyvolávající kolizi (například místo mike@example.org byl uveden e-mail mıke@example.org). Adresa prošla kontrolou, protože se převáděla na velká písmena a shodovala se s původní adresou (mike@example.org), ale při odeslání e-mailu se odesílala tak, jak byla, a kód pro obnovení odcházel na falešnou adresu (mıke@example.org).
Některé z , vyvolávající kolize při převodu registru:
ß 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
Zdroj: opennet.ru
