Hook

Hook cors: audit origin CORS

Pindai kode sumber untuk menemukan daftar izin origin CORS yang bisa ditembus, atau nilai apakah satu origin memberi akses yang terlalu longgar, langsung dari command line.

Hook cors adalah engine deterministik di balik spesialisasi http-request, dan Anda bisa menjalankannya sendiri. Hook ini bekerja dalam dua mode dari satu perintah: scan, yang memindai kode sumber untuk menemukan daftar izin origin yang bisa ditembus (regex validasi host yang bisa dilewati host milik penyerang), dan score, yang menilai satu nilai origin CORS sebagai wildcard, null, atau safe.

Memindai basis kode​

Tanpa flag apa pun, hook ini memindai seluruh proyek.

npx lagune read cors

Hook ini mencantumkan setiap daftar izin yang bisa ditembus di bawah satu header, dikelompokkan per file. Validator host yang menempatkan .+/.* di segmen authority sebelum sufiks host tepercaya (^https?://.+\.trusted\.com) meloloskan host penyerang seperti your-site.com.attacker.com.

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

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

Ini adalah petunjuk untuk ditinjau, bukan temuan yang sudah pasti: dari teksnya saja tidak bisa dipastikan apakah regex itu benar-benar menjaga keputusan kepercayaan, jadi pemindaian tidak pernah mengubah kode keluar. Baca masing-masing dan pastikan daftar izinnya membandingkan dengan kesamaan penuh. Jika tidak ada yang ditemukan, hook ini mencetak satu baris.

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

Menilai origin​

Berikan setiap origin dengan --origin. Hook ini mencetak satu kata per origin dan keluar dengan kode bukan nol jika ada wildcard atau null.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
PutusanArti
safeBukan *, null, atau glob *. Tidak menjamin origin-nya berformat benar.
wildcard*, atau glob subdomain, host, atau port: situs mana pun (atau sekumpulan luas situs) bisa membaca respons.
nullOrigin null, yang bisa dipalsukan oleh iframe dalam sandbox dan redirect.

Hanya safe yang berarti diizinkan, dan --origin adalah oracle nilai: ia menilai nilainya, bukan handler-nya, jadi pastikan handler-nya dengan spesialisasi http-request.

Opsi CLI​

OpsiNilaiDeskripsi
--originoriginMenilai satu nilai origin. Ulangi untuk menilai beberapa, satu per baris.
--dirdirektoriMembatasi pemindaian ke satu direktori. Bisa diulang dan digabung dengan --file.
--filefileMembatasi pemindaian ke satu file. Bisa diulang dan digabung dengan --dir.

Tanpa opsi apa pun, hook ini memindai seluruh proyek. --origin adalah mode score dan tidak bisa digabung dengan --dir atau --file.

Pilih apa yang dipindai​

Hook ini melewati apa yang diabaikan Git. Untuk melewati lebih banyak, atau untuk memindai apa yang diabaikan Git, beri cors pengaturannya sendiri:

npx lagune write add --ignore test/fixtures --checker cors
{
"checkers": {
"cors": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}

Konfigurasi hook membahas semua pengaturannya.

Yang tidak dicakup

Pemindaian membaca bentuk regex yang bisa ditembus, dan --origin menilai nilai origin. Dua pola di tingkat kode sumber tetap di luar jangkauan: pemantulan Origin dari request (server mengembalikan Origin yang masuk, atau memasangkannya dengan kredensial), dan daftar izin longgar berbasis endsWith atau substring. Kenali keduanya di kode dan tangani seperti yang dijelaskan spesialisasi http-request.

Pertanyaan yang sering diajukan

Iframe dalam sandbox dan sebagian redirect mengirim Origin: null, jadi daftar izin yang memercayai null memberi konteks tersebut akses baca. Hook cors menandainya bersama wildcard.

Jalankan npx lagune read cors di basis kode Anda. Hook ini menandai regex validasi host yang wildcard serakahnya berada sebelum sufiks tepercaya, sehingga host penyerang seperti your-site.com.attacker.com bisa lolos.