Race Conditions
Last updated
Was this helpful?
Last updated
Was this helpful?
Race condition, bilgisayar programlama ve sistem tasarımında, iki veya daha fazla işlem veya thread'in aynı kaynağa erişim sağlayarak işlemlerini belirli bir sırayla yürütmek zorunda olduğu durumlarda ortaya çıkan bir güvenlik açığıdır. Bu zafiyet, işlemlerin beklenmedik bir sırayla gerçekleştirilmesi durumunda sistemin hatalı davranmasına veya güvenlik açıklarının oluşmasına neden olabilir.
Örnek olarak, iki thread'in aynı dosyaya yazma işlemi yapması durumunda, her iki thread de dosyanın mevcut durumunu kontrol edip ardından yazma işlemini gerçekleştirmek isteyebilir. Eğer bu işlemler arasındaki zamanlama tam olarak kontrol edilmezse, bir thread dosyayı kontrol edip yazmaya başlamadan önce diğer thread'in dosyayı değiştirmiş olabileceği bir durum oluşabilir. Bu, dosyanın beklenmedik şekilde bozulmasına veya hassas verilerin yanlış kişiler tarafından erişilmesine yol açabilir.
Sadece bir kere kullanılabilen bir fonksiyonun isteklerini paralel olarak gönderirsek birden fazla kez kabul edilebilir.
Örneğin kupon istekleri aynı anda gönderildiğinde aynı kupon birden fazla kez kullanılabilir.
Login istekleri gibi rate limit olması gereken işlemlerde çok hızlı istek gönderdiğimizde hemen bloklanmıyor olabilir.
Sırayla gönderilmesi gereken istekler aynı anda gönderildiğinde hatalı çalışabilir.
Örneğin sepete ürün ekleme ve satın alma istekleri aynı anda gönderildiğinde bedavaya ürün alınabilir.
Farklı verilere sahip istekler aynı anda gönderildiğinde hatalı durumlar oluşabilir.
Örneğin eposta değiştirme fonksiyonunda farklı epostalar ile aynı anda istekler gönderiyoruz. Bu şekilde gelen onaylama mailine tıkladığımızda bize ait olmayan bir postayı onaylayabiliriz.
Eğer kullanıcıya özel olarak oluşturulan tokenler sadece zamana bağlı olarak oluşturuluyorsa aynı anda istekler göndererek başkasının tokenini ele geçirebiliriz.
Örneğin parola sıfırlama bağlantısındaki token zamana göre üretiliyor. Aynı anda hem kendimize hem hedefe parola sıfırlama bağlantısı gönderirsek bizim tokenimiz ile hedefin tokeni aynı olacaktır.
Bir istekte kullanılan bir veri kısa süreliğine null gibi bir değerde kalıyor ise bu durum zafiyet oluşturabilir.
Örneğin hesap oluşturma ve hesap onaylama için istekler gönderiliyor. Hesap oluşturma sırasında bir token oluşturuluyor ve veritabanına kaydediliyor ve onaylama isteğinde bu token kullanılıyor. Eğer veritabanında bu değer çok kısa süreliğine null gibi bir değerde kalıyor ise boş bir token ile onaylama kısmını bypass edebiliriz. Bunun için kayıt ve boş token içeren onaylama isteği paralel yollarız.
Portswigger Academy: https://portswigger.net/web-security/race-conditions