Lab: Bypassing access controls using email address parsing discrepancies
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.”

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

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:

abcfoo@ginandjuice.shopAma sonuç:
Registration blocked for security reasons
Aynı denemeyi UTF-8 ile yaptım:
=?utf-8?q?=61=62=63?=abc@ginandjuice.shop
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
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
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ü.

Linke tıklayıp hesabı aktive ettim.
Hesaba giriş yaptıktan sonra fark ettiğim şey şuydu: Admin panel erişilebilir durumdaydı.

- Admin panel’e girdim
- Kullanıcılar listesinden carlos ’u sildim

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 🌸







