JavaScript ve benzer dillerde bulunan tehlikeli güvenlik açığı türüne benzer ‘sınıf kirliliği’ kusuru
Prototip kirliliği, aralarında en popüler olan JavaScript olan prototip tabanlı dillerle ilişkili tehlikeli bir hata sınıfıdır.
Bununla birlikte, bir araştırmacı, Python için geçerli olan bir prototip kirliliği çeşidi bulmuşken, diğer sınıf tabanlı programlama dilleri de benzer saldırılara karşı savunmasız olabilir.
Prototip kirliliğinden sınıf kirliliğine
JavaScript’te her nesne, o nesnenin tüm niteliklerini ve işlevlerini içeren üst nesnesinin ‘prototipini’ devralır. JavaScript nesneleri, işlevlerine erişmek için ebeveynlerinin prototiplerini geçebilir.
Prototipler çalışma zamanında değiştirilebilir, bu da JavaScript’i dinamik ve esnek ama aynı zamanda tehlikeli hale getirir. Prototip kirliliği saldırıları, JavaScript uygulamalarının davranışını değiştirmek ve kötü amaçlı eylemler gerçekleştirmek için bu özelliği kullanır.
Python gibi sınıf tabanlı dillerin bu tür manipülasyonlara karşı bağışık olduğu varsayılmaktadır.
BU TÜR İÇERİKLERİ BEĞENİYOR MUSUNUZ? Bize deneyiminizden bahsedin günlük yudum yağma kazanmak
Ancak güvenlik araştırmacısı Abdulraheem Khaled, saldırganların Python programlarında prototip kirlilik benzeri saldırılar gerçekleştirmesine olanak tanıyan bir kodlama şeması keşfetti. Bulgularını belgeleyen bir blog gönderisinde buna ‘sınıf kirliliği’ diyor.
Halid söyledi günlük yudum JavaScript prototip kirliliği kavramlarını Python’a çevirme girişimleri sırasında saldırıyı keşfettiğini söyledi.
Python sınıflarını manipüle etme
Saldırganın Python nesnelerini kirletmek için, bir nesnenin özniteliklerini ayarlamak için kullanıcı girdisini kullanan bir giriş noktasına ihtiyacı vardır. Kullanıcı girişi hem öznitelik adını hem de değeri belirlerse, bir saldırgan programın davranışını değiştirmek için bundan yararlanabilir.
Khaled, “Aranacak temel faktör, uygulamanın bir nesnenin niteliklerini ayarlamak için (ayarlanacak özellik adını ve değerini kontrol ederek) temizlenmemiş kullanıcı tarafından kontrol edilebilir girdi kullanıp kullanmadığıdır” dedi. günlük yudum.
Hedef işlev, nesnenin özniteliklerinde gezinmek için özyinelemeli döngüler kullanırsa, saldırgan potansiyel olarak üst sınıflara, genel değişkenlere ve daha fazlasına erişim elde edebilir. Khaled buna “güvensiz birleştirme” diyor.
Örneğin, bir saldırgan, sistem tarafından yürütülen komut dizilerini değiştirmek, hassas değişkenlerin değerini değiştirmek ve kritik sınıfları işlevsiz hale getirerek hizmet reddi saldırılarını (DoS) tetiklemek için bu tür işlevleri kullanabilir.
JavaScript’ten farklı olarak, Python sınıfı kirlilik saldırıları, yerleşik nesne türlerinde mümkün olan manipülasyonlarla sınırlıdır.
ARKA FON Prototip kirliliği: JavaScript uygulamalarını etkileyen tehlikeli, hafife alınan güvenlik açığı
“JS’den farklı olarak [JavaScript]değişmez bir tür olduğundan, genel/yerleşik nesne sınıfında öznitelikleri ayarlayamazsınız. Bu, cihaz ararken bazı sınırlamalar getiriyor,” dedi Khaled.
Temel nesne prototipini değiştirmek, JavaScript prototip kirliliğindeki temel saldırı vektörlerinden biridir ve bu da Python saldırılarını bir şekilde sınırlandırır.
Ancak Khaled, güvenlik açığı bulunan birleştirme işlevinin, saldırganlara Python programında veya içe aktarılan modüllerde tanımlanan küresel uygulama içi değişkenlere ve diğer sınıflara erişim sağlayarak bu sınırlamanın üstesinden gelmelerini sağlayabileceğini keşfetti.
Doğada sınıf kirliliği
Khaled, temizlenmemiş kullanıcı girişi aldıkları ve bir tür güvenli olmayan nesne özniteliği ataması uyguladıkları sürece her türlü Python uygulamasının bu tür saldırılara karşı savunmasız olabileceğini söyledi.
Araştırmaları sırasında, onları sınıf kirliliği saldırılarına maruz bırakan güvenli olmayan birleştirme işlevine sahip birkaç popüler Python kitaplığı örneği buldu.
Sınıf kirliliğinin minimum etkisi DoS olacaktır. Ancak saldırıların Python web uygulamaları üzerinde potansiyel olarak daha derin etkileri olabilir, örneğin:
- Gizli anahtarın üzerine yazma Flask web uygulamalarında oturumları imzalamak ve hesap ele geçirme saldırılarını düzenlemek için manuel olarak geçerli oturumlar oluşturmak için kullanılır
- Filtreleri atlatmak – örneğin, bir şablon dosyası yüklemeye çalışırken Jinja’da uygulanan yol geçişi engellemeyi atlamak. Bu, saldırganların şablonlar dizini ile sınırlandırılmadan herhangi bir yerel dizinden dosya yüklemesine olanak tanıyarak yerel dosya ifşasına ve dahil edilmesine yol açar
- Uzaktan komut yürütmeCOMSPEC veya PATH ortam değişkenlerinin üzerine yazarak
Khaled, “Prototip kirliliği kesinlikle topluluğun daha fazla ilgisini hak eden konulardan biri ve son zamanlarda buna daha fazla odaklanıldığını görmeye başladık” dedi.
“Sınıf kirliliği, yeni gün ışığına çıkan bir güvenlik açığı olabilir, [but] Yakında diğer programlama dillerinde de görmeyi umuyorum.”
ŞUNLAR DA HOŞUNUZA GİDEBİLİR Devs, CircleCI güvenlik ihlali yaşadıktan sonra sırları döndürmeye çağırdı