0Pricing
Security+ Academy · Lezione

Sicurezza delle dipendenze e analisi della composizione del software

Verifichi le librerie di terze parti con strumenti SCA, imponga il pinning delle dipendenze e integri avvisi automatici sulle vulnerabilità nella pipeline CI/CD.

Sicurezza delle dipendenze e analisi della composizione del software è una lezione Security+ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Security+ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Security+ Academy include 4 lezioni in totale.

Il rischio delle dipendenze open source

Le applicazioni moderne sono composte in gran parte da librerie e framework open source di terze parti. Una tipica applicazione Node.js può avere più di 1.000 dipendenze transitive; un progetto Java può includere centinaia di artifact Maven. Ogni dipendenza rappresenta una potenziale superficie di attacco. La vulnerabilità Log4Shell (CVE-2021-44228) nella libreria Log4j ha dimostrato che una singola dipendenza può rendere immediatamente sfruttabili milioni di applicazioni in tutto il mondo, nel giro di pochi giorni dalla divulgazione.

Che cos'è la Software Composition Analysis?

Gli strumenti di Software Composition Analysis (SCA) inventariano automaticamente tutti i componenti open source di un'applicazione, incluse le dipendenze transitive (le dipendenze delle vostre dipendenze), e li verificano continuamente rispetto ai database delle vulnerabilità alla ricerca di CVE note. La SCA produce un Software Bill of Materials (SBOM) che elenca ogni componente e ogni versione, consentendo di identificare rapidamente i sistemi interessati quando vengono divulgate nuove vulnerabilità.

# SCA tool usage examples:

# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version

# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings

# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automatically

Dipendenze transitive: il rischio nascosto

Le dipendenze transitive sono librerie da cui dipendono le vostre dipendenze dirette e che non avete scelto esplicitamente. Potreste dipendere direttamente dal Package A, che dipende dal Package B (versione 1.2), che a sua volta dipende dal Package C (versione 3.0, una versione vulnerabile). Non siete consapevoli della presenza del Package C, ma la vostra applicazione lo esegue. Gli strumenti SCA analizzano l'intero albero delle dipendenze per portare alla luce queste vulnerabilità nascoste, che gli sviluppatori non possono individuare direttamente.

# Dependency tree example:
# Your package.json:
#   'express': '^4.18.0'     (direct dependency)
#   'lodash':  '^4.17.21'   (direct dependency)

# Transitive dependencies (you didn't choose these):
#   express -> 'qs' 6.11.0       (URL parsing)
#   express -> 'body-parser' 1.20 -> 'qs' 6.11.0
#   lodash (self-contained in this case)

# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.

Il Software Bill of Materials (SBOM)

Un Software Bill of Materials (SBOM) è un inventario formale e leggibile dalle macchine di tutti i componenti di un prodotto software, simile all'elenco degli ingredienti di un alimento. I formati SBOM includono SPDX (Linux Foundation) e CycloneDX (OWASP). L'Executive Order 14028 degli Stati Uniti (2021) ha reso obbligatori gli SBOM per il software venduto al governo federale. Con un SBOM, i team di sicurezza possono chiedere immediatamente: «quali dei nostri prodotti contengono Log4j?» e ottenere una risposta in pochi minuti, anziché dopo giorni di ricerca manuale.

# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json

# SBOM content example (SPDX JSON):
# {
#   'packages': [
#     { 'name': 'express',  'version': '4.18.2', 'license': 'MIT' },
#     { 'name': 'lodash',   'version': '4.17.21','license': 'MIT' },
#     { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
#   ]
# }

# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projects

Blocco delle dipendenze e file lock

Il blocco delle dipendenze specifica le versioni esatte delle dipendenze invece di intervalli flessibili (^1.2.3 o *). I file lock (package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock) registrano la versione esatta risolta di ogni dipendenza al momento dell'installazione. Devono essere sottoposti a commit nel controllo del codice sorgente per garantire che ogni membro del team e ogni pipeline CI/CD utilizzi versioni identiche delle dipendenze, prevenendo gli attacchi alla supply chain che contaminano le versioni dei pacchetti tra un'installazione e l'altra.

# Version range vs pinned versions:

# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0'   -> installs latest 4.x.x
# 'lodash': '*'         -> installs any version!

# PINNED (always same version):
# 'express': '4.18.2'   -> always exactly 4.18.2

# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).

Attacchi alla supply chain: typosquatting e dependency confusion

Gli attacchi alla supply chain prendono di mira l'ecosistema delle dipendenze. Il typosquatting consiste nel pubblicare pacchetti dannosi con nomi simili a quelli di pacchetti popolari (ad esempio, lodahs invece di lodash), contando sul fatto che gli sviluppatori digitino erroneamente il nome. Gli attacchi di dependency confusion sfruttano l'ordine con cui i package manager cercano nei registry: un attaccante pubblica un pacchetto dannoso con lo stesso nome di un pacchetto privato interno, ma con un numero di versione più alto, inducendo il package manager a installare la versione pubblica dannosa.

# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com

# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)

# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry

# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packages

Strumenti SCA disponibili sul mercato

Nel settore sono ampiamente utilizzati diversi strumenti SCA. Snyk offre la scansione delle dipendenze, intuitiva per gli sviluppatori, con pull request automatiche per le correzioni. OWASP Dependency-Check è uno strumento gratuito e ampiamente adottato per Java, .NET, Python e Ruby. GitHub Dependabot apre automaticamente pull request per aggiornare le dipendenze vulnerabili nei repository GitHub. JFrog Xray e Sonatype Nexus IQ integrano la SCA nei repository degli artifact, impedendo alle build vulnerabili di arrivare in produzione.

