Зачіпка
SCA відповідає на дуже практичне питання: які чужі компоненти є в нашому проєкті і чи відомі для них ризики.
Це не магічна кнопка “зробити безпечно”. Це dependency radar. Він показує, де у бібліотеках, пакетах або container layers є відомі проблеми, щоб команда могла прийняти нормальне рішення: оновити, замінити, прийняти ризик або перевірити глибше.
Проблема / Контекст
Сучасний застосунок майже завжди складається з власного коду і великої кількості сторонніх компонентів. У Node.js це npm або pnpm пакети. У Python - PyPI. У backend і infra можуть бути container images, системні пакети, Terraform modules, GitHub Actions і ще багато дрібних деталей.
Команда часто бачить тільки direct dependencies у package.json. Але реальний production artifact містить також transitive dependencies. Саме там нерідко з’являються CVE, старі версії або ліцензійні сюрпризи.
SCA бере інвентар залежностей і порівнює його з базами відомих вразливостей, advisory feeds, policy rules і даними про ліцензії. На виході команда отримує findings, а не готову істину. Далі потрібен triage.
Чому це важливо
Без SCA команда дізнається про dependency risk випадково: з новин, від клієнта, після incident або під час ручної перевірки перед релізом. Це повільно і нервово.
З SCA ризики стають видимими раніше:
- pull request додає нову vulnerable dependency;
- Dependabot або Renovate відкриває update;
- release scan знаходить critical CVE у container image;
- security team бачить, які findings повторюються;
- команда може пов’язати SBOM із реальним triage.
Але є пастка. Якщо SCA просто кричить на кожну CVE, люди швидко перестають слухати. Хороший процес відрізняє “критично й досяжно” від “є запис у базі, але в нашому продукті шлях не використовується”.
Схема в голові
Уяви SCA як перевірку складу продукту перед відправкою. Спершу треба знати, що лежить у коробці. Потім перевірити, чи є для цих деталей відомі проблеми. Потім вирішити, що робити.
Практична схема:
- lockfile або artifact дає список компонентів;
- SBOM робить цей список переносним і прив’язаним до release;
- SCA порівнює компоненти з advisory базами;
- triage враховує severity, exploitability і reachability;
- dependency update або mitigation потрапляє в нормальний workflow.
Важливо: SCA має дивитися на те, що реально їде в production. Скан source tree корисний, але якщо production - це container image, перевірте image теж.
Як це зробити
1. Почніть із правильного джерела
Для Node.js мінімум - scan lockfile:
npm audit --production
pnpm audit --prod
Для container-based deploy додайте image scanner, наприклад Trivy або інший інструмент, який бачить OS packages і application dependencies. Якщо у вас уже є SBOM, використовуйте його як стабільний input для security review.
2. Додайте SCA в CI/CD
Перший рівень - pull request check:
name: dependency-scan
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- run: npm ci
- run: npm audit --production --audit-level=high
Це не ідеальний enterprise setup, але він ловить очевидні high-risk зміни. Далі можна підключити GitHub dependency review, GitLab dependency scanning, Snyk, Trivy, osv-scanner або інший інструмент під ваш стек.
3. Не плутайте severity з дією
Severity важлива, але вона не відповідає на всі питання. Для triage дивіться:
- чи компонент є у production;
- direct це dependency чи transitive;
- чи використовується вразлива функція;
- чи є exploit;
- чи є fixed version;
- чи є тимчасова mitigation;
- чи ламає update сумісність.
Critical reachable vulnerability у production dependency - кандидат на блокер. Medium finding у dev-only пакеті може піти в backlog. Важливо, щоб це було правилом, а не настроєм людини в п’ятницю ввечері.
4. Налаштуйте update workflow
SCA без update workflow швидко перетворюється на червоний список. Потрібні:
- автоматичні dependency PR;
- власник triage;
- правило для emergency update;
- окремий backlog для non-blocking findings;
- періодичний review винятків;
- зв’язок із SBOM для release evidence.
5. Документуйте винятки
Іноді finding справді не впливає на продукт. Наприклад, вразлива частина бібліотеки не пакується в production або кодовий шлях недосяжний. Це можна прийняти, але не мовчки.
Для винятку запишіть: CVE, компонент, версію, чому ризик прийнято, хто власник і коли перегляд. Виняток без дати перегляду майже гарантовано стане боргом.
Типові помилки
- сканувати тільки direct dependencies;
- ігнорувати container image;
- блокувати всі findings без triage;
- не блокувати нічого, бо “SCA шумить”;
- не оновлювати lockfile після dependency update;
- тримати suppressions без власника;
- не відрізняти dev-only пакет від production dependency;
- думати, що SCA замінює code review або threat modeling.
Висновок / План дій
SCA робить dependency risk видимим. Але користь з’являється тільки тоді, коли scan підключений до реального artifact, triage rules зрозумілі, а оновлення залежностей не є героїчним ручним процесом.
Почни з малого:
- визнач, що саме їде в production;
- запусти SCA на lockfile і container image;
- додай PR check для high і critical findings;
- налаштуй dependency update PR;
- веди backlog для non-blocking risks;
- документуй винятки з датою перегляду;
- зв’яжи SCA з SBOM для release evidence.
Офіційні джерела:
Короткий чеклист
- Запустити SCA на lockfile або production artifact.
- Перевірити direct і transitive dependencies.
- Не блокувати release лише за заголовком CVE.
- Визначити правила для critical і high findings.
- Зв'язати SCA з SBOM і dependency update workflow.
Prompt Pack: налаштувати SCA для проєкту
Допоможи налаштувати SCA-перевірку для мого проєкту. Вхідні дані: - мова і стек проєкту; - package manager і lockfile; - де запускається CI/CD; - чи є SBOM; - які SCA або dependency scanning tools уже використовуються; - приклад останнього звіту з findings; - які середовища є критичними для production. Поверни: 1. verdict, чи покриває SCA реальні production dependencies; 2. мінімальний CI workflow; 3. як відрізнити direct і transitive risk; 4. правила severity і exploitability для triage; 5. що блокувати на pull request, а що вести в backlog; 6. чек-лист для щотижневого dependency review. Формат відповіді: verdict, workflow, triage rules, PR gate, backlog, checklist.