У сучасному середовищі розробки ігнорування безпеки залежностей — це не просто недбалість, а свідомий шлях до інцидентів. Кожен новий пакет 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-проєкту.
Вона автоматично виконує дві критично важливі задачі:
Виявляє активні загрози — пакети з відомими вразливостями.
Контролює технічний борг — застарілі залежності, які можуть призвести до проблем у майбутньому.
Пропускаючи цей етап, ви фактично залишаєте двері відчиненими для атак.
Додайте ці перевірки сьогодні — і завтра ваш проєкт буде набагато безпечнішим.