🖥️
Siber Güvenlik Notları
  • WHOAMI
    • 👨‍💻Who Am I?
  • 🔭Information Gathering
    • Pentest VM Setup
    • Passive Information Gathering
    • Subdomain Enumeration
    • Host Discovery
    • Port Scanning
    • Email Enumeration
    • Leaked Passwords
    • Zafiyet Araştırma
  • 🪟Windows Pentesting
    • Windows Privilege Escalation
    • Windows Persistence
    • Windows Lateral Movement
    • AV Evasion
  • 🐧Linux Pentesting
    • Linux Privilege Escalation
    • Linux Persistence
    • Linux Lateral Movement
  • 🕸️Web Application Pentesting
    • Web Pentest Checklist
    • SQL Injection
    • NoSQL Injection
    • OS Command Injection
    • XXE Injection
    • SSTI
    • XSS
    • CSRF
    • SSRF
    • LFI/RFI
    • Insecure Deserialization
    • CORS Misconfiguration
    • Directory Traversal
    • File Upload
    • Broken Authentication
    • Broken Access Control
    • Business Logic
    • Race Conditions
    • Web Cache Deception
    • AWS Testing
    • Web Cache Poisoning
    • Clickjacking
    • API Testing
    • Broken Link Hijacking
    • HTTP Request Smuggling
    • LLM
    • HTTP Host Header Attack
    • OAuth Zafiyetleri
    • GraphQL API
    • HTTP Parameter Pollution
    • Configuration and Deployment Management Testing
    • Information Disclosure
    • Prototype pollution
    • JWT
  • 🖲️Network Service Pentesting
    • 📘Active Directory Services
      • Bleeding Edge Vulns
      • Misconfigs
      • Domain Trust
      • DNS (53)
      • Kerberos (88)
      • LDAP (389,636)
      • RPC WMI (135)
      • SMB (445)
      • WinRM - 5985
    • 📂FTP - 21
    • 🔐SSH - 22
    • 🤣Telnet - 23
    • SMTP - 25
    • TFTP - 69 UDP
    • HTTP - 80,443
      • Apache
      • Joomla
      • Drupal
      • Wordpress
      • WEBDAV
      • PHP
      • Laravel
    • IMAP/POP3 - 110,143,993,995
    • SNMP - 161
    • Rservices - 512
    • IPMI - 623
    • Rsync - 873
    • MSSQL - 1433
    • Oracle TNS - 1521
    • NFS - 2049
    • Docker
    • Grafana - 3000
    • MySQL - 3306
    • RDP - 3389
    • Postgresql - 5432
    • Redis - 6379
    • JDWP - 8000
    • MongoDB - 27017
  • 🕸️Network Pentesting
    • ARP Poisoning
  • 📞Android Pentesting
    • Android Derleme Süreci
    • Reversing
    • Rooting
    • Burp Suite Sertifikası
    • SSL Pinning Bypass
    • Patching
    • MobSF Kurulumu
    • Flutter Pentesting
  • 📰Teori
    • Güvenlik Ürünleri
    • OSI
    • Security Principles
  • Diger
    • Hacking Gadgets
      • Wifi Pineapple
      • Pwnagotchi
    • Stego
    • Buffer Overflow
    • Phishing
    • Nessus
    • DDOS Attacks
    • MSFConsole
  • ⏪Reverse
    • GCC Reverse
    • Python Reverse
    • Flare VM
    • Remnux
  • 🛜Wireless Pentesting
    • Wireless Pentest
    • Wireless V2
Powered by GitBook
On this page
  • Race Conditions Zafiyeti Nedir?
  • Yöntemler
  • Race Condition ile Limit Aşma
  • Race Condition ile Rate Limit Bypass
  • Farklı Endpointler ile Race Condition
  • Tek Endpoint ile Race Condition
  • Zamana Bağlı Tokenler ile Race Condition
  • Veritabanı Kaynaklı Race Condition
  • Önlemler
  • Kaynaklar

Was this helpful?

  1. Web Application Pentesting

Race Conditions

PreviousBusiness LogicNextWeb Cache Deception

Last updated 19 days ago

Was this helpful?

Race Conditions Zafiyeti Nedir?

  • Race condition, iş mantığı kusurlarıyla yakından ilişkili yaygın bir güvenlik açığı türüdür. Web siteleri istekleri yeterli güvenlik önlemleri olmadan eş zamanlı olarak işlediğinde ortaya çıkarlar.

  • Bu durum, birden fazla farklı iş parçacığının aynı anda aynı verilerle etkileşime girmesine yol açarak uygulamada istenmeyen davranışlara neden olan bir “çarpışma” ile sonuçlanabilir. Bir yarış koşulu saldırısı, kasıtlı çarpışmalara neden olmak ve bu istenmeyen davranışı kötü niyetli amaçlarla kullanmak için dikkatlice zamanlanmış istekleri kullanır.

  • Bir çarpışmanın mümkün olduğu süre “race window” olarak bilinir. Bu, örneğin veritabanı ile iki etkileşim arasındaki saniyenin bir kısmı olabilir.

Yöntemler

Race Condition ile Limit Aşma

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.

Race Condition ile Rate Limit Bypass

Login istekleri gibi rate limit olması gereken işlemlerde çok hızlı istek gönderdiğimizde hemen bloklanmıyor olabilir.

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=1,
                           engine=Engine.BURP2
                           )
                           
    passwords = wordlists.clipboard
    
    for password in passwords:
        engine.queue(target.req, password, gate='1')
 
    engine.openGate('1')

def handleResponse(req, interesting):
    table.add(req)

Farklı Endpointler ile Race Condition

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.

Tek Endpoint ile Race Condition

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.

Zamana Bağlı Tokenler ile Race Condition

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.

Veritabanı Kaynaklı Race Condition

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.

Önlemler

  • Farklı depolama yerlerinden gelen verileri karıştırmaktan kaçının.

  • Veri deposunun eşzamanlılık özelliklerini kullanarak hassas uç noktaların durum değişikliklerini atomik hale getirmesini sağlayın. Örneğin, ödemenin sepet değeriyle eşleştiğini kontrol etmek ve siparişi onaylamak için tek bir veritabanı işlemi kullanın.

  • Derinlemesine bir savunma önlemi olarak, sütun benzersizliği kısıtlamaları gibi veri deposu bütünlüğü ve tutarlılık özelliklerinden yararlanın.

  • Bir veri depolama katmanını diğerinin güvenliğini sağlamak için kullanmaya çalışmayın. Örneğin, oturumlar veritabanlarında limit aşımı saldırılarını önlemek için uygun değildir.

  • Oturum işleme çerçevenizin oturumları dahili olarak tutarlı tuttuğundan emin olun. Oturum değişkenlerini toplu iş yerine tek tek güncellemek cazip bir optimizasyon olabilir, ancak son derece tehlikelidir. Bu ORM'ler için de geçerlidir; işlemler gibi kavramları gizleyerek, bunların tüm sorumluluğunu üstlenirler.

  • Bazı mimarilerde, sunucu tarafı durumundan tamamen kaçınmak uygun olabilir. Bunun yerine, örneğin JWT'leri kullanarak durumu istemci tarafına iletmek için şifreleme kullanabilirsiniz.

Kaynaklar

Portswigger Academy:

🕸️
https://portswigger.net/web-security/race-conditions