Lab: Password reset broken logic
Lab: Password reset broken logic
Bu labda, uygulamanın şifre sıfırlama (password reset) mekanizmasında bulunan bir mantık hatası bulunuyor. Şifre sıfırlama sürecinde kullanılan token ile kullanıcı arasında doğru bir ilişki kurulmadığı için, bir kullanıcıya ait reset bilgisi başka bir kullanıcının şifresini değiştirmek için kullanılabiliyor.
Labın amacı, bu hatayı istismar ederek carlos kullanıcısının şifresini sıfırlamak ve ardından onun hesabına giriş yaparak My account sayfasına erişmek.
Teste başlamak için bana verilen bilgiler şunlardı:
- Kendi hesabım: wiener : peter
- Hedef kullanıcı: carlos
İlk olarak wiener:peter bilgileriyle uygulamaya giriş yaptım. Hesap sayfasında biraz dolaştım, profil alanlarını ve yapılabilecek işlemleri inceledim. Acaba doğrudan gözüme çarpan bir zafiyet var mı diye baktım ama bu aşamada işime yarayacak bir şey bulamadım.
Bunun üzerine çıkış yapmaya karar verdim ve Forgot password (şifre sıfırlama) fonksiyonuna yöneldim. Şifre sıfırlama sürecini başlatırken oluşan tüm HTTP isteklerini Burp Suite üzerinden yakalamaya başladım.

Reset linki üzerinden yeni şifre belirleme ekranına geldiğimde aşağıdaki isteğin gönderildiğini fark ettim İstek gövdesini incelediğimde şu parametrelerin gönderildiğini gördüm:

temp-forgot-password-token=bihtop2a7bo9biw73jmmy9euc5dywaps&username=wiener&new-password-1=pass&new-password-2=pass
Bu noktada durup düşündüm. Reset token’ı wiener için üretilmişti ama username parametresi tamamen istemciden gönderiliyordu . Yani sunucu tarafında “bu token gerçekten bu kullanıcıya mı ait?” gibi bir doğrulama yapılmıyor olabilirdi.
Bunu test etmek için isteği Burp Repeater ’a gönderdim ve yalnızca username parametresini değiştirdim. wiener yerine carlos yazdım. Token’a dokunmadım, aynen bıraktım.
Manipüle ettiğim istek şu hale geldi:

temp-forgot-password-token=bihtop2a7bo9biw73jmmy9euc5dywaps&username=carlos&new-password-1=pass&new-password-2=pass
Bu isteği gönderdiğimde sunucu herhangi bir hata döndürmedi ve işlemi kabul etti. Yani wiener için oluşturulmuş bir reset token’ı kullanarak carlos’un şifresini başarıyla değiştirmiş oldum .
Son olarak giriş sayfasına giderek:
- kullanıcı adı: carlos
- şifre: pass
bilgileriyle giriş yaptım. Carlos’un My account sayfasına eriştiğim anda lab başarıyla çözülmüş oldu.

Bu zafiyetin ortaya çıkmasının temel sebebi, şifre sıfırlama sürecinde:
- Reset token’ının hangi kullanıcıya ait olduğunun sunucu tarafında doğrulanmaması
- Kullanıcı bilgisinin istemciden gelen username parametresine güvenilerek belirlenmesi
Yani token ile kullanıcı arasında sağlam bir bağ kurulmamış olması.
Bu lab, şifre sıfırlama gibi kritik bir fonksiyonda yapılan küçük bir mantık hatasının, doğrudan hesap ele geçirmeye yol açabileceğini çok net bir şekilde gösteriyor.
Benim için bu labın en güzel tarafı, çözümü ezbere gitmeden; akışı izleyerek, parametreleri sorgulayarak ve mantığını okuyarak bulmuş olmamdı. Reset token’ı ile kullanıcı arasındaki bağın zayıf olduğunu fark ettiğim anda çözüm kendiliğinden ortaya çıktı.
Bir sonraki labda görüşmek üzere🌸







