Hook'lar

cors hook'u: CORS kökenlerini denetleyin

Kaynak kodu atlatılabilir bir CORS köken izin listesine karşı tarayın ya da tek bir köken değerini aşırı serbest erişime karşı doğrudan komut satırından puanlayın.

cors hook'u, http-request uzmanlığının arkasındaki deterministik motordur ve onu kendiniz çalıştırabilirsiniz. Tek bir komutla iki modda çalışır: kaynak kodu atlatılabilir bir köken izin listesine (saldırganın sunucusunun yanından sızıp geçtiği bir sunucu doğrulama regex'ine) karşı tarayan scan ve tek bir CORS köken değerini wildcard, null veya safe olarak puanlayan score.

Kod tabanını tarama​

Hiçbir bayrak verilmezse tüm proje taranır.

npx lagune read cors

Hook, atlatılabilir her izin listesini tek bir başlık altında, dosyaya göre gruplayarak listeler. .+/.* ifadesi güvenilen sunucu sonekinden önce, authority bölümünde yer alan bir sunucu doğrulayıcısı (^https?://.+\.trusted\.com), your-site.com.attacker.com gibi bir saldırgan sunucusunun yanından sızıp geçmesine izin verir.

Origin-allowlist patterns with a greedy wildcard (bypassable, review):

internal/auth/origin.go
^https?://.+\.trusted\.com

Bu, kapatılmış bir bulgu değil, incelenmesi gereken bir ipucudur: regex'in gerçek bir güven kararını denetleyip denetlemediği metinden anlaşılamaz, bu yüzden tarama çıkış kodunu asla değiştirmez. Her birini okuyun ve izin listesinin tam eşitlikle karşılaştırdığından emin olun. Hiçbir şey bulunamazsa tek bir satır yazdırılır.

npx lagune read cors --dir src/clean
# => no bypassable origin allowlist found

Bir kökeni puanlama​

Her kökeni --origin ile verin. Hook her köken için tek bir kelime yazdırır ve herhangi bir wildcard ya da null sonucunda sıfırdan farklı bir kodla çıkar.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
KararAnlamı
safe*, null veya * içeren bir glob değildir. Kökenin doğru biçimlendirildiğini garanti etmez.
wildcard* ya da bir alt alan adı, sunucu veya port glob'u: herhangi bir site (veya geniş bir küme) yanıtı okuyabilir.
nullKorumalı alandaki iframe'lerin ve yönlendirmelerin sahteleyebildiği null kökeni.

Yalnızca safe bir izindir ve --origin bir değer kahinidir: işleyiciyi değil değeri değerlendirir, bu yüzden işleyiciyi http-request uzmanlığıyla doğrulayın.

CLI seçenekleri​

SeçenekDeğerAçıklama
--originbir kökenTek bir köken değerini puanlar. Birkaçını puanlamak için tekrarlayın, her satıra bir tane.
--dirbir dizinTaramayı bir dizinle sınırlar. Tekrarlanabilir ve --file ile birleştirilebilir.
--filebir dosyaTaramayı tek bir dosyayla sınırlar. Tekrarlanabilir ve --dir ile birleştirilebilir.

Seçenek verilmezse tüm proje taranır. --origin score modudur ve --dir ya da --file ile birleştirilemez.

Neleri kapsamaz

Tarama atlatılabilir regex biçimini okur, --origin ise köken değerlerini puanlar. Kaynak kod düzeyindeki iki örüntü erişim dışında kalır: isteğin Origin değerinin yansıtılması (sunucunun gelen Origin değerini geri yansıtması ya da kimlik bilgileriyle eşleştirmesi) ve serbest bir endsWith veya alt dize tabanlı izin listesi. Bunları kodda tanıyın ve http-request uzmanlığının anlattığı şekilde ele alın.

Sıkça sorulan sorular

Korumalı alandaki iframe'ler ve bazı yönlendirmeler Origin: null gönderir, bu yüzden null değerine güvenen bir izin listesi bu bağlamlara okuma erişimi verir. cors hook'u bunu wildcard ile birlikte işaretler.

Kod tabanı üzerinde npx lagune read cors komutunu çalıştırın. Hook, açgözlü wildcard'ı güvenilen sonekten önce gelen bir sunucu doğrulama regex'ini işaretler, çünkü böyle bir regex your-site.com.attacker.com gibi bir saldırgan sunucusunun yanından sızıp geçmesine izin verir.