Buyukweb
OWASP Top 10 2021: Web Uygulama Güvenlik Açıkları ve Korunma Rehberi

OWASP Top 10 2021: Web Uygulama Güvenlik Açıkları ve Korunma Rehberi

OWASP Top 10 2021 listesi, A01-A10 kategorilerinin saldırgan-savunucu perspektifi, prepared statement ve CSP kod örnekleri, ModSecurity OWASP CRS ve Imunify360 ile cPanel hosting katmanında pratik koruma rehberi.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü18 dakika okuma

OWASP Top 10 2021: Web Uygulama Güvenlik Açıkları ve Korunma Rehberi

Pentester gözüyle hosting müşterilerine tek bir tavsiye vermem gerekse şudur: "OWASP Top 10'u oku, bitir." 2003'ten beri Open Worldwide Application Security Project (OWASP) topluluğu, dünya genelinde sömürülen en yaygın web uygulama açıklarını derliyor; her 3-4 yılda bir liste güncelleniyor. Şu an geçerli sürüm 2021 — bir sonraki güncelleme 2025 sonu/2026 başında bekleniyordu, ama sürüldü; 2026 ortası itibariyle 2021 listesi hâlâ standart referans.

Bu yazı, on açığı saldırgan-savunucu çift perspektifinden anlatıyor. Her kategoride: pratik örnek, sömürü vektörü, kod seviyesinde savunma ve barındırma katmanında ne yapılır. Buyukweb'in cPanel paketlerinde ModSecurity + OWASP Core Rule Set (CRS), Imunify360 WAF/AV ve JetBackup haftalık snapshot bu kategorilerin önemli bir bölümünü saldırganın eline geçmeden engelliyor — ama uygulama katmanındaki güvenli kod yine geliştiricinin sorumluluğu.

Buyukweb perspektifi: Listeyi sadece geliştiriciler için değil, sysadminler ve site sahipleri için de yazdık. cPanel hosting paketlerinde ModSecurity OWASP CRS standart açık; Imunify360 sayesinde bilinen exploit imzaları otomatik engellenir; JetBackup haftalık yedekle compromised olunsa bile geri dönüş 30 dakika. VDS müşterileri ise kendi WAF/Imunify360 lisansını kuruyor — destek ekibimiz başlangıç konfigürasyonu için yardımcı olur.

OWASP Top 10 2017 → 2021: Ne Değişti?

2021 listesi, 2017'den üç önemli yenilikle geldi:

  • A04 Insecure Design (yeni) — kod hatası değil, tasarım hatasını ayrı kategori olarak kabul etti. Geliştirme aşamasında tehdit modelleme yapılmamış olması başlı başına açık.
  • A08 Software and Data Integrity Failures (yeni) — supply chain saldırılarını (npm package take-over, CI/CD pipeline manipülasyonu) öne çıkardı. SolarWinds, Codecov olayları sonrasında.
  • A10 SSRF (yeni) — Server-Side Request Forgery, eski listede "diğer" altında ezilirdi; bulut metadata endpoint sömürüleri (Capital One sızıntısı 2019) sonrası ayrı kategori oldu.

Buna karşılık eski A4 XML External Entities (XXE) ve A8 Insecure Deserialization ayrı kategori olmaktan çıkıp Injection / Integrity Failures içine sokuldu. A03 Injection sıralamada düştü ama hâlâ kritik — özellikle SQLi ve XSS klasikleri devam ediyor.

Şimdi sırasıyla on kategoriye girelim.


A01 — Broken Access Control

OWASP'in 2021 numara biri. Test edilen uygulamaların %94'ünde bir form yetki açığı bulundu. Bu kategoride uygulama, kullanıcının yapmaya yetkisi olmayan işlemi yapmasına izin veriyor.

