Хуки

Хук network: оценка URL на SSRF

Оценивайте один или несколько адресов загрузки на SSRF прямо из командной строки.

Хук network решает, защищен ли адрес серверной загрузки от SSRF (запроса, который можно направить на внутренние сервисы, облачные метаданные или приватные хосты). Это детерминированный движок, стоящий за специализацией network, и вы можете запускать его сами.

Запуск​

Передайте каждый адрес через --url. Хук выводит по одному слову на адрес, значения которых описаны в таблице ниже.

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

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

Хук разрешает хост так же, как это делает сеть, поэтому закодированные формы внутреннего адреса не проскальзывают: шестнадцатеричная, восьмеричная, десятичная без точек, сокращенная запись, IPv6 и IPv4-mapped получают вердикт private-target. А там, где небрежная проверка и настоящий загрузчик прочитали бы разные хосты, вердикт будет parser-divergent.

Как читать вердикт​

ВердиктЗначение
safeАдрес ведет к публичному хосту, и небрежная проверка прочитала бы тот же хост.
private-targetХост разрешается в приватный, loopback, link-local, неуказанный адрес или адрес облачных метаданных.
parser-divergentНебрежная текстовая проверка прочитала бы другой настоящий хост, чем тот, к которому подключается загрузчик.
invalid urlСтрока не разбирается как URL, поэтому загружать нечего.

Разрешением считается только safe. Считайте private-target, parser-divergent и invalid url блокировкой.

Параметры CLI​

ПараметрЗначениеОписание
--urlURL или хостПроверяет один адрес. Повторите, чтобы проверить несколько, по одному вердикту на строку.

Нужен хотя бы один --url. Адрес никогда не передается как голый позиционный аргумент, поэтому его нельзя принять за флаг.

Почему значение флага

Каждый адрес передается как значение флага и никогда не подставляется в команду. Значение с кавычками или обратными кавычками остается инертным и не может внедриться в оболочку. Всегда заключайте его в одинарные кавычки, чтобы оболочка не раскрыла его раньше.

Чего он не охватывает

Хук чистый и никогда не разрешает DNS, поэтому два пробела времени выполнения находятся вне его охвата: DNS rebinding (имя, которое при проверке разрешается в публичный адрес, а при загрузке во внутренний) и цепочки перенаправлений (первый шаг проходит проверку, а затем перенаправляет внутрь). Закрывайте их, разрешая имя один раз и подключаясь к проверенному адресу, а также отказываясь следовать перенаправлениям. Зарезервированные loopback-имена (localhost и семейство .localhost) хук без поиска считает внутренними, но любое другое DNS-имя получает safe, потому что утверждать, что оно разрешается внутрь, можно было бы только после разрешения: такие имена охраняет список разрешенных адресов, и именно его проверяет этот инструмент.

подсказка

Это та же проверка, которую запускает специализация network, чтобы доказать, что фильтр адресов действует.

Частые вопросы

Запустите хук network. Он оценивает адрес загрузки и возвращает safe, private-target, parser-divergent или invalid url. Разрешением считается только safe.

URL, который разные парсеры читают по-разному, классический способ обойти защиту от SSRF. Хук network помечает его, а не пропускает.