Hooki

Hook network: Ocena adresów URL pod kątem SSRF

Oceniaj jeden lub wiele adresów docelowych żądań pod kątem SSRF, prosto z wiersza poleceń.

Hook network rozstrzyga, czy adres docelowy żądania wysyłanego przez serwer jest bezpieczny pod kątem SSRF (żądania, które można skierować do usług wewnętrznych, metadanych chmury lub prywatnych hostów). To deterministyczny silnik stojący za specjalizacją network, który możesz uruchomić samodzielnie.

Uruchamianie​

Przekaż każdy adres docelowy w opcji --url. Hook wypisuje po jednym słowie na adres, a ich znaczenie wyjaśnia tabela poniżej.

npx lagune read network --url 'http://example.com/'
# => safe

npx lagune read network --url 'http://0x7f000001/'
# => private-target

Hook odczytuje host tak, jak odczytuje go sieć, więc zakodowane zapisy adresu wewnętrznego się nie prześlizgną: zapis szesnastkowy, ósemkowy, dziesiętny bez kropek, skrócony, IPv6 i IPv4 mapowany na IPv6 dają wynik private-target. A tam, gdzie niedbały walidator i klient, który faktycznie pobiera dane, odczytałyby różne hosty, werdykt brzmi parser-divergent.

Jak odczytać werdykt​

WerdyktZnaczenie
safeAdres docelowy prowadzi do publicznego hosta, a niedbały walidator odczytałby ten sam host.
private-targetHost wskazuje na adres prywatny, loopback, link-local, nieokreślony lub adres metadanych chmury.
parser-divergentNiedbały walidator tekstowy odczytałby inny rzeczywisty host niż ten, z którym łączy się klient.
invalid urlCiągu znaków nie da się sparsować jako URL, więc nie ma czego pobrać.

Tylko safe oznacza zezwolenie. Wszystkie pozostałe werdykty, czyli private-target, parser-divergent i invalid url, traktuj jako blokadę.

Opcje CLI​

OpcjaWartośćOpis
--urladres URL lub hostSprawdza jeden adres docelowy. Powtórz, aby sprawdzić kilka, po jednym werdykcie w linii.

Wymagana jest co najmniej jedna opcja --url. Adres docelowy nigdy nie jest samodzielnym argumentem pozycyjnym, więc nie da się go pomylić z flagą.

Dlaczego wartość flagi

Każdy adres docelowy trafia do hooka jako wartość flagi i nigdy nie jest wstawiany do polecenia. Wartość z cudzysłowami lub backtickami pozostaje nieszkodliwa i nie może niczego wstrzyknąć do powłoki. Zawsze ujmuj ją w apostrofy, aby powłoka nie rozwinęła jej wcześniej.

Czego nie obejmuje

Hook jest czystą funkcją i nigdy nie odpytuje DNS, więc dwie luki, które pojawiają się dopiero w czasie działania, są poza zakresem: DNS rebinding (nazwa, która przy sprawdzaniu wskazuje na adres publiczny, a przy pobieraniu na wewnętrzny) i łańcuchy przekierowań (pierwszy skok, który przechodzi sprawdzenie, a potem przekierowuje do wewnątrz). Zamknij je, rozwiązując nazwę raz i łącząc się ze zweryfikowanym adresem oraz odrzucając przekierowania. Zarezerwowane nazwy loopback (localhost i rodzinę .localhost) hook bez odpytywania DNS uznaje za wewnętrzne, ale każda inna nazwa DNS daje safe, bo stwierdzenie, że wskazuje do wewnątrz, wymagałoby rozwiązania nazwy: takie nazwy chroni lista dozwolonych i to właśnie ją sprawdza ten hook.

wskazówka

To ta sama kontrola, którą uruchamia specjalizacja network, aby wykazać, że filtr adresów docelowych działa.

Najczęściej zadawane pytania

Uruchom hook network. Ocenia on adres docelowy żądania i zwraca safe, private-target, parser-divergent lub invalid url. Tylko safe oznacza zezwolenie.

Adres URL, który różne parsery odczytują inaczej, co jest klasycznym sposobem obejścia ochrony przed SSRF. Hook network zgłasza go, zamiast go przepuścić.