6. Server-Side Request Forgery (SSRF)
Seri No: #6 | Türkçe Karşılığı: Sunucu Taraflı İstek Sahteciliği
Giriş & Çalışma Sebebi
SSRF, saldırganın hedef web sunucusunu bir “vekil” (proxy) gibi kullanarak, sunucunun erişebildiği iç (yerel) veya dış ağlara istek atmasını sağlamasıdır. Zafiyetin asıl sebebi, uygulamanın kullanıcıdan bir URL alıp (Örn: Profil resmi yüklemek için dışarıdan URL verme) bu URL’in güvenli olup olmadığını kontrol etmeden arka planda istek başlatmasıdır. Dış dünyaya kapalı olan iç ağdaki (localhost, AWS metadata servisleri vb.) servisler, sunucuya güvendiği için saldırgan sunucu arkasına sızmış olur.
Payload & Mekanizma
Normalde bir resmi sunucuya çekmek için kullanılan URL parametresi: ?image_url=[https://safe-site.com/avatar.jpg](https://safe-site.com/avatar.jpg)
Saldırganın AWS bulut sunucusunun gizli kimlik bilgilerini sızdırmak için kullandığı Payload:
https://hedefsite.com/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
Çalışma Sebebi: Sunucu, gelen IP adresini doğrulamadan arka planda HTTP isteği başlatır.
169.254.169.254adresi AWS’in yerel metadata servisidir ve dış dünyaya kapalıdır ancak sunucu içinden gelen bu isteğe doğrudan API anahtarlarını yanıt olarak döner.
7. Cross-Site Request Forgery (CSRF)
Seri No: #7 | Türkçe Karşılığı: Siteler Arası İstek Sahteciliği
Giriş & Çalışma Sebebi
CSRF, bir saldırganın, oturumu açık olan bir mağdur kullanıcıya (onun haberi olmadan) web uygulamasında istekler yaptırmasıdır (Örn: Şifre değiştirme, para transferi). Zafiyetin asıl sebebi, tarayıcıların otomatik çalışma mantığıdır. Tarayıcılar, bir siteye istek atarken o siteye ait olan çerezleri (Cookies/Session) isteğin içine otomatik olarak ekler. Uygulama, gelen isteğin kullanıcının kendi iradesiyle mi yoksa arkada açık olan zararlı bir sekmeyle mi tetiklendiğini ayırt edemez.
Payload & Mekanizma
Saldırganın kendi hazırladığı zararlı bir web sitesine gömdüğü gizli HTML formu (Payload):
<form action="https://banka.com/transfer" method="POST" id="csrfForm">
<input type="hidden" name="to_account" value="saldirgan_hesap" />
<input type="hidden" name="amount" value="5000" />
</form>
<script>document.getElementById('csrfForm').submit();</script>
Çalışma Sebebi: Mağdur kullanıcı bu zararlı sayfayı ziyaret ettiğinde, JavaScript formu otomatik gönderir. Tarayıcı,
banka.com‘a istek giderken kullanıcının aktif oturum çerezini de ekler. Banka sunucusu, isteğin arkadaki zararlı siteden geldiğini anlamaz, çerezi geçerli sayıp parayı transfer eder.
8. Server-Side Template Injection (SSTI)
Seri No: #8 | Türkçe Karşılığı: Sunucu Taraflı Şablon Enjeksiyonu
Giriş & Çalışma Sebebi
SSTI, web uygulamalarında dinamik sayfalar üretmek için kullanılan şablon motorlarına (Jinja2, Twig, Blade vb.) saldırganın zararlı kod enjekte etmesidir. Zafiyetin asıl sebebi, geliştiricinin kullanıcı girdisini şablonun bir “verisi” olarak değil, doğrudan şablon kodunun bir “parçası” olarak şablon motoruna teslim etmesidir. Şablon motoru bu girdiyi çalıştırılabilir bir kod olarak yorumlar ve bu durum genellikle sunucuda tam yetkiyle kod çalıştırılmasına (RCE) yol açar.
Payload & Mekanizma
Saldırganın bir e-posta şablonu veya kullanıcı adı alanına girdi olarak yazdığı Payload (Python/Jinja2 için):
{{ self.__init__.__globals__.__豪華__.__import__('os').popen('whoami').read() }}
Çalışma Sebebi: Şablon motoru
{{ ... }}parantezlerini gördüğünde içindeki ifadeyi matematiksel veya mantıksal bir kod olarak sunucu tarafında çalıştırır. Yukarıdaki payload, Python’ınoskütüphanesini çağırarak sunucudawhoamikomutunu yürütür ve çıktıyı sayfaya basar.
9. Client-Side Template Injection (CSTI)
Seri No: #9 | Türkçe Karşılığı: İstemci Taraflı Şablon Enjeksiyonu
Giriş & Çalışma Sebebi
CSTI, SSTI’ın aksine tamamen kullanıcının tarayıcısında (Client-Side) çalışan şablon motorlarını (özellikle AngularJS, Vue.js gibi frontend framework’lerini) hedef alır. Zafiyetin asıl sebebi, sunucunun kullanıcı girdisini HTML sayfasına doğrudan basması ve sayfada aktif olan frontend framework’ünün bu girdiyi kendi özel sembolleri (Örn: Angular’ın çift süslü parantezi {{ }}) sanıp tarayıcıda çalıştırmasıdır. Sonuç genellikle gelişmiş bir XSS zafiyetine dönüşür.
Payload & Mekanizma
Saldırganın AngularJS kullanan bir sitenin girdi alanına yazdığı Payload:
{{ constructor.constructor('alert(document.domain)')() }}
Çalışma Sebebi: Sayfa yüklendiğinde AngularJS, DOM (HTML yapısı) taraması yapar. Ekranda
{{ }}sembollerini gördüğünde, bunun Angular’a ait bir ifade olduğunu varsayar. İçerideki JavaScript constructor yapısını çözerek normal şartlarda XSS filtrelerine takılabilecek olanalert()fonksiyonunu Angular’ın güvenli koruma duvarını (sandbox) delerek tarayıcıda çalıştırır.
10. Prototype Pollution
Seri No: #10 | Türkçe Karşılığı: Prototip Kirlenmesi
Giriş & Çalışma Sebebi
Prototype Pollution, JavaScript diline özgü, nesne tabanlı kalıtım (Prototype-based inheritance) mekanizmasını hedef alan modern bir zafiyettir. JavaScript’te oluşturulan her nesne (object), arka planda gizli bir ana şablondan (Object.prototype) özellikler miras alır.
Zafiyetin asıl sebebi, kullanıcının gönderdiği JSON verilerini veya nesneleri birleştiren, kopyalayan fonksiyonların (Örn: lodash.merge(), deep-clone gibi kütüphanelerin eski versiyonları veya zafiyetli özel fonksiyonlar) __proto__ gibi hassas anahtar kelimeleri filtrelememesidir. Saldırgan, ana prototipe yeni bir özellik enjekte ettiğinde, uygulamadaki tüm nesneler (mevcut ve gelecekte oluşturulacak olanlar) bu zararlı özelliği otomatik olarak miras alır. Bu durum mantıksal yetki atlamalarına veya sunucu tarafında kod çalıştırılmasına (RCE) kadar gidebilir.
Payload & Mekanizma
Saldırganın bir API uç noktasına gönderdiği zararlı JSON verisi:
{
"__proto__": {
"isAdmin": true
}
}
Çalışma Sebebi: Uygulama bu girdiyi arka planda işlerken
__proto__kontrolü yapmazsa, JavaScript motoru global nesne şablonunun içineisAdmin = trueözelliğini yazar. Bu işlemden sonra sistemde oturum açan en yetkisiz kullanıcının nesnesi bile (user.isAdmin) sorgulandığında, ana prototipten gelen miras nedeniyletrueyanıtını döner ve saldırgan yetki atlar.