Хук cors представляет собой детерминированный движок, стоящий за специализацией http-request, и вы можете запускать его сами. Он работает в двух режимах одной командой: сканирование проверяет исходный код на обходимый список разрешенных источников (регулярное выражение для проверки хоста, мимо которого проскальзывает хост злоумышленника), а оценка присваивает отдельному значению источника CORS вердикт wildcard, null или safe.
Сканирование кодовой базы
Без флага хук сканирует весь проект.
- Весь проект
- Директория
- Один файл
npx lagune read cors
npx lagune read cors --dir src/server
npx lagune read cors --file internal/auth/origin.go
Хук перечисляет каждый обходимый список разрешенных источников под одним заголовком, сгруппировав по файлам. Проверка хоста, у которой .+/.* стоит в части authority перед суффиксом доверенного хоста (^https?://.+\.trusted\.com), пропускает хост злоумышленника вроде your-site.com.attacker.com.
Origin-allowlist patterns with a greedy wildcard (bypassable, review):
internal/auth/origin.go
^https?://.+\.trusted\.com
Это повод для проверки, а не закрытая находка: по одному тексту нельзя определить, охраняет ли регулярное выражение настоящее решение о доверии, поэтому сканирование никогда не меняет код выхода. Прочитайте каждое и убедитесь, что список разрешенных источников сравнивает значения на полное равенство. Если ничего не найдено, выводится одна строка.
npx lagune read cors --dir src/clean
# => no bypassable origin allowlist found
Оценка источника
Передайте каждый источник через --origin. Хук выводит по одному слову на источник и завершается с ненулевым кодом при любом wildcard или null.
- Один источник
- Несколько источников
npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
Повторите --origin, чтобы оценить весь список разрешенных источников за один вызов, по одному вердикту на строку, по порядку.
npx lagune read cors \
--origin 'https://app.example.com' \
--origin '*' \
--origin 'null'
# => safe
# => wildcard
# => null
| Вердикт | Значение |
|---|---|
safe | Не *, не null и не шаблон с *. Корректность формы источника не гарантируется. |
wildcard | * или шаблон поддомена, хоста или порта: ответ может прочитать любой сайт (или широкий круг сайтов). |
null | Источник null, который могут подделать изолированные iframe и перенаправления. |
Разрешением считается только safe, а --origin служит оракулом значений: он оценивает значение, а не обработчик, поэтому обработчик подтвердите с помощью специализации http-request.
Параметры CLI
| Параметр | Значение | Описание |
|---|---|---|
--origin | источник | Оценивает одно значение источника. Повторите, чтобы оценить несколько, по одному на строку. |
--dir | директория | Ограничивает сканирование директорией. Можно повторять и сочетать с --file. |
--file | файл | Ограничивает сканирование одним файлом. Можно повторять и сочетать с --dir. |
Без параметров хук сканирует весь проект. --origin включает режим оценки и не сочетается с --dir или --file.
Сканирование распознает форму обходимого регулярного выражения, а --origin оценивает значения источников. Два шаблона на уровне исходного кода остаются вне досягаемости: отражение заголовка Origin из запроса (сервер возвращает входящий Origin обратно или сочетает его с учетными данными) и слишком мягкий список разрешенных источников на основе endsWith или поиска подстроки. Распознавайте их в коде и обрабатывайте так, как описывает специализация http-request.
Частые вопросы
Изолированные iframe и некоторые перенаправления отправляют Origin: null, поэтому список разрешенных источников, доверяющий null, дает этим контекстам доступ на чтение. Хук cors помечает его наравне с wildcard.
Запустите npx lagune read cors по кодовой базе. Хук помечает регулярное выражение для проверки хоста, у которого жадный шаблон стоит перед доверенным суффиксом, из-за чего хост злоумышленника вроде your-site.com.attacker.com проскальзывает мимо.
