Rate this post

У сучасному середовищі розробки ігнорування безпеки залежностей — це не просто недбалість, а свідомий шлях до інцидентів. Кожен новий пакет NuGet, який ви додаєте в проєкт, потенційно може містити вразливості.
Тому автоматизація перевірки залежностей — це не просто «гарна практика», а необхідний мінімум безпеки, без якого неможливо впевнено випускати надійний продукт.

У цій статті показано, як додати обов’язковий етап перевірки безпеки (security-scan) у файл .gitlab-ci.yml будь-якого .NET-проєкту, використовуючи стандартні інструменти з пакету .NET SDK.

Додаємо етап Security Scan до .gitlab-ci.yml

Нижче наведено YAML-фрагмент, який можна безпосередньо включити у ваш CI/CD-конвеєр:

security-scan:
stage: security-scan
image: mcr.microsoft.com/dotnet/sdk:8.0
before_script:
- dotnet tool install --global dotnet-outdated-tool
script:
# Step 1: Check for known vulnerabilities in packages. This is mandatory.
- echo "Searching for KNOWN vulnerabilities in packages..."
- dotnet list package --vulnerable --include-transitive

# Step 2: Check for outdated packages. Important for maintenance and security.
- echo "Checking for outdated (non-secure) packages..."
- dotnet-outdated
allow_failure: true
only:
- main
- develop
- merge_requests

Детальний розбір: перша лінія захисту вашого проєкту

stage: security-scan

Перевірка безпеки винесена в окремий етап, щоб підкреслити її важливість.
Це гарантує, що сканування виконується регулярно — зазвичай після етапів збірки та тестування.

image: mcr.microsoft.com/dotnet/sdk:8.0

Використання офіційного Docker-образу .NET SDK від Microsoft забезпечує доступ до найновіших CLI-інструментів, необхідних для надійного аналізу та звітності.

before_script

Цей блок готує середовище для сканування.

Команда

dotnet tool install --global dotnet-outdated-tool

встановлює утиліту dotnet-outdated-tool.
Хоча основна перевірка вразливостей виконується вбудованими засобами, цей інструмент допомагає відстежувати застарілі пакети — важлива частина підтримання «гігієни» залежностей.
Ігнорування оновлень з часом перетворюється на технічний борг і підвищує ризики безпеки.

script

Тут виконуються основні команди, що безпосередньо захищають ваш код.

  • Крок 1: Пошук відомих вразливостей
    Команда dotnet list package --vulnerable перевіряє всі залежності (включно з транзитивними) і показує список небезпечних пакетів.

  • Крок 2: Перевірка застарілих пакетів
    Команда dotnet-outdated визначає залежності, які втратили актуальність або можуть містити невиправлені проблеми.

allow_failure: true

Цей параметр дозволяє конвеєру продовжувати роботу навіть у разі виявлення проблем.
Це зручний компроміс на початковому етапі впровадження — розробники отримують звіт, але процес збірки не блокується.
Втім, якщо ваш проєкт працює з конфіденційними даними або продакшн-системами, варто встановити false, щоб не допустити злиття коду з відомими вразливостями.

only

Цей блок визначає, для яких гілок виконується перевірка — main, develop і merge requests.
Завдяки цьому можна виявити ризики ще до того, як потенційно небезпечний код потрапить до основної гілки.

Висновок

Наведена конфігурація — це не «опція» і не «додаткова функція», а базовий стандарт безпеки для будь-якого .NET-проєкту.
Вона автоматично виконує дві критично важливі задачі:

  1. Виявляє активні загрози — пакети з відомими вразливостями.

  2. Контролює технічний борг — застарілі залежності, які можуть призвести до проблем у майбутньому.

Пропускаючи цей етап, ви фактично залишаєте двері відчиненими для атак.
Додайте ці перевірки сьогодні — і завтра ваш проєкт буде набагато безпечнішим.