top of page

Lab: Authentication bypass via flawed state machine

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

Lab: Authentication bypass via flawed state machine

Bu labda, login sürecindeki adımların belirli bir sırayla kesinlikle gerçekleşeceği varsayımına dayanan hatalı bir state machine bulunuyor. Uygulama, bazı adımların atlanamayacağını düşünüyor; ancak bu varsayım backend tarafında düzgün şekilde enforce edilmediği için ciddi bir authentication bypass ortaya çıkıyor.

Amaç; bu mantık hatasını istismar ederek kimlik doğrulamayı atlamak , admin paneline erişmek ve carlos kullanıcısını silmek.

Lab boyunca kendi hesabımı kullandım. Giriş yapmak için verilen bilgiler: wiener : peter

Burp açıkken normal bir login işlemi yaptım ve istekleri izlemeye başladım. Burada dikkatimi çeken ilk şey şuydu:

Login işleminden sonra uygulama beni doğrudan ana sayfaya yönlendirmiyor. Araya bir rol seçme adımı koyuyor.

Lab: Authentication bypass via flawed state machine

Akış kabaca şöyle ilerliyor:

- Kullanıcı adı ve şifre gönderiliyor

- Login başarılı oluyor

- Kullanıcıdan rol seçmesi isteniyor

- Daha sonra ana sayfaya yönlendiriliyor

- Bu noktada aklıma şu soru geldi: “Bu rol seçme adımı gerçekten zorunlu mu, yoksa sadece frontend tarafında mı varsayılıyor?”

Login sırasında Burp’te ilk olarak şu isteği görüyorum:

Lab: Authentication bypass via flawed state machine

Bu istekte kullanıcı adı, şifre ve CSRF token gönderiliyor. Bu isteği forward ettikten hemen sonra ikinci bir istek geliyor

GET /role-selector
Lab: Authentication bypass via flawed state machine

Yani uygulama şunu varsayıyor:

“Login olduysan, mutlaka role-selector çalışır.”

İşte bu varsayım, labın kırıldığı yer.

Burada denemek istediğim şey basitti:

Rol seçme adımı gerçekten zorunluysa, bu isteği atladığımda sistem beni durdurmalı.

Bu yüzden Burp’te:

- POST /login isteğini forward ettim

Lab: Authentication bypass via flawed state machine

- Ardından gelen GET /role-selector isteğini drop ettim (sunucuya hiç göndermedim)

Sonrasında tarayıcıdan manuel olarak lab’ın ana sayfasına gittim.

Lab: Authentication bypass via flawed state machine

Rol seçimi hiç yapılmamış olmasına rağmen uygulama:

- Session’ı geçerli kabul etti

- Rol bilgisini kontrol etmeden devam etti

- Ve rolümü varsayılan olarak admin gibi değerlendirdi

Bunu da hemen fark ediyorsunuz çünkü normalde erişilemeyen /admin paneline erişim açılıyor.

Yani sistemin mantığı şu hale gelmiş oluyor:

“Rol seçilmediyse → en güvenli varsayım admin olsun.”

Bu da klasik bir fail-open state machine hatası.

Admin yetkisiyle:

- /admin paneline girdim

Lab: Authentication bypass via flawed state machine

- carlos kullanıcısını sildim

Ve lab başarıyla tamamlandım

Lab: Authentication bypass via flawed state machine

Çünkü:

- Kullanıcı, yetkilendirme sürecinin zorunlu bir adımını atlayarak

- Sistemin kendisine en yüksek yetkiyi vermesini sağlıyor

Bu bir input manipulation değil, tamamen login akışının yanlış modellenmesi ile ilgili bir mantık hatası.

Bu lab bize şunu net şekilde gösteriyor:

- State machine’ler varsayımlarla değil, kontrollerle çalışmalı

- Zorunlu adımlar backend tarafında enforce edilmeli

- “Eksik adım = güvenli varsayım” yaklaşımı felaketle sonuçlanır

Özetle:

Fail-safe değil, fail-open davranan her auth flow kırılmaya mahkûmdur.

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

 
 
bottom of page