Хук network вирішує, чи захищена адреса призначення серверного запиту від SSRF (запиту, який можна спрямувати на внутрішні сервіси, хмарні метадані чи приватні хости). Це детермінований рушій спеціалізації network, і ви можете запускати його самі.
Запуск
Передайте кожну адресу призначення через --url. Хук виводить по одному слову на адресу, пояснення наведено в таблиці нижче.
- Одна адреса
- Кілька адрес
npx lagune read network --url 'http://example.com/'
# => safe
npx lagune read network --url 'http://0x7f000001/'
# => private-target
Повторіть --url, щоб оцінити весь allowlist чи denylist одним викликом, по вердикту на рядок, у тому самому порядку.
npx lagune read network \
--url 'http://example.com/' \
--url 'http://[::1]/' \
--url 'http://allowed.com@evil.example/'
# => safe
# => private-target
# => parser-divergent
Хук розпізнає хост так само, як мережа, тож закодовані форми внутрішньої адреси не прослизають: шістнадцяткова, вісімкова, десяткова без крапок, скорочена, 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
| Параметр | Значення | Опис |
|---|---|---|
--url | URL або хост | Перевірити одну адресу. Повторіть, щоб перевірити кілька, по вердикту на рядок. |
Потрібен щонайменше один --url. Адреса ніколи не передається як окремий позиційний аргумент, тож її неможливо сплутати з прапорцем.
Кожна адреса передається як значення прапорця й ніколи не підставляється в команду. Значення з лапками чи зворотними апострофами залишається інертним і не може здійснити ін'єкцію в оболонку. Завжди беріть його в одинарні лапки, щоб ваша оболонка не розгорнула його першою.
Хук є чистою функцією й ніколи не виконує DNS-запитів, тож дві прогалини часу виконання лишаються поза його межами: DNS rebinding (ім'я, що під час перевірки вказує на публічну адресу, а під час запиту на внутрішню) і ланцюжки перенаправлень (перший крок проходить перевірку, а потім перенаправляє всередину). Закрийте їх, розпізнаючи ім'я один раз і з'єднуючись із перевіреною адресою, а також відхиляючи перенаправлення. Зарезервовані loopback-імена (localhost і сімейство .localhost) хук без запиту вважає внутрішніми, але будь-яке інше DNS-ім'я дає safe, бо стверджувати, що воно вказує всередину, можна лише після розпізнавання: такі імена охороняє allowlist, і саме його перевіряє цей хук.
Це та сама перевірка, яку виконує спеціалізація network, щоб довести, що фільтр адрес призначення діє.
Часті запитання
Запустіть хук network. Він оцінює адресу призначення запиту й повертає safe, private-target, parser-divergent або invalid url. Дозволом є лише safe.
Це URL, який різні парсери читають по-різному, класичний спосіб обійти захист від SSRF. Хук network позначає його, а не дозволяє.
