Prototype pollution

Prototype Pollution Nedir?

Prototip pollution güvenlik açıkları genellikle bir JavaScript fonksiyonu, kullanıcı tarafından kontrol edilebilen özellikler içeren bir nesneyi, önce anahtarları kontrol etmeden mevcut bir nesneyle recursive olarak birleştirdiğinde ortaya çıkar. Bu, bir saldırganın proto gibi bir anahtara sahip bir özelliği isteğe bağlı iç içe geçmiş özelliklerle birlikte enjekte etmesine olanak tanıyabilir.

JavaScript bağlamında proto'nun özel anlamı nedeniyle, merge işlemi iç içe geçmiş özellikleri hedef nesnenin kendisi yerine nesnenin prototipine atayabilir. Sonuç olarak, saldırgan prototipi zararlı değerler içeren özelliklerle doldurabilir ve bu özellikler daha sonra uygulama tarafından tehlikeli bir şekilde kullanılabilir.

Herhangi bir prototip nesnesini kirletmek mümkündür, ancak bu en yaygın olarak yerleşik global Object.prototype ile gerçekleşir.

Saldırı Yöntemleri

Client-side Prototype Pollution

Client-side Prototype Pollution ile Dom XSS

Altarnatif Prototype Pollution Yöntemi

Aşağıdaki yöntemleri ile aynı işlemi yapabiliriz.

Hatalı Sanitization

Eğer __proto__, prototype, constructor kelimeleri silinerek önlenmeye çalışıyorsa aşağıdaki payloadlar kullanılabilir.

Server-side Prototype Pollution (Node.js Express Framework)

Server-side Prototype Pollution Hata Mesajlarına (Node.js Express Framework)

Eğer inject ettiğimiz değer yansımıyor ise json parse hatası verdirip hata mesajına bakabiliriz. Hata mesajındaki değerlere injection yapabiliyor olabiliriz.

Server-side Prototype Pollution Blacklist Bypass (Node.js Express Framework)

Server-side Prototype Pollution Space (Node.js Express Framework)

Server-side Prototype Pollution RCE (Node.js Express Framework)

Araçlar

Dom Invader

Kaynaklar

Last updated