Tipik vektörler:

  • IDOR (Insecure Direct Object Reference): /fatura?id=12345 URL'inde kullanıcı id'yi 12346 yapıp başkasının faturasını görüyor.
  • Force browsing: /admin paneline doğrudan erişim, login kontrolü olmadan.
  • JWT manipulation: Token alg: none olarak değiştirilip imza doğrulamasız kabul ediliyor; ya da alg: HS256RS256 confusion ile public key HMAC anahtarı yerine kullanılıyor.
  • Privilege escalation: Normal kullanıcı, request'e role=admin parametresi eklediğinde ya da hidden form field'ı düzenlediğinde admin yetkisi alıyor.
  • CORS misconfiguration: Access-Control-Allow-Origin: * + Allow-Credentials: true kombinasyonu — başka domain JS'i kullanıcının cookie'siyle API'ye istek atabiliyor.

Sömürü örneği (IDOR):

# Kullanici A login, kendi faturasini gorur
curl -b "session=abc123" https://hedef.com/api/invoice/1001
# {"id":1001, "user":"A", "amount":500}

# id'yi degistir, B kullanicisinin faturasi
curl -b "session=abc123" https://hedef.com/api/invoice/1002
# {"id":1002, "user":"B", "amount":2500}  ← yetkisiz okuma!

Savunma:

  • Server-side authorization her endpoint'te zorunlu. Frontend'de "admin butonunu gizleme" yetki kontrolü değildir.
  • Object-level kontrol: SELECT * FROM invoice WHERE id=? AND user_id=? — sadece kullanıcının kendi kaydını dön.
  • Deny by default: Yeni endpoint açıldığında varsayılan "yetkisiz"; allowlist ile yetki ver.
  • JWT için alg: none ve algoritma confusion'ı reddet: kütüphane seviyesinde geçerli algoritmaları whitelist'le.
  • CORS için kesin origin listesi, asla *.

WordPress özelinde tipik açık: özel bir plugin'in AJAX endpoint'i is_user_logged_in() kontrolü yapıyor ama current_user_can('manage_options') yetki kontrolü yapmıyor — abone seviyesi bir kullanıcı admin işlevini çağırabiliyor. Imunify360'in WordPress malware tarayıcısı bilinen vulnerable plugin sürümlerini tespit edip uyarı veriyor.


A02 — Cryptographic Failures

Eski adıyla "Sensitive Data Exposure". Şifrelenmesi gereken veri ya açık ya zayıf algoritmayla şifrelenmiş.

Tipik problemler:

  • TLS 1.0 / 1.1 hâlâ açık — 2021'de IETF deprecated; modern tarayıcılar bağlantıyı reddeder ama bazı API endpoint'leri unutuluyor.
  • Zayıf cipher suite: RC4, 3DES, MD5-based MAC. POODLE, BEAST, SWEET32 saldırılarına açık.
  • Sertifika doğrulama atlama: mobile/server-to-server kodda InsecureSkipVerify: true veya cURL'de -k flag prod'a sızmış.
  • Plaintext password storage: SHA1, MD5 ya da düz metin parola — leaks olduğunda saniyeler içinde kırılıyor.
  • Hard-coded secret: API key, DB şifresi git repo'ya commit edilmiş; GitHub'da AKIA[A-Z0-9] regex'iyle public secret aranır.
  • Eski / kırılmış kripto: ECB mode AES (örüntü sızdırır), kendi yazılmış crypto, weak random (rand() yerine crypto.randomBytes()).

Saldırgan perspektifi:

# SSL Labs ile zayif konfig tespiti
curl -s "https://api.ssllabs.com/api/v3/analyze?host=hedef.com" | jq '.endpoints[0].grade'
# "F" → TLS 1.0 + RC4

# testssl.sh ile detay
testssl.sh --severity HIGH hedef.com
# Sertifika expired, weak DH params, SWEET32...

Savunma:

  • TLS 1.2 minimum, ideal 1.3. Mozilla'nın "Modern" konfigürasyon şablonunu kopyala (ssl-config.mozilla.org).
  • Qualys SSL Labs A+ skoru hedef. HSTS, OCSP stapling, modern cipher suite.
  • Parola hash'i: bcrypt (cost ≥ 12), Argon2id, scrypt. SHA256 + salt yetmez — bcrypt yavaş olduğu için brute force pratik değil.
  • Secret yönetimi: HashiCorp Vault veya bulut sağlayıcı secret manager benzeri çözüm; ya da .env + .gitignore. Pre-commit hook olarak gitleaks veya trufflehog ile sızıntı taraması.
  • Sertifika doğrulamayı asla kapatma; staging için kendi CA'nı kur.

