Hooken network avgjør om destinasjonen for en forespørsel fra serversiden er trygg mot SSRF (en forespørsel som kan rettes mot interne tjenester, metadata i skyen eller private verter). Den er den deterministiske motoren bak spesialiseringen network, og du kan kjøre den selv.
Kjør
Oppgi hver destinasjon med --url. Hooken skriver ut ett ord per destinasjon, forklart i tabellen nedenfor.
- Én destinasjon
- Flere destinasjoner
npx lagune read network --url 'http://example.com/'
# => safe
npx lagune read network --url 'http://0x7f000001/'
# => private-target
Gjenta --url for å vurdere en hel tillatelsesliste eller blokkeringsliste i ett kall, én konklusjon per linje, i samme rekkefølge.
npx lagune read network \
--url 'http://example.com/' \
--url 'http://[::1]/' \
--url 'http://allowed.com@evil.example/'
# => safe
# => private-target
# => parser-divergent
Den tolker verten slik nettverket gjør, så kodede former av en intern adresse slipper ikke gjennom: Heksadesimal, oktal, desimal uten punktum, forkortet, IPv6 og IPv4-mappet form gir alle private-target. Og der en slurvete validator og klienten som faktisk henter, ville lest ulike verter, er konklusjonen parser-divergent.
Slik leser du konklusjonen
| Konklusjon | Betydning |
|---|---|
safe | Destinasjonen kobler til en offentlig vert, og en slurvete validator ville lest den samme verten. |
private-target | Verten peker til en privat adresse, en loopback-adresse, en link-local-adresse, en uspesifisert adresse eller en metadataadresse i skyen. |
parser-divergent | En slurvete tekstvalidator ville lest en annen reell vert enn den klienten kobler til. |
invalid url | Strengen kan ikke tolkes som en URL, så det finnes ingenting å hente. |
Bare safe betyr tillat. Behandle private-target, parser-divergent og invalid url alle som blokkering.
CLI-alternativer
| Alternativ | Verdi | Beskrivelse |
|---|---|---|
--url | en URL eller vert | Sjekk én destinasjon. Gjenta for å sjekke flere, én konklusjon per linje. |
Minst én --url er påkrevd. Destinasjonen er aldri et frittstående posisjonsargument, så den kan ikke forveksles med et flagg.
Hver destinasjon sendes som verdien til et flagg og blir aldri interpolert inn i kommandoen. En verdi med anførselstegn eller backticks forblir uvirksom og kan ikke injisere noe i skallet. Sett den alltid i enkle anførselstegn, så skallet ditt ikke ekspanderer den først.
Hooken er ren og slår aldri opp i DNS, så to hull som oppstår under kjøring, er utenfor omfanget: DNS rebinding (et navn som peker til en offentlig adresse når det sjekkes, og til en intern når det hentes) og omdirigeringskjeder (et første hopp som består sjekken, og deretter omdirigerer innover). Lukk dem ved å slå opp én gang og koble til den validerte adressen, og ved å avvise omdirigeringer. Den låser de reserverte loopback-navnene (localhost og familien .localhost) til internt uten oppslag, men alle andre DNS-navn gir safe, fordi det å fastslå at et navn peker innover, ville krevd et oppslag: Tillatelseslisten beskytter disse navnene, og det er den denne kontrollen validerer.
Dette er den samme sjekken som spesialiseringen network kjører for å bevise at et destinasjonsfilter holder.
Vanlige spørsmål
Kjør hooken network. Den vurderer destinasjonen for en forespørsel og returnerer safe, private-target, parser-divergent eller invalid url. Bare safe betyr tillat.
En URL som ulike parsere leser forskjellig, en klassisk måte å omgå SSRF-beskyttelse på. Hooken network flagger den i stedet for å tillate den.
