Penligent Başlık

Filtre Yanılsaması: JavaScript Filtre Mekanizmasını Silahlandırmak ve Savunmak

Modern web geliştirmenin bozulmamış mimarisinde javascript filtresi fonksiyon (Array.prototype.filter()) fonksiyonel programlamanın temel taşı olarak bilinir. Geliştiricilerin veri kümelerini manipüle etmek için bildirimsel, temiz kod yazmalarına olanak tanır.

Ancak, saldırgan güvenlik mühendisi için JavaScript'teki "filtre" kavramı tehlikeli bir ikilemi temsil etmektedir. Bir tarafta, yaygın güvenlik sorunlarının temel nedenidir. İstemci Tarafı Erişim Kontrolü güvenlik açıkları. Diğer yandan, JavaScript dilinin esnekliği filtre yöntemlerini güçlü Gadget'lar Web Uygulaması Güvenlik Duvarlarını (WAF'lar) ve Girdi Temizleyicileri atlamak için.

Bu kılavuz söz diziminin ötesine geçiyor. İstemci tarafı filtrelemenin mimari hatalarını inceleyecek, saldırganların kod çalıştırmak için standart kütüphane yöntemlerini nasıl silah olarak kullandığını analiz edecek ve yapay zeka odaklı platformların Penligent bu ince mantıksal kusurların keşfini otomatikleştiriyor.

Mimari Kusur: İstemci Tarafı Javascript Filtresi

ile ilişkili en yaygın güvenlik açığı javascript filtresi dilde bir hata değil, güvenlik modellerinin uygulanmasındaki bir hatadır. Tek Sayfa Uygulamaları (SPA'lar) ve kalın istemciler (React, Vue, Angular) çağında, geliştiriciler genellikle SUNUM ile güvenlik.

"Belirsizlikten Güvenlik" Modeli

Standart bir senaryo düşünün: Bir API uç noktası bir kullanıcı listesi döndürür. Ön uç geliştiricisinin yalnızca aktif kullanıcıları görüntülemesi ve yöneticileri gizlemesi gerekir.

JavaScript

// SAVUNMASIZ MODEL
fetch('/api/v1/users')
  .then(yanıt => yanıt.json())
  .then(veri => {
    // Geliştirici görünümü "güvenli" hale getirmek için javascript filtresi kullanır
    const visibleUsers = data.filter(user => user.role !== 'admin' && user.status === 'active');
    renderTable(visibleUsers);
  });

Genel bir DAST tarayıcısına göre bu uygulama güvenli görünüyor. Kullanıcı arayüzü yönetici verilerini göstermez. Ancak Burp Suite veya basit DevTools kullanan bir güvenlik mühendisi gerçeği bilir.

Saldırı Vektörü: IDOR ve PII Sızıntısı

Bu javascript filtresi güvenilmeyen bir ortam olan kullanıcının tarayıcısında çalışır. Buradaki güvenlik açığı tam veri kümesi tel üzerinden iletildi.

İstismar Adımları:

  1. Durdurun: Saldırgan trafiği proxy'lemektedir.
  2. Kontrol edin: Ham JSON yanıtı aşağıdaki gibi nesneler içerir {"id": 42, "rol": "admin", "pii_ssn": "xxx-xx-xxxx" }.
  3. Bypass: Saldırgan kullanıcı arayüzü mantığını tamamen göz ardı eder.

Bu bir başarısızlıktır Veri Minimizasyonu. Uygun bir uygulama, veritabanı sorgusu düzeyinde filtreleme gerçekleştirir (SQL NEREDE maddesi), hassas baytların veri merkezinden asla ayrılmamasını sağlar.

Sözdizimini Silahlandırmak: XSS Aracı Olarak Javascript Filtresi

Odağımızı Siteler Arası Komut Dosyalarına (XSS) kaydırdığımızda, terim javascript filtresi yeni bir anlam kazanıyor: kötü amaçlı kodları engellemeye çalışan savunma filtreleri (WAFs/Sanitizers).

Saldırganlar sürekli olarak "Gadget "ları ararlar - JavaScript çalışma zamanında, aşağıdaki gibi engellenmiş anahtar sözcükleri kullanmadan rastgele kod çalıştırmak için kötüye kullanılabilecek standart, kullanılabilir yöntemler eval(), Function()veya <script>.

Yapıcı Zincirleme Bypass

WAF'lar genellikle bariz batıklar arar. Ancak JavaScript dinamiktir. JavaScript dinamiktir. Array.prototype.filter yöntemi bir işlevdir ve JavaScript'teki her işlevin bir kurucusu vardır. Bir fonksiyonun kurucusu Fonksiyon nesnesine benzer şekilde davranan eval().

Bir WAF engellerse eval() ancak dizi yöntemlerine izin verdiğinden, bir saldırgan filtre yönteminin kendisi.

Bypass Mantığı:

  1. [] bir dizi oluşturur.
  2. [].filtre filtre işlevine erişir.
  3. [].filter.constructor küresel erişim Fonksiyon kurucu.
  4. Function('code')() kodu çalıştırır.

Yük:

JavaScript

// Standart yük (WAF tarafından engellendi)
eval('alert(1)')

// Javascript filtre gadget'ı kullanarak kaçınma
[].filter.constructor('alert(1)')()

Filtre Yanılsaması: JavaScript Filtre Mekanizmasını Silahlandırmak ve Savunmak

Tablo: Yaygın Javascript Filtresi Kaçırma Teknikleri

TeknikFaydalı Yük YapısıMekanizmaGüvenlik Bağlamı
Yapıcı Zincirleme[].filter.constructor('code')()Prototip zincirini kullanarak Fonksiyon kurucu.Anahtar kelime filtrelerini atlar eval.
Yineleyici İstismarı[].map.constructor('code')()Filtreye benzer; herhangi bir Array prototip yöntemiyle çalışır.Yedeklilik eğer filtre özel olarak izlenir.
Dize Gizleme[].filter['c'+'onstructor']"Yapıcı" anahtar sözcüğünü birleştirilmiş dizelere böler.Regex tabanlı WAF kurallarını atlar.
Unicode Kodlama\u0061lert(1)İşlev adları için unicode kaçışlarını kullanır.JavaScript ayrıştırıcıları bunu çözer; basit filtreler çözmez.

Filtreler Başarısız Olduğunda: Prototip Kirliliği (CVE-2019-10744)

Nesneleri birleştirirken "filtreleme" kavramı hayati önem taşır. Bir uygulama JSON girdisini kabul eder ve bunu mevcut bir nesneyle kesinlikle filtreleme anahtarlar, Prototip Kirliliğinin kapısını açar.

Bunun en etkili örneklerinden biri şuydu CVE-2019-10744 yaygın olarak kullanılan lodash kütüphane.

Zafiyetin Anatomisi

Fonksiyon defaultsDeep nesneleri özyinelemeli olarak birleştirmek için tasarlanmıştır. Ancak, anahtarı reddetmek için bir güvenlik filtresi uygulamada başarısız oldu kurucu.

İstismar:

Saldırgan, prototipe işaret eden bir kurucu özelliği içeren bir JSON yükü sağlar.

JavaScript

const payload = '{"constructor": {"prototype": {"isAdmin": true}}';
_.defaultsDeep({}, JSON.parse(payload));

Etki:

Girdi filtrelenmediği için, atama temel Object.prototype'ı kirletti. Birdenbire, JavaScript çalışma zamanındaki her nesne isAdmin: true özelliğini miras aldı.

Uygulama aşağıdaki gibi bir kimlik doğrulama mantığına sahipse:

JavaScript

if (user.isAdmin) { grantAccess(); }

Saldırgan anında yönetici erişimi elde ederek Node.js bağlamına bağlı olarak bir Hizmet Reddi veya RCE oluşturur.

İyileştirme: Sağlam bir javascript filtresi nesne anahtarları için block-list __proto__, kurucuve prototip.

Otomatik Mantık Keşfi: Penligent Yaklaşımı

Yukarıda açıklanan güvenlik açıklarının (Müşteri Tarafı Filtreleme ve Prototip Kirliliği) geleneksel DAST (Dinamik Uygulama Güvenlik Testi) araçlarıyla tespit edilmesi oldukça zordur.

  • Geleneksel Tarayıcılar: Çökmeleri, hata kodlarını (500) veya basit yansıtılmış XSS dizelerini kontrol edin. Bunu anlamıyorlar users.filter() hassas verileri gizliyor.
  • Yapay Zeka Açığı: Bu sorunları bulmak için aşağıdakileri anlayan bir motora ihtiyacınız vardır kod semantiği ve veri akışı.

İşte burası Penligent.ai güvenlik mühendisi için iş akışını temelden değiştirir.

Anlamsal Bulanıklaştırma ve Mantık Analizi

Penligent, desen eşleştirmenin ötesine geçen gelişmiş yapay zeka ajanları kullanır. Bir hedef uygulamayı analiz ederken, Penligent motoru şunları gerçekleştirir Bağlam Farkında Analiz:

  1. Veri Akışı Denetimi: Penligent, işlenen DOM'a karşı API yanıtlarını izler. API 50 alan döndürür ancak DOM yalnızca 5 alan görüntülerse, yapay zeka potansiyel bir javascript filtresi mantık hatası ve Veri Sızıntısı riski olarak işaretler.
  2. Gadget Generation: Penligent, XSS yüklerinin statik bir listesini kullanmak yerine, ortamdaki mevcut nesnelere dayalı olarak yükleri dinamik olarak oluşturur. Eğer tespit ederse Array.prototype.filter mevcut ancak eval engellendiğinde, belirli bir [].filter.constructor bypass yükü.
  3. Prototip Fuzzing: Yapay zeka, JSON uç noktalarını prototip kirlilik vektörleriyle akıllı bir şekilde bulanıklaştırır, beklenmedik özellik mirası için uygulama durumunu izler ve özel kodda bile CVE-2019-10744 tarzı kusurları belirler.

Penligent, "hacker sezgisini" otomatikleştirerek, güvenlik ekiplerinin genellikle manuel kod incelemesi gerektiren derin mantıksal kusurları tespit etmesine olanak tanır.

Derinlemesine Savunma: Çalışma Zamanını Güçlendirme

Silahlara karşı savunmak için javascript filtresi gadget'lar ve mantık hataları varsa, katmanlı bir savunma stratejisi benimsemeliyiz.

1. Altın Kural: Sunucu Tarafı Doğrulama

Güvenlik için asla istemci tarafı mantığına güvenmeyin. Filtreleme veritabanı düzeyinde yapılmalıdır.

  • Denetim: Tüm API uç noktalarını kontrol edin. Yalnızca kullanıcının görmeye yetkili olduğu verileri döndürdüklerinden emin olun Hemen şimdi..
  • DTO'lar: Serileştirmeden önce hassas alanları ayıklamak için arka uçta Veri Aktarım Nesnelerini kullanın.

2. Değişmez Prototipler

Prototip Kirliliği güvenlik açıklarının tüm sınıfını ortadan kaldırmak için uygulama başlangıcında standart nesne prototiplerini dondurun.

JavaScript

// Prototip Kirliliğine Karşı Savunma
Object.freeze(Object.prototype);
Object.freeze(Array.prototype);

Bu, bir javascript filtresi kötü amaçlı bir anahtarı engelleyemezse, çalışma zamanı değişikliğe izin vermek yerine bir hata verir.

3. İçerik Güvenliği Politikası (CSP)

CSP nihai destek noktasıdır. Önlemek için [].filter.constructor istismarını önlemek için dizelerin kod olarak yürütülmesini devre dışı bırakmalısınız.

Tavsiye edilen başlık:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';

Çok önemli, kaçının ekleme 'unsafe-eval'. olmadan 'unsafe-eval'tarafından oluşturulan kodu çalıştırmayı reddedecektir. Fonksiyon kurucusu, filtre gadget'ını işe yaramaz hale getirir.

4. DOMPurify ile Girdi Temizleme

Kendi regex filtrelerinizi yazmayın. Kolayca atlatılabilirler. Kullanım DOMPurify HTML girdisini sterilize etmek için. Bir korumalı alan oluşturur, HTML'yi ayrıştırır ve katı bir izin listesine dayalı olarak kötü amaçlı etiketleri/öznitelikleri kaldırarak XSS'yi DOM'a ulaşmadan önce etkisiz hale getirir.

Sonuç

Terim javascript filtresi aldatıcıdır. Genç bir geliştirici için bir yardımcı programdır. Kıdemli bir güvenlik mühendisi için ise bir sinyaldir - veri sızıntılarını kontrol etmek için bir sinyal, XSS'den kaçmak için bir araç ve girdi doğrulaması için kritik bir kontrol noktası.

Modern uygulamalar giderek daha karmaşık hale geldikçe, bu ince mantık kusurlarını yakalamak için manuel testlere güvenmek sürdürülemez. Aşağıdaki gibi platformlardan yapay zeka odaklı otomasyon ile birlikte derin mimari anlayıştan yararlanmak Penligent eğrinin önünde kalmanın tek yoludur.

Güvenilir Kaynaklar

Gönderiyi paylaş:
İlgili Yazılar