cPanel'in Let's Encrypt AutoSSL'i her domain için 90 günlük sertifika alıp 60. günde otomatik yeniliyor; sertifika konfigürasyon hatası riskini ortadan kaldırıyor. Buyukweb VDS müşterileri certbot ya da acme.sh kuruyor; SSL Labs A+ için cipher suite ayarı sysadmin sorumluluğu.


A03 — Injection

Klasiklerin klasiği. SQL, NoSQL, OS Command, LDAP, XPath, XML — kullanıcı girdisinin sorgu/komut olarak yorumlanması.

SQL Injection

// GUVENSIZ — string concat
$query = "SELECT * FROM users WHERE username = '${username}' AND password = '${password}'";

// Saldirgan girdi: ' OR '1'='1
// Olusan SQL: ... WHERE username = '' OR '1'='1' AND password = ...
// Tum kayitlar donuyor, ilk user'a login olunuyor
// GUVENLI — Prepared Statement (PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password_hash = ?");
$stmt->execute([$username, $passwordHash]);
$user = $stmt->fetch();
# Python — psycopg2 prepared
cur.execute(
    "SELECT id, email FROM users WHERE email = %s AND active = TRUE",
    (email,)
)
# String concat YAPILMAZ: f"... WHERE email = '{email}'" yasak.

sqlmap ile otomatik tarama:

sqlmap -u "https://hedef.com/product?id=1" --batch --dbs
# Veritabani listesi gelirse: SQLi confirmed.

Cross-Site Scripting (XSS)

Üç türü var:

  • Reflected XSS: ?search=<script>alert(1)</script> URL'i — sunucu girdiyi sayfada echo ediyor.
  • Stored XSS: Yorum kutusuna script yazılıyor, DB'ye kaydediliyor, her ziyaretçide çalışıyor.
  • DOM XSS: Sunucu güvenli ama JavaScript document.location.hash veya innerHTML'i sanitize etmeden yazıyor.

Savunma:

  • Output encoding: HTML context'inde htmlspecialchars() (PHP), {{ var }} (Jinja/Vue/React JSX otomatik), textContent (DOM'da innerHTML yerine).
  • Content Security Policy (CSP): Inline script'i yasakla.
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.cloudflare.com; style-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; frame-ancestors 'none';
  • Cookie HttpOnly + Secure + SameSite=Strict — JavaScript cookie'yi okuyamaz, çalan XSS'in işine yaramaz.
  • DOMPurify kullanıcı HTML'i kabul ediyorsanız (yorum, mesaj) — whitelist tabanlı temizler.

OS Command Injection

# GUVENSIZ
os.system("ping -c 1 " + user_input)
# Girdi: 8.8.8.8; rm -rf /
# GUVENLI — subprocess + list args, shell=False
import subprocess
subprocess.run(["ping", "-c", "1", user_input], shell=False, check=True, timeout=5)

