L'hook network decide se la destinazione di una richiesta lato server è al sicuro dalla SSRF (una richiesta che può essere puntata verso servizi interni, metadati del cloud o host privati). È il motore deterministico dietro la specializzazione network, e puoi eseguirlo tu stesso.
Come eseguirlo
Passa ogni destinazione con --url. L'hook stampa una parola per destinazione, da leggere con la tabella qui sotto.
- Una destinazione
- Più destinazioni
npx lagune read network --url 'http://example.com/'
# => safe
npx lagune read network --url 'http://0x7f000001/'
# => private-target
Ripeti --url per valutare un'intera allowlist o denylist in una sola chiamata, un verdetto per riga, nell'ordine.
npx lagune read network \
--url 'http://example.com/' \
--url 'http://[::1]/' \
--url 'http://allowed.com@evil.example/'
# => safe
# => private-target
# => parser-divergent
Risolve l'host come fa la rete, così le forme codificate di un indirizzo interno non sfuggono: esadecimale, ottale, decimale senza punti, forma abbreviata, IPv6 e IPv4 mappato su IPv6 risultano tutte private-target. E dove un validatore approssimativo e il vero client leggerebbero host diversi, il verdetto è parser-divergent.
Come leggere il verdetto
| Verdetto | Significato |
|---|---|
safe | La destinazione si collega a un host pubblico, e un validatore approssimativo leggerebbe lo stesso host. |
private-target | L'host si risolve in un indirizzo privato, di loopback, link-local, non specificato o dei metadati del cloud. |
parser-divergent | Un validatore testuale approssimativo leggerebbe un host reale diverso da quello a cui si collega il client. |
invalid url | La stringa non è analizzabile come URL, quindi non c'è nulla da richiedere. |
Solo safe è un via libera. Tratta private-target, parser-divergent e invalid url tutti come un blocco.
Opzioni della CLI
| Opzione | Valore | Descrizione |
|---|---|---|
--url | un URL o un host | Controlla una destinazione. Ripetila per controllarne diverse, un verdetto per riga. |
Serve almeno un --url. La destinazione non è mai un argomento posizionale semplice, quindi non può essere scambiata per un flag.
Ogni destinazione viene passata come valore di un flag, mai interpolata nel comando. Un valore con virgolette o backtick resta inerte e non può iniettare nulla nella shell. Racchiudilo sempre tra apici singoli, così la tua shell non lo espande prima.
L'hook è puro e non risolve mai il DNS, quindi due lacune a runtime restano fuori dal suo ambito: il DNS rebinding (un nome che risulta pubblico al controllo e interno al momento della richiesta) e le catene di redirect (un primo salto che passa e poi reindirizza verso l'interno). Chiudile risolvendo una sola volta e collegandoti all'indirizzo validato, e rifiutando i redirect. Associa i nomi di loopback riservati (localhost e la famiglia .localhost) a indirizzi interni senza alcuna risoluzione, ma qualsiasi altro nome DNS risulta safe, perché affermare che si risolve verso l'interno richiederebbe una risoluzione: a proteggerli è l'allowlist, ed è proprio ciò che questo controllo valida.
È lo stesso controllo che la specializzazione network esegue per dimostrare che un filtro delle destinazioni regge.
Domande frequenti
Esegui l'hook network. Valuta la destinazione di una richiesta e restituisce safe, private-target, parser-divergent o invalid url. Solo safe è un via libera.
Un URL che parser diversi leggono in modo diverso, un classico aggiramento della SSRF. L'hook network lo segnala invece di consentirlo.
