CORS Misconfiguration
OWASP A05 difficulty: kolay-orta
CORS Misconfiguration, Access-Control-Allow-Origin (ACAO) ve Access-Control-Allow-Credentials (ACAC) başlıklarının gevşek ayarlanmasıyla oluşur. Yanlış yapılandırılmış bir API, saldırgan sitesinin kurbanın oturumu ile kimliğe bağlı veriyi okumasına izin verebilir. CSRF’den farkı: CORS zafiyeti yanıt gövdesini okumayı mümkün kılar.
Tehlikeli desenler
Section titled “Tehlikeli desenler”# 1) Origin'i körü körüne yansıtma + credentialAccess-Control-Allow-Origin: https://attacker.exampleAccess-Control-Allow-Credentials: true
# 2) null origin'e güvenmeAccess-Control-Allow-Origin: nullAccess-Control-Allow-Credentials: true
# 3) Zayıf regex / string kontrolü# victim.com → victim.com.attacker.com / evilvictim.comACAO: * ile ACAC: true tarayıcı tarafından reddedilir; asıl risk dinamik origin yansıtma + credentials’tır. * credentialsız yalnızca public veriyi okutur (düşük etki).
Preflight vs simple request
Section titled “Preflight vs simple request”# Simple: GET/POST form-urlencoded — preflight yok# Non-simple: JSON + custom header → OPTIONSAccess-Control-Allow-Headers: Authorization, Content-TypeAccess-Control-Allow-Methods: GET, POST, PUTPreflight gevşekse bile asıl GET/POST yanıtında da aynı yansıma olmalı.
Sömürü — veri çalma PoC
Section titled “Sömürü — veri çalma PoC”null origin (sandboxed iframe):
<iframe sandbox="allow-scripts allow-top-navigation allow-forms"srcdoc=""></iframe>Metodoloji
Section titled “Metodoloji”-
Origin değiştir — Origin: https://attacker.example ; ACAO yansıyor mu?
-
Credential doğrula — ACAC: true ? Cookie ile hassas JSON dönüyor mu?
-
Kenar durumları :
Origin: nullOrigin: https://victim.com.attacker.exampleOrigin: https://attacker.victim.comOrigin: https://victim.com%60.attacker.exampleOrigin: http://victim.comOrigin: https://victim.com:evilOrigin: https://victim.com. -
Trust listesi — partner subdomain; XSS’li trusted origin → CORS zinciri.
-
Varyant path’ler — /api/me , /graphql , dosya indirme uçları.
Etki sınırları
Section titled “Etki sınırları”SameSite=Strict/Lax → cross-site cookie kısıtlanabilirSameSite=None; Secure → CSWSH/CORS riski sürerBearer Authorization header JS'te → CORS cookie çalmaz; XSS ayrıHızlı tarama
Section titled “Hızlı tarama”curl -i https://api.victim.com/me \ -H 'Origin: https://evil.example' \ -H 'Cookie: session=...' | grep -i access-controlcurl -i -X OPTIONS https://api.victim.com/me \ -H 'Origin: https://evil.example' \ -H 'Access-Control-Request-Method: PUT' | grep -i access-controlTrusted subdomain XSS zinciri
Section titled “Trusted subdomain XSS zinciri”ACAO yalnızca https://app.victim.com yansıtıyor → app'te XSS bul → XSS ile fetch api.victim.com credentials:include → veri exfilChecklist
Section titled “Checklist”□ ACAO reflection + ACAC true□ null origin□ suffix/prefix bypass□ OPTIONS vs GET tutarlılığı□ Hassas endpoint (/me, /tokens, /export)□ PoC HTML ile kanıtSaldırı zinciri
Section titled “Saldırı zinciri”Origin reflection + ACAC → PoC fetch /me → PII / token dump