LDAP, XML (XXE), NoSQL Injection

  • LDAP: *)(|(uid=* filter bypass — LDAP query builder kütüphanesi kullan, manual concat yapma.
  • XXE: XML parser'da external entity'i kapat (libxml_disable_entity_loader(true) PHP, DocumentBuilderFactory.setFeature("disallow-doctype-decl", true) Java).
  • NoSQL (MongoDB): {$gt: ""} operator injection — input'u string'e cast et, JSON parametre kabul etme.

ModSecurity OWASP CRS, en yaygın SQLi/XSS payload'larını HTTP request seviyesinde yakalayıp 403 dönüyor; cPanel paketlerimizde varsayılan açık. PortSwigger Academy ve Burp Suite Community öğrenmek için en iyi kaynaklar; OWASP ZAP açık kaynak alternatif.


A04 — Insecure Design

Kod hatası değil, tasarım hatası. Geliştirme aşamasında "bu fonksiyonu kötüye nasıl kullanırlar?" sorusu hiç sorulmamış.

Klasik örnek: Şifre sıfırlama formu. Kullanıcı email'i girer, "kod gönderildi" mesajı gelir. Sonra altta "kod" alanı + 6 hane sayı. Kod 6 hane → 1.000.000 kombinasyon, ama rate limit yoksa saldırgan tüm kombinasyonları 5 dakikada deniyor.

Bu kod açığı değil — kontrol algoritması doğru çalışıyor. Tasarım açığı: kod uzunluğu yetersiz, rate limit yok, brute force tespiti yok.

Diğer örnekler:

  • Sınırsız ürün satın alma: Stok 1, ama race condition ile aynı anda 5 sipariş geçiyor.
  • Sınırsız kupon kullanımı: %50 indirim kuponu sonsuz kullanım — abuse case düşünülmemiş.
  • Hesap oluşturma + email doğrulama olmadan trial başlama: Saldırgan binlerce sahte hesap açıp ücretsiz kaynağı bitiriyor.
  • CSRF token'ı yok / GET request'le state-changing işlem: /transfer?to=attacker&amount=1000 link'i kullanıcı tıklayınca para gönderiyor.

Savunma:

  • Threat modeling: Sprint planlamada her feature için "abuse case" yaz. STRIDE (Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation) çerçevesi pratik.
  • Rate limiting her sensitive endpoint'te (login, password reset, OTP, signup, comment). nginx limit_req_zone, Cloudflare Rate Limiting, Imunify360 brute force koruma.
  • CSRF token her state-changing form'da; SameSite=Strict cookie ile kombine.
  • Idempotency key sipariş, ödeme, transfer endpoint'lerinde — race condition önler.
  • Secure design pattern'ler: Defense-in-depth, fail-secure, least privilege, separation of duties.

A05 — Security Misconfiguration

OWASP'in "düşük asılı meyve" kategorisi. Kurulum sonrası varsayılan ayarları değiştirmemek, gereksiz servisleri açık bırakmak.

Sık karşılaşılanlar:

  • Default credentials: admin/admin, root/root — IoT cihaz, db arayüzü, panel girişi.
  • Verbose error message: Stack trace, DB connection string, dosya yolu sayfaya basılıyor.
  • Directory listing açık: /uploads/ URL'i açıldığında tüm dosyalar listeleniyor.
  • X-Powered-By, Server, X-AspNet-Version header'ları — saldırgana platform/sürüm bilgisi sızdırıyor.
  • Yedek dosyalar erişilebilir: backup.sql, config.php.bak, .git/ klasörü web root'ta.
  • CORS *, HSTS yok, CSP yok, X-Frame-Options yok → clickjacking, mixed content riskleri.
  • Açık panel: phpMyAdmin / Adminer / cPanel WHM IP whitelist'siz internete açık.

cPanel + Apache hardening önerileri:

# .htaccess — bilgi sizdirmayi azalt
ServerSignature Off
ServerTokens Prod
Header unset X-Powered-By
Header unset Server
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"

# Yedek/git dosyalari yasakla
<FilesMatch "\.(bak|sql|env|gitignore)$">
    Require all denied
</FilesMatch>
RedirectMatch 404 /\.git

cPanel'in ModSecurity Configuration paneli OWASP CRS'i tek tıkla açıyor; özel kural eklemek için /etc/apache2/conf.d/modsec/whitelist.conf veya cPanel UI'dan custom rule. Buyukweb müşterilerinde varsayılan paranoia level 1 — yanlış pozitifi düşük tutar; yüksek güvenlik isteyen ise level 2-3'e çıkarabilir (destek ekibi yardımcı olur).


A06 — Vulnerable and Outdated Components

Üçüncü parti kütüphane / framework / CMS sürümü açıklı. CVE çıkmış, public exploit var, ama güncellenmemiş.

Klasik vakalar:

  • Equifax 2017: Apache Struts CVE-2017-5638; yama 2 ay önce yayınlanmış, yamalanmamış. 147 milyon kişinin verisi.
  • Log4Shell 2021: Log4j 2.x JNDI lookup CVE-2021-44228; günler içinde dünya çapında istismar.
  • WordPress eklentileri: Tüm WP saldırılarının %52'si plugin açıklarından (Wordfence raporu). Yıllık güncellenmemiş "kişisel" plugin'ler en büyük risk.

Tespit ve yönetim:

# PHP / Composer
composer audit
# Vulnerable paket listesi + onerilen surum

# Node.js / npm
npm audit
npm audit fix --force   # dikkat: breaking olabilir

# Python / pip
pip install pip-audit
pip-audit

# Genel — Snyk CLI
snyk test
snyk monitor   # surekli izleme
  • Snyk ücretsiz public repo + ücretli kurumsal — CVE veritabanı + license risk.
  • Dependabot GitHub'da repo başına otomatik PR açıyor — minor/patch sürümleri için merge zaten otomatize edilebilir.
  • GitHub Advisory Database ücretsiz, public; her dilden paket için CVE arama.
  • OSV.dev Google'ın açık CVE veritabanı, çoklu paket yöneticisi destekli.

WordPress özelinde:

  • Core, plugin, tema → otomatik güncelleme (auto-update) varsayılan açık olsun.
  • 6 ay+ güncellenmemiş plugin'i kaldır — geliştirici terk etmiş demektir.
  • WPScan ile envanter tarama: wpscan --url https://site.com --enumerate vp.

cPanel / CloudLinux otomatik PHP yama:

CloudLinux KernelCare + HardenedPHP sayesinde eski PHP sürümleri (5.6, 7.0, 7.4 vb.) güvenlik patch'leri ile uzun süre kullanılabilir. Buyukweb cPanel paketlerinde 5.6'dan 8.4'e kadar tüm sürümler PHP Selector ile aktif; CloudLinux ekibi her PHP sürümüne backported security fix uyguluyor. Yine de geliştirme tarafında uygulamanı PHP 8.2+ ile çalıştırmak hem performans hem ekosistem desteği için doğru.


A07 — Identification and Authentication Failures

Login, oturum yönetimi, parola politikası — ya zayıf ya tamamen yok.

Tipik açıklar:

  • Zayıf parola politikası: 123456, password kabul ediliyor.
  • Brute force koruması yok: /login endpoint'ine sınırsız deneme.
  • Session fixation: Login sonrası session ID değişmiyor; saldırgan kendi ID'sini kurbana yutturup ele geçiriyor.
  • Session timeout yok: Kullanıcı laptop'ı kapatıyor, oturum 1 ay açık.
  • MFA opsiyonel ya da yok.
  • Password reset token enumeration: "Bu email kayıtlı" / "kayıtlı değil" mesajı farklı → kullanıcı listesi enumere ediliyor.
  • Credential stuffing'e karşı koruma yok: Başka site'tan sızan parola kombinasyonları yağdırılıyor; %1-2 başarı oranıyla bile binlerce hesap düşüyor.

Savunma:

// Yanlis: SHA1
$hash = sha1($password);   // GPU ile saniyede milyarlarca dener

// Dogru: bcrypt cost 12
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
// Dogrulama
if (password_verify($_POST['password'], $row['hash'])) {
    // login OK
    if (password_needs_rehash($row['hash'], PASSWORD_BCRYPT, ['cost' => 12])) {
        $newHash = password_hash($_POST['password'], PASSWORD_BCRYPT, ['cost' => 12]);
        // DB'ye yaz
    }
}
  • NIST SP 800-63B parola rehberi: Minimum 8 karakter, maksimum 64 karakter, yasaklı liste (HaveIBeenPwned API ile pwned password sorgu), karmaşıklık zorlaması (büyük harf + sembol vb.) artık önerilmiyor — kullanıcılar predictable hale getiriyor.
  • MFA zorunlu (admin için kesinlikle): TOTP (Google Authenticator), WebAuthn / Passkey, donanım anahtar (YubiKey).
  • Brute force koruması: Hesap başına 5 yanlış sonra 15 dakika kilit; IP başına global rate limit. Imunify360'ın brute force korumasi cPanel/SSH/WordPress girişlerinde otomatik aktif.
  • Session sonrası yeni session ID üret (PHP'de session_regenerate_id(true)).
  • Password reset: Generic mesaj ("eğer email kayıtlıysa link gönderildi"), token tek kullanımlık + kısa TTL (15 dk).

WordPress özelinde wp-admin için iki faktör (Wordfence Login Security, miniOrange 2FA) + özel admin URL (WPS Hide Login) kombinasyonu, brute force riski %95+ düşürür.


A08 — Software and Data Integrity Failures

Kod, kütüphane, infrastructure pipeline integrity'sinin doğrulanmaması.

Saldırı vektörleri:

  • CI/CD pipeline manipülasyonu: GitHub Actions'a leak'lenmiş PAT ile kötü amaçlı commit; build aşamasında secret çekme.
  • Supply chain attack: Kullanılan npm/PyPI/Composer paketinin yeni sürümü kötü amaçlı yayınlanıyor; event-stream, ua-parser-js, coa, rc vakaları.
  • Typosquatting: requetsrequests benzeri yanlış yazımla yayınlanmış paket.
  • Insecure deserialization: PHP unserialize(), Python pickle.load(), Java ObjectInputStream — saldırgan-kontrollü veri deserialize edildiğinde gadget chain ile RCE.
// TEHLIKELI — saldirgan controlled cookie deserialize
$data = unserialize($_COOKIE['user']);

// GUVENLI — JSON
$data = json_decode($_COOKIE['user'], true);

Savunma:

  • Subresource Integrity (SRI): CDN'den çekilen JS/CSS'e integrity="sha384-..." attribute. CDN compromised olursa hash mismatch ile script çalışmaz.
  • Package lock file commit: package-lock.json, composer.lock, Pipfile.lock — deterministik install.
  • Signed commits & signed releases: GPG sign + npm publish --provenance (npm Sigstore entegrasyonu).
  • CI runner secret minimumu: Her job için sadece gerektiği kadar token; OIDC ile short-lived credential.
  • Insecure deserialization yasakla: unserialize() yerine JSON; kaçınılmazsa unserialize($data, ['allowed_classes' => false]).
  • Software Bill of Materials (SBOM): SPDX/CycloneDX formatında bağımlılık listesi; CISA 2026 itibariyle federal projelerde zorunlu.

GitHub'ın Dependabot + CodeQL + secret scanning kombinasyonu açık kaynak/private repo'lar için ücretsiz; supply chain riskinin önemli kısmını otomatize edilebilir hale getiriyor.


A09 — Security Logging and Monitoring Failures

Log yok, varsa kimse bakmıyor, alarm yok. Ortalama bir saldırı 2026 itibariyle 207 gün içinde fark ediliyor (IBM Cost of a Data Breach raporu).

Tipik problemler:

  • Login başarı/başarısızlık logu yok.
  • Kritik aksiyon logu yok: Yetki değişikliği, parola sıfırlama, ödeme refund.
  • Log içinde plaintext parola / kart numarası / token var — log dosyası leak olunca felaket.
  • Log retention 7 gün — saldırı 207 gün önce başlamışsa nasıl forensic yapacaksın?
  • Alert pipeline yok: Log toplanıyor ama olağanüstü durum alarmı gitmiyor.

Savunma:

  • Yapılandırılmış log: JSON format (ELK, Loki, CloudWatch) — string parse'a vakit kaybetme.
  • Sensitive field redaction: Parola, token, kart no log'a yazılmadan önce maskele.
  • Retention 90 gün minimum, mümkünse 1 yıl; WORM (write-once-read-many) storage saldırgan log'u silemesin.
  • SIEM entegrasyonu: Wazuh (open source), Splunk, Elastic SIEM. Korelasyonla anomali tespit.
  • Alert kuralları: 5 dakikada 100+ failed login, 1 IP'den 50 farklı kullanıcı denemesi, geographically impossible login (TR'den login + 2 dk sonra US'tan), admin yetkilendirme dışı saatte.

Buyukweb cPanel ortamında log:

# cPanel domain access log
~/access-logs/example.com

# Apache error log
~/logs/example.com.error.log

# WordPress wp-content/debug.log

# ModSecurity audit log (yetkili teknik destekle)
/usr/local/apache/logs/modsec_audit.log

# Imunify360 olay
imunify360-cli incidents list

Müşteriler isterse logrotate + rsync ile log'u kendi dış SIEM'e gönderebilir; Wazuh agent kurulumunu destek ekibi bilgilendiriyor.


A10 — Server-Side Request Forgery (SSRF)

Sunucu, kullanıcı kontrolündeki URL'e istek atıyor; iç ağ, cloud metadata endpoint, file:// scheme erişilebilir hale geliyor.

Klasik vektör:

POST /api/fetch-image HTTP/1.1
Content-Type: application/json

{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"}

Bulut metadata endpoint'leri (169.254.169.254 link-local IP, çoğu bulut sağlayıcı standart kullanır) IAM credentials ve instance metadata sunar — sunucunun kendi içinden çağrıldığında çoğu sürümünde kimlik doğrulama gerektirmez. Capital One 2019 sızıntısı tam bu yolla gerçekleşti.

Diğer vektörler:

  • file:///etc/passwd — local file read.
  • gopher://internal-redis:6379/_FLUSHALL — iç servisleri komutla.
  • http://localhost:9200/_cluster/health — internal Elasticsearch erişimi.
  • DNS rebinding: ilk istek public IP, ikinci istek 127.0.0.1.

ImageMagick + URL handler örneği: Saldırgan SVG yükler, içinde <image href="http://internal-host"> — ImageMagick fetch eder, response saldırgana döner.

Savunma:

  • Allowlist domain: Sadece bilinen domain'lere request izinli; kullanıcı keyfi URL veremiyor.
  • IP filtering: Private IP range'leri (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16) reddet. DNS resolve ettikten sonra kontrol et — hostname allowlist'e güvenme, DNS rebinding açar.
  • Şema kısıtlaması: Sadece http:// ve https://. file://, gopher://, dict://, ftp://, ldap:// reddet.
  • Bulut metadata token-based erişim: Modern instance metadata service sürümleri (örn. token tabanlı v2 protokoller) zorunlu; basit GET 169.254.169.254/latest/meta-data artık çalışmamalı.
  • Outbound firewall: Uygulama sunucusu sadece spesifik dış IP'lere outbound erişebilsin.

ModSecurity OWASP CRS: Pratik Konfigürasyon

OWASP Core Rule Set, en yaygın saldırı imzalarını HTTP istek seviyesinde tespit eder. Apache + cPanel'de kurulumu standart:

# cPanel sunucusunda CRS sürümü
cat /etc/apache2/conf.d/modsec_vendor_configs/OWASP3/INSTALL
# OWASP CRS v3.3.x

# Paranoia level (1=düşük FP, 4=yüksek koruma)
grep "tx.paranoia_level" /etc/apache2/conf.d/modsec_vendor_configs/OWASP3/crs-setup.conf
# setvar:tx.paranoia_level=1

# Custom kural ekleme — cPanel UI: ModSecurity Configuration → Add Rule
SecRule REQUEST_URI "@contains /xmlrpc.php" \
    "id:1001,phase:1,deny,status:403,msg:'WordPress xmlrpc disabled'"

# False positive durumunda whitelist
SecRule REQUEST_URI "@beginsWith /admin/upload" \
    "id:1002,phase:1,pass,nolog,ctl:ruleEngine=Off"

cPanel hosting paketlerinde varsayılan paranoia level 1; Imunify360 yüklü ise WAF kuralları onun da imzalarıyla zenginleşiyor. Kendi VDS'inizde /etc/modsecurity/crs/ altına manuel kurulum gerekiyor — destek dökümanlarımızda adım-adım anlatım var.


Defense-in-Depth: Tek Sayfalık Checklist

Onun katmanı tek tek kontrol etmek için kısa kontrol listesi:

  • TLS 1.2+ açık, TLS 1.0/1.1 kapalı; SSL Labs A+ skoru.
  • HSTS, CSP, X-Frame-Options, X-Content-Type-Options header'ları aktif.
  • ModSecurity OWASP CRS açık (cPanel) veya manuel kurulu (VDS).
  • Imunify360 veya eşdeğer WAF/AV aktif; brute force koruma çalışıyor.
  • Bcrypt cost ≥ 12 (Argon2id tercih); SHA1/MD5 yok.
  • MFA admin/root için zorunlu; user için opsiyonel.
  • CSRF token her state-changing form'da; SameSite=Strict cookie.
  • Prepared statement SQL'in tek yolu; string concat yasak.
  • Output encoding her template motorunda otomatik.
  • CSP inline script'i yasaklayan strict mod.
  • composer audit / npm audit / pip-audit CI'da.
  • Dependabot/Snyk açık; CVE bildirimi geliyor.
  • JetBackup haftalık snapshot alınıyor; restore prosedürü test edildi.
  • Log retention 90+ gün; sensitive field redaction var.
  • Outbound allowlist — uygulama sunucusu rastgele IP'ye çıkamasın.
  • Bulut metadata token-based erişim zorunlu (bulut altyapı kullanıyorsanız).
  • /admin, phpMyAdmin, panel IP whitelist arkasında.

Sıkça Sorulan Sorular

OWASP Top 10'u ezberleyince güvenli kod yazar mıyım?

Top 10 başlangıçtır, bitiş değil. Daha kapsamlı çerçeveler: OWASP ASVS (Application Security Verification Standard) üç seviye gereksinimle 280+ kontrol; OWASP SAMM olgunluk modeli. Top 10 = en sık görülen kategoriler, ASVS = denetlenebilir gereksinimler.

ModSecurity tek başına yeterli mi?

Hayır, layered defense. ModSecurity HTTP request seviyesinde imza tabanlı engeller — bilinmeyen 0-day veya iş mantığı açıklarını yakalamaz. Güvenli kod + WAF + Imunify360 + log monitoring dörtlüsü beraber çalışır.

Pentest gerekli mi, hangi sıklıkta?

Üretim erişimi olan, ödeme alan ya da hassas veri tutan sistemde yıllık external pentest + büyük feature öncesi internal pentest standart. ASVS Level 2 hedefliyorsanız "annual third-party penetration test" gereksinim. Buyukweb müşterilerinden bazıları için TS ISO 27001 denetim kapsamında pentest yapılıyor.

Buyukweb cPanel'de ModSecurity custom kuralları nasıl ekleniyor?

cPanel WHM girişi → Security Center → ModSecurity Tools → Add Rule. UI üzerinden SecRule syntax'ı yazıyorsunuz; kayıt sonrası tüm cPanel hesaplarında aktif. Bireysel cPanel hesabınız için .htaccess'te <IfModule mod_security2.c> bloğu içinde SecRuleRemoveById ile rule disable veya custom kural mümkün; teknik destek ekibi yardım ediyor.

Backup ne kadar önemli ve OWASP'la ilişkisi ne?

A09 logging + integrity'yle bağlı. Compromised olduğunuzda forensic için log gerekli, temiz hale dönüş için yedek. Buyukweb'in JetBackup tabanlı haftalık snapshot sistemi ile son temiz hale 1 tıkla geri dönüş mümkün — ransomware/web shell senaryolarında iş sürekliliği için kritik. VDS müşterileri snapshot rotation kendileri yönetiyor; cPanel hosting müşterileri için JetBackup standart.


OWASP Top 10, web uygulama güvenliğinin temelidir. Sömürü tarafından düşünmek (saldırgan zihniyeti) ve katmanlı savunma kurmak (geliştirme + altyapı + monitoring) iki tarafı birden bilmenin avantajı. Buyukweb'in Türkiye Tier 3 veri merkezindeki cPanel paketleri ModSecurity OWASP CRS, Imunify360, JetBackup ile A05/A06/A07/A08/A09 kategorilerinin önemli bölümünü altyapı seviyesinde örtüyor; A01-A04 ve A10 ise uygulamanızın güvenli kodlanmasıyla çözülüyor.

Sorularınız ya da pentest sonrası bulguları için 0850 302 60 70 destek hattımıza, ya da iletişim formu üzerinden yazabilirsiniz.

İlgili Büyükweb Hizmetleri

Web uygulama güvenliğini ciddiye alanlar için Türkiye Tier 3 veri merkezimizdeki paketler:

Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.

Güvenlik & SSL İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#owasp#güvenlik#ssl#siber güvenlik#sunucu güvenliği

Bu yazıyı paylaş