Хуки

Хук 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, бо стверджувати, що воно вказує всередину, можна лише після розпізнавання: такі імена охороняє allowlist, і саме його перевіряє цей хук.

порада

Це та сама перевірка, яку виконує спеціалізація network, щоб довести, що фільтр адрес призначення діє.

Часті запитання

Запустіть хук network. Він оцінює адресу призначення запиту й повертає safe, private-target, parser-divergent або invalid url. Дозволом є лише safe.

Це URL, який різні парсери читають по-різному, класичний спосіб обійти захист від SSRF. Хук network позначає його, а не дозволяє.