Охват

Что yof охватывает, а что нет

Класс за классом: что yof ищет в вашем коде, что на работающем приложении проверяет «Автоматизированное тестирование» и чего не делает ни то, ни другое.

Как читать таблицу

  • В коде: шаблоны, которые правила ищут в файлах связанного репозитория. Правило находит шаблон и не запускает код, поэтому большинство таких находок требует подтверждения.
  • Вживую: тесты на работающем приложении. «Автоматизированное тестирование» в разработке и не продаётся, поэтому ничего с такой пометкой клиентам пока не доступно.
  • Не охвачено: то, чего не делает ни то, ни другое. Отчёт никогда не звучит так, будто это проверено.
КлассВ кодеВживуюНе охвачено
SQL-инъекция
  • Текст SQL собирается из данных запроса
  • Текст, отправленный в приложение, выполняется как часть запроса к базе В разработке
Ввод, который проходит через другую функцию или файл, сохранённая инъекция (второго порядка) и ошибки внутри ORM.
NoSQL-инъекция
  • Фильтр базы данных берёт значение прямо из запроса
  • Текст, отправленный в приложение, выполняется как часть запроса к базе В разработке
Языки запросов других документных баз и языки, кроме JavaScript и TypeScript.
Внедрение команд
  • Команда оболочки собирается из данных запроса
  • Текст, отправленный в приложение, выполняется как системная команда В разработке
Аргументы, внедрённые в программу, вызванную без оболочки, и другие языки.
Внедрение в шаблон
  • Данные запроса используются как шаблон
  • Текст, отправленный в приложение, выполняется его движком шаблонов В разработке
Шаблоны, прочитанные из базы данных, и движки шаблонов, работающие в браузере.
Выполнение кода из данных
  • Данные запроса выполняются как код
Теста вживую нетВыполнение через объект песочницы и другие языки.
Межсайтовый скриптинг (XSS)
  • Данные запроса записываются на страницу как HTML
  • Текст, отправленный в приложение, возвращается как живая разметка страницы В разработке
Обходы доверия в Angular и Vue, настройки autoescape серверных шаблонов, сохранённые скрипты и подтверждение в настоящем браузере.
Открытое перенаправление
  • Перенаправление ведёт туда, куда скажет запрос
  • Ваш сайт переадресует посетителей на любой адрес из ссылки Доступно сегодня в yof attack
Списки разрешённых адресов, которые есть и которые можно обойти.
Подделка запросов со стороны сервера (SSRF)
  • Сервер загружает адрес, взятый из запроса
  • Ваш сервер запрашивает любой адрес, указанный в запросе В разработке
DNS rebinding, перенаправления, ведущие внутрь, и доступность облачных метаданных.
Межсайтовая подделка запросов (CSRF)
  • Вход по cookie без проверки CSRF в коде
  • Cookie входа задаётся без httpOnly или sameSite
  • У cookie входа не хватает защитного флага Доступно сегодня в yof attack
  • Другой сайт может заставить вошедшего пользователя изменить свои данные В разработке
Фреймворки, кроме приложений в стиле Express, проверка на стороне прокси и то, защищают ли маршрут настройки самого браузера.
Небезопасная загрузка объектов
  • Данные запроса загружаются как объект
  • Приложение передаёт тело запроса небезопасному читателю объектов В разработке
Java ObjectInputStream, .NET BinaryFormatter и внешние сущности XML.
Слабая криптография
  • Пароль или токен хешируется быстрым или взломанным алгоритмом
  • Токен или код создаётся предсказуемой функцией случайных чисел
  • Криптографический ключ записан в коде
  • Шифрование использует режим ECB
  • Проверка сертификатов отключена
  • Токен входа принимается без проверки подписи
  • Приложение принимает токен входа, который не проверило В разработке
  • Идентификаторы или токены входа легко угадать В разработке
Длины ключей, версии протоколов и сертификаты работающего сервиса, собственная криптография и побочные каналы.
Пароли в коде и конфигурации
  • Пароль записан в вашем коде или конфигурации
  • Стандартные логин и пароль записаны в коде
  • В адресе в вашем коде указан пароль
Теста вживую нетИстория git удалённых файлов, работает ли ещё найденный пароль, и одно простое слово без цифры и символа.
Загрузка файлов
  • Загрузка сохраняет имя или тип файла, присланные посетителем
  • Папка загрузок отдаётся как веб-страницы
  • Загруженный файл отдаётся как страница, которую запускает браузер В разработке
Что делает с файлом хранилище или CDN, вредоносный код в загруженном файле и ограничения размера.
Dockerfile
  • Секрет записан в вашем Dockerfile
  • Ваш Dockerfile выполняет загруженный файл без проверки
  • Срок поддержки вашего базового образа закончился
  • Ваш контейнер запускает приложение от root
  • У базового образа вашего контейнера нет фиксированной версии
  • В вашем образе контейнера есть SSH-сервер
  • Базовый образ зафиксирован тегом, а не дайджестом
  • Ваш Dockerfile устанавливает пакеты без фиксированных версий
Теста вживую нетСобранные образы и пакеты операционной системы внутри них не сканируются. Конец поддержки известен только для шести официальных базовых образов.
docker-compose
  • Сервис compose работает с правами хоста
  • Сервис compose может управлять самим Docker
  • Секрет записан в вашем файле compose
Теста вживую нетРаботающие контейнеры и файлы env, которых нет в репозитории.
Манифесты Kubernetes
  • Контейнер Kubernetes работает в привилегированном режиме
  • Нагрузка Kubernetes получает доступ к своему узлу
  • Секрет записан в манифесте Kubernetes
  • Контейнер Kubernetes может работать от root
  • Контейнер Kubernetes может получить больше прав
  • У контейнера Kubernetes нет ограничений ресурсов
  • У образа Kubernetes нет фиксированной версии
Теста вживую нетРаботающий кластер, неотрендеренные шаблоны Helm, RBAC, сетевые и admission-политики и файлы с якорями YAML.
Terraform
  • Правило файрвола открывает административный порт всему интернету
  • Бакет хранилища сделан публичным в Terraform
  • Хранилище или база данных создаётся без шифрования
  • База данных доступна из интернета в Terraform
  • Пароль или ключ записан в ваших файлах Terraform
Теста вживую нетСам облачный аккаунт: развёрнутое может отличаться от файлов. Значения из переменных, модулей или функций, другие провайдеры и другие типы ресурсов.

Вне любой строки

  • Собранные образы контейнеров и системные пакеты внутри них не сканируются.
  • Эти правила читают файлы. Они не смотрят на работающую систему: кластер, облачный аккаунт и поведение запущенного приложения.
  • Данные запроса отслеживаются только внутри одной функции или обработчика. Значение, которое сначала проходит через другую функцию или файл, не отслеживается.
  • Языки: синтаксические правила читают JavaScript и TypeScript. Для Python есть простые, точные формы. Для PHP, Ruby, Go, Java, Kotlin и C# есть несколько однострочных форм. Другие языки эти правила не читают.

Никогда не покрывается автоматическими проверками

  • Ошибки в бизнес-логике, например цена или шаг, который можно обойти.
  • Уязвимости, о которых ещё никто не знает (zero-day).
  • Люди и процессы: фишинг, пароли, передаваемые вручную, у кого есть доступ.
  • Всё за пределами охвата, указанного в этом отчёте, и любые изменения после его даты.

Это не тест на проникновение.

Как проверяет yof

Что yof охватывает, а что нет: класс за классом