Hooks

Hook cors: Revider CORS-origins

Skann kildekoden for en tillatelsesliste for CORS-origins som kan omgås, eller vurder om én enkelt origin-verdi gir for vid tilgang, rett fra kommandolinjen.

Hooken cors er den deterministiske motoren bak spesialiseringen http-request, og du kan kjøre den selv. Den har to moduser i én kommando: modusen scan skanner kildekoden for en tillatelsesliste for origins som kan omgås (en regex for vertsvalidering som en angripers vert slipper forbi), og modusen score vurderer én enkelt CORS-origin-verdi som wildcard, null eller safe.

Skann en kodebase​

Uten flagg skanner den hele prosjektet.

npx lagune read cors

Den lister hver tillatelsesliste som kan omgås under én overskrift, gruppert etter fil. En vertsvalidator der .+/.* står i authority-delen av URL-en foran suffikset til den klarerte verten (^https?://.+\.trusted\.com), slipper gjennom en angripervert som your-site.com.attacker.com.

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

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

Dette er et spor å undersøke, ikke et avsluttet funn: om regexen styrer en reell tillitsbeslutning, kan ikke avgjøres ut fra teksten, så en gjennomgang endrer aldri avslutningskoden. Les hvert treff og bekreft at tillatelseslisten sammenligner på full likhet. Når den ikke finner noe, skriver den ut én enkelt linje.

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

Vurder en origin​

Send hver origin med --origin. Hooken skriver ut ett ord per origin og avslutter med en kode som ikke er null ved hver wildcard eller null.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
KonklusjonBetydning
safeVerken *, null eller en glob med *. Det garanterer ikke en korrekt utformet origin.
wildcard* eller en glob for underdomene, vert eller port: alle nettsteder (eller mange) kan lese svaret.
nullOriginen null, som iframes i sandkasse og videresendinger kan forfalske.

Bare safe betyr tillatelse, og --origin er et orakel for verdier: det vurderer verdien, ikke handleren, så bekreft handleren med spesialiseringen http-request.

CLI-alternativer​

AlternativVerdiBeskrivelse
--originen originVurder én origin-verdi. Gjenta for å vurdere flere, én per linje.
--diren mappeAvgrens en gjennomgang til en mappe. Kan gjentas og kombineres med --file.
--fileen filAvgrens en gjennomgang til én enkelt fil. Kan gjentas og kombineres med --dir.

Uten alternativ skanner den hele prosjektet. --origin er modusen score og kan ikke kombineres med --dir eller --file.

Velg hva den skanner​

Den utelater det Git ignorerer. For å utelate mer, eller for å skanne det Git ignorerer, gi cors egne innstillinger:

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

Konfigurer hookene beskriver hver innstilling.

Hva den ikke dekker

Gjennomgangen gjenkjenner formen til en regex som kan omgås, og --origin vurderer verdier for origins. To mønstre i kildekoden er utenfor rekkevidde: speiling av Origin fra forespørselen (serveren sender den innkommende Origin tilbake uendret, eller kombinerer den med påloggingsdetaljer), og en for romslig tillatelsesliste basert på endsWith eller delstrenger. Gjenkjenn dem i koden og håndter dem slik spesialiseringen http-request beskriver.

Vanlige spørsmål

Iframes i sandkasse og enkelte videresendinger sender Origin: null, så en tillatelsesliste som stoler på null, gir disse kontekstene lesetilgang. Hooken cors flagger det sammen med wildcard.

Kjør npx lagune read cors over kodebasen. Den flagger en regex for vertsvalidering der et grådig wildcard står foran det klarerte suffikset, slik at en angripervert som your-site.com.attacker.com slipper forbi.