Охоплення

Що 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 охоплює, а що ні: клас за класом