Prototype Pollution (Prototip Kirlenmesi) Nedir? Korunma
Prototype pollution, saldırganın tüm nesnelerin miras aldığı prototipe denetimsiz özellik eklemesidir. İstemci ve sunucu etkisi tablosu, neden fark edilmesinin zor olduğu, tehlikeli anahtarları reddetme savunması ve KAOS ile kanıt temelli tarama.
Hızlı cevap: Prototype pollution (prototip kirlenmesi), JavaScript uygulamalarında saldırganın, tüm nesnelerin miras aldığı ortak prototip nesnesine denetimsiz biçimde özellik eklemesidir. Saldırgan, kullanıcı girdisindeki özel anahtarları (örneğin nesne prototipine erişen anahtarları) kullanarak, uygulamadaki her nesnede geçerli olan varsayılan bir değer enjekte eder. Sonuç, güvenlik kontrolünün atlatılması, hizmet dışı bırakma, istemci tarafında çapraz site betik çalıştırma ve sunucu tarafında bazı durumlarda uzaktan kod çalıştırmaya kadar gidebilir. Kök çözüm, kullanıcı girdisini bir nesneye birleştirirken tehlikeli anahtarları reddetmek, güvenli birleştirme yöntemleri kullanmak ve prototipi değişmez hale getirmektir.
Prototype pollution, JavaScript'in nesne miras modelinin kötüye kullanımıdır ve hem tarayıcıda hem sunucuda görülür. Görünüşte zararsız bir birleştirme işlemi, tüm uygulamanın davranışını değiştirebilir. Bu yazı, prototip kirlenmesinin nasıl oluştuğunu, etkisini ve doğru savunmayı anlatır.
Prototype pollution nasıl çalışır
JavaScript'te her nesne, ortak bir prototip nesnesinden özellik miras alır. Bir uygulama, kullanıcıdan gelen veriyi mevcut bir nesneyle derinlemesine birleştirdiğinde, saldırgan verinin içine prototipe ulaşan özel bir anahtar koyabilir. Bu anahtar, veriyi doğrudan nesneye değil, tüm nesnelerin paylaştığı prototipe yazar. Böylece daha önce hiç tanımlanmamış bir özellik, uygulamadaki her nesnede aniden var olur.
Asıl tehlike budur: saldırgan, kendi nesnesini değil, uygulamanın tüm nesnelerinin ortak davranışını değiştirir.
Etki, bağlama göre değişir
| Ortam | Olası etki | Örnek |
|---|---|---|
| İstemci (tarayıcı) | XSS, güvenlik atlatma | Enjekte edilen özellik ile XSS tetikleme |
| Sunucu (Node.js) | DoS, mantık atlatma, RCE | Yapılandırma alanını ezip komut çalıştırma |
| İş mantığı | Yetki ve kontrol atlatma | Varsayılan olmayan yetkinin var sayılması |
Prototype pollution tek başına her zaman kritik değildir, ama uygun bir gadget ile birleştiğinde etkisi çarpıcı biçimde büyür. Bu yüzden değerlendirilmesi bağlamla birlikte yapılmalıdır.
Neden fark edilmesi zor
Prototype pollution, kodda görünür bir hata gibi durmaz. Birleştirme işlemi çoğu durumda doğru çalışır, açık yalnızca saldırganın özel anahtarı gönderdiği durumda tetiklenir. Ayrıca kirlenmenin etkisi, kirlenmenin olduğu yerde değil, uygulamanın çok başka bir noktasında ortaya çıkabilir. Bu, güvensiz deserializasyon gibi, veri akışının izlenmesini gerektiren bir sınıftır.
Doğru savunma
1. Tehlikeli anahtarları reddetme
Kullanıcı girdisini bir nesneye birleştirirken, prototipe ulaşan özel anahtarlar açıkça reddedilmelidir. Girdi doğrulaması, yalnızca beklenen anahtarlara izin veren bir beyaz liste ile yapılmalıdır.
2. Güvenli veri yapıları ve birleştirme
Prototip mirası olmayan veri yapıları kullanmak, kullanıcı verisini prototipten yalıtır. Derin birleştirme işlemleri, prototipe yazmayı engelleyen güvenli yöntemlerle yapılmalıdır.
3. Prototipi dondurma
Uygulamanın kritik nesne prototipleri değişmez hale getirilerek, çalışma zamanında prototipe yazma engellenebilir.
4. Bağımlılıkları güncel tutma
Prototype pollution çoğu zaman kullanılan kütüphanelerdeki birleştirme fonksiyonlarından kaynaklanır. Bağımlılıklar güncel tutulmalı ve bilinen zafiyetli sürümlerden kaçınılmalıdır.
KAOS ile prototype pollution taraması
DSET'in yerel yapay zekâ güvenlik motoru KAOS, prototype pollution vektörlerini kanıt temelli test eder. Girdi noktalarına prototipe ulaşan özel anahtarlar enjekte eder, kirlenmenin gerçekten uygulama davranışını değiştirip değiştirmediğini gözlemler ve bir gadget ile birleşerek istismar edilebilir bir sonuca gidip gitmediğini kontrollü biçimde doğrular. Yalnızca gerçekten etki üreten bulguyu, yanlış pozitif gürültüsü olmadan raporlar. Böylece web uygulama sızma testinizin bir parçası olarak bu sessiz açık sınıfını görünür kılarsınız.
Sık sorulan sorular
Prototype pollution her zaman kritik mi? Hayır. Tek başına çoğu zaman orta seviyededir, ama uygulamada uygun bir gadget varsa istemcide XSS'e, sunucuda uzaktan kod çalıştırmaya kadar yükselebilir. Ciddiyet, kirlenmenin nereye ulaştığına bağlıdır ve bağlamla değerlendirilmelidir.
Sadece girdi doğrulaması yeterli mi? Girdi doğrulaması güçlü bir savunmadır ama tek başına yeterli sayılmamalıdır. Tehlikeli anahtarları reddetmek, güvenli veri yapıları kullanmak ve bağımlılıkları güncel tutmak birlikte uygulanmalıdır.
Bu sadece Node.js sorunu mu? Hayır. Prototype pollution hem tarayıcıda hem sunucuda görülür. İstemcide XSS ve güvenlik atlatmaya, sunucuda mantık atlatma ve kod çalıştırmaya yol açabilir.
Kaynaklar
- PortSwigger Web Security Academy, Prototype pollution: https://portswigger.net/web-security/prototype-pollution
- OWASP, Prototype Pollution Prevention: https://cheatsheetseries.owasp.org
Web uygulamanızı prototype pollution ve OWASP Top 10 açıklarına karşı çalışan bir kanıtla test ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi sağlıyoruz.
Kimliğinizi doğrulayın
Yetkilendirilmiş erişim alanı. Tüm giriş denemeleri kayıt altına alınır.