Integrazione della SCA nelle pipeline CI/CD

La SCA è più efficace quando viene integrata nella pipeline CI/CD come quality gate. A ogni pull request e a ogni build, la pipeline esegue lo strumento SCA e interrompe la build se nelle dipendenze vengono rilevate CVE di gravità critica o alta. Questo approccio di «shift left» individua le dipendenze vulnerabili prima che arrivino in produzione, non mesi dopo durante una revisione manuale della sicurezza o in seguito a una violazione. I team dovrebbero definire soglie chiare di gravità delle vulnerabilità, distinguendo quelle che bloccano la distribuzione da quelle che generano solo avvisi.

# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
#   uses: snyk/actions/node@master
#   env:
#     SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
#   with:
#     args: --severity-threshold=high
#             --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)

Valutazione dello stato di salute dei pacchetti open source

Prima di aggiungere una dipendenza, valutate il suo livello di sicurezza utilizzando diversi indicatori. Attività di manutenzione: il progetto viene mantenuto attivamente? Quando sono stati effettuati l'ultimo commit e l'ultima release? Storico delle vulnerabilità note: quante CVE ha avuto e con quale rapidità sono state corrette? Volume dei download: i pacchetti ampiamente utilizzati sono sottoposti a un controllo di sicurezza maggiore. Numero di dipendenze: i pacchetti con meno dipendenze introducono un rischio transitive minore. OpenSSF Scorecard fornisce una valutazione automatica delle pratiche di sicurezza dei progetti open source.

Strategie di remediation delle vulnerabilità

Quando la SCA identifica una dipendenza vulnerabile, sono possibili diverse strategie di remediation. Aggiornare a una versione corretta: è l'opzione preferibile quando disponibile. Il virtual patching tramite regole WAF può mitigare i percorsi di exploit noti mentre si prepara l'aggiornamento. Rimuovere la dipendenza se non è più necessaria. Accettare il rischio con una giustificazione documentata se la vulnerabilità non è sfruttabile nello specifico contesto di utilizzo (ad esempio, una vulnerabilità lato server in una libreria lato client). Non lasciate mai vulnerabilità critiche senza intervento né accettazione documentata.

Conformità delle licenze nelle dipendenze

Gli strumenti SCA hanno una doppia funzione: identificano le vulnerabilità di sicurezza e segnalano i problemi di conformità delle licenze nelle dipendenze open source. Tra le licenze problematiche più comuni vi sono GPL v2/v3 (copyleft: richiede che anche il vostro prodotto venga distribuito come open source se lo distribuite), AGPL (estende la GPL ai servizi di rete) e SSPL. L'utilizzo di una libreria con licenza GPL in un software commerciale proprietario senza una licenza commerciale può creare una grave responsabilità legale. Strumenti SCA come FOSSA, Black Duck e WhiteSource automatizzano la scansione delle licenze insieme al rilevamento delle vulnerabilità, garantendo la conformità agli obblighi relativi all'open source.

# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
#   MIT, Apache 2.0, BSD 2/3-Clause
#   -> Can use in proprietary code, just keep attribution

# WEAK COPYLEFT (medium risk - check usage):
#   LGPL -> can link dynamically without open-sourcing your code
#   MPL 2.0 -> modifications to MPL files must be open-sourced

# STRONG COPYLEFT (high risk for proprietary products):
#   GPL v2, GPL v3 -> if you distribute code using GPL library,
#                     your entire product must also be GPL
#   AGPL -> extends GPL to SaaS/network services

# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manually

Verifica rapida

Verificate la vostra comprensione dei concetti di CompTIA Security+ (SY0-701) trattati in questa lezione.

Riepilogo della lezione

In questa lezione avete imparato che: gli strumenti SCA analizzano l'intero albero delle dipendenze, incluse quelle transitive, alla ricerca di CVE note; gli SBOM forniscono un inventario leggibile dalle macchine, consentendo di reagire rapidamente alla divulgazione di nuove vulnerabilità; infine, integrare la SCA nella pipeline CI/CD come quality gate permette di individuare le dipendenze vulnerabili prima che arrivino in produzione. Nella prossima lezione esploreremo il DevSecOps e come spostare i controlli di sicurezza a sinistra nell'intera pipeline CI/CD.

Domande Frequenti

La lezione «Sicurezza delle dipendenze e analisi della composizione del software» è gratuita?

Sì — il testo completo di «Sicurezza delle dipendenze e analisi della composizione del software» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Security+ Academy, passa a CoddyKit PRO. Il corso Security+ Academy include 4 lezioni in totale.

Cosa imparerò in «Sicurezza delle dipendenze e analisi della composizione del software»?

Verifichi le librerie di terze parti con strumenti SCA, imponga il pinning delle dipendenze e integri avvisi automatici sulle vulnerabilità nella pipeline CI/CD. Eserciti Security+ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Security+ Academy?

Non è richiesta alcuna esperienza precedente. Security+ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Sicurezza delle dipendenze e analisi della composizione del software»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Security+ Academy?

Sì. Ogni lezione Security+ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Convalida degli input e codifica degli output
  2. Gestione sicura dei segreti e variabili d'ambiente
  3. Sicurezza delle dipendenze e analisi della composizione del software
  4. DevSecOps: spostare la sicurezza a sinistra nelle pipeline
← Torna a Security+ Academy