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.
- Tüm proje
- Bir dizin
- Tek bir dosya
npx lagune read cors
npx lagune read cors --dir src/server
npx lagune read cors --file internal/auth/origin.go
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.
- Tek köken
- Birkaç köken
npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
Bütün bir izin listesini tek çağrıda puanlamak için --origin seçeneğini tekrarlayın. Her satıra sırasıyla bir karar düşer.
npx lagune read cors \
--origin 'https://app.example.com' \
--origin '*' \
--origin 'null'
# => safe
# => wildcard
# => null
| Karar | Anlamı |
|---|---|
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. |
null | Korumalı 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çenek | Değer | Açıklama |
|---|---|---|
--origin | bir köken | Tek bir köken değerini puanlar. Birkaçını puanlamak için tekrarlayın, her satıra bir tane. |
--dir | bir dizin | Taramayı bir dizinle sınırlar. Tekrarlanabilir ve --file ile birleştirilebilir. |
--file | bir dosya | Taramayı 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.
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.
