使用類似的 Unicode 字元繞過身份驗證

GitHub上 原來是 容易受到允許您透過操縱電子郵件中的 Unicode 字元來取得帳戶存取權限的攻擊。 問題在於,某些Unicode 字元在使用小寫或大寫轉換函數時,會被翻譯為樣式相似的常規字元(當多個不同的字元被翻譯為一個字元時- 例如,土耳其語字元“ı”和“i ”) " 轉換為大寫時將轉換為“I”)。

在某些服務和應用程式中檢查登入參數之前,使用者提供的資料首先被轉換為大寫或小寫,然後在資料庫中檢查。 如果服務允許在登入名稱或電子郵件中使用 unicode 字符,則攻擊者可以使用類似的 unicode 字符來執行操縱 Unicode 大小寫映射衝突中的衝突的攻擊。

'ß'.toUpperCase() == 'ss'.toUpperCase() // 0x0131
'K'.toLowerCase() == 'K'.toLowerCase() // 0x212A
'John@Gıthub.com'.toUpperCase() == '[電子郵件保護]'.toUpperCase()

GitHub 上的攻擊者 可能 透過用於恢復忘記密碼的表單,透過在表單中指示包含導致衝突的 unicode 字元的位址(例如,而不是 [電子郵件保護] 已指定電子郵件 mı[電子郵件保護])。 該地址通過了測試,因為它被轉換為大寫並且與原始地址相符([電子郵件保護] ),但在發送信件時,它被按原樣替換,並且恢復代碼被發送到假地址(mı[電子郵件保護]).

一些 символов,在轉換暫存器時引起衝突:

ß 0x00DF SS
0x0131 我
ſ 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

來源: opennet.ru

添加評論