<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Supply Chain on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/supply-chain/</link>
        <description>Recent content in Supply Chain on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 02 Jun 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/supply-chain/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>DevSecOps in pratica: la serie</title>
        <link>https://www.matteobianchi.eu/p/devsecops-la-serie/</link>
        <pubDate>Tue, 10 Mar 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/devsecops-la-serie/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/devsecops-la-serie/cover.png" alt="Featured image of post DevSecOps in pratica: la serie" /&gt;&lt;h2 id=&#34;perché-questa-serie&#34;&gt;Perché questa serie
&lt;/h2&gt;&lt;p&gt;Per anni la sicurezza è arrivata alla fine: un audit a ridosso del rilascio, una lista di
vulnerabilità da sistemare &lt;em&gt;dopo&lt;/em&gt; che il codice era già scritto, un cancello che rallentava la
consegna senza renderla più sicura. &lt;strong&gt;DevSecOps&lt;/strong&gt; ribalta questo ordine: la sicurezza entra in ogni
fase del ciclo di vita, automatizzata, misurata e trattata come responsabilità di tutti — non come
il compito di un team separato alla fine della catena.&lt;/p&gt;
&lt;p&gt;Questa serie è un percorso pratico in &lt;strong&gt;30 capitoli&lt;/strong&gt;. Non un elenco di strumenti, ma un modo di
pensare: ogni controllo il più presto possibile (&lt;em&gt;shift left&lt;/em&gt;), ogni artefatto verificabile, ogni
decisione di rischio esplicita. Gli strumenti cambiano ogni due anni; i principi no.&lt;/p&gt;
&lt;h2 id=&#34;come-è-organizzata&#34;&gt;Come è organizzata
&lt;/h2&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    C[Cultura&amp;lt;br/&amp;gt;shift-left] --&amp;gt; D[Design&amp;lt;br/&amp;gt;threat model]
    D --&amp;gt; B[Build&amp;lt;br/&amp;gt;SAST/SCA/segreti]
    B --&amp;gt; A[Artefatti&amp;lt;br/&amp;gt;SBOM/firma/SLSA]
    A --&amp;gt; P[Deploy&amp;lt;br/&amp;gt;pipeline/IaC/policy]
    P --&amp;gt; R[Runtime&amp;lt;br/&amp;gt;K8s/admission/Falco]
    R --&amp;gt; O[Operate&amp;lt;br/&amp;gt;vuln mgmt/IR/metriche]
    O --&amp;gt; C
    style C fill:#fde2e4,stroke:#e63946
    style R fill:#e8f0fe,stroke:#4361ee
&lt;/pre&gt;

&lt;p&gt;Il filo conduttore segue il viaggio del codice: nasce da una &lt;strong&gt;cultura&lt;/strong&gt; e da un &lt;strong&gt;design&lt;/strong&gt; sicuri,
viene &lt;strong&gt;costruito&lt;/strong&gt; con controlli automatici, impacchettato in &lt;strong&gt;artefatti&lt;/strong&gt; verificabili, portato in
produzione da una &lt;strong&gt;pipeline&lt;/strong&gt; governata, difeso a &lt;strong&gt;runtime&lt;/strong&gt; e &lt;strong&gt;operato&lt;/strong&gt; con misure e risposta
agli incidenti. Poi si ricomincia: DevSecOps è un ciclo, non una linea.&lt;/p&gt;
&lt;h2 id=&#34;i-capitoli&#34;&gt;I capitoli
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fondamenta&lt;/strong&gt; — Cos&amp;rsquo;è DevSecOps, il Secure SDLC, il threat modeling nel ciclo, la gestione dei
segreti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt; — SAST, SCA e dipendenze, DAST, IAST/RASP, fuzzing: trovare i difetti mentre si scrive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supply chain&lt;/strong&gt; — SBOM, SLSA, firma degli artefatti: fidarsi solo di ciò che si può verificare.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline e deploy&lt;/strong&gt; — Sicurezza della CI/CD, IaC security, policy as code nella pipeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime&lt;/strong&gt; — Sicurezza delle immagini, hardening di Kubernetes, admission control, runtime
security, segreti e identità dei workload.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operate&lt;/strong&gt; — Patch management, security gates, vulnerability management, logging e detection,
incident response, compliance as code, metriche e cultura.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;a-chi-si-rivolge&#34;&gt;A chi si rivolge
&lt;/h2&gt;&lt;p&gt;A chi scrive codice e vuole capire dove la sicurezza tocca il suo lavoro; a chi gestisce pipeline e
cluster e deve renderli difendibili; a chi guida team e vuole misurare il rischio invece di
subirlo. Diamo per note le basi di Git, container e CI/CD; tutto il resto lo costruiamo insieme.&lt;/p&gt;
&lt;p&gt;DevSecOps non rallenta la consegna: la rende &lt;em&gt;ripetibile&lt;/em&gt;. Un rilascio sicuro e automatizzato è più
veloce di un audit manuale fatto nel panico la sera prima. Partiamo dal perché, nel primo capitolo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Firmare gli artefatti con Sigstore</title>
        <link>https://www.matteobianchi.eu/p/firma-artefatti-sigstore/</link>
        <pubDate>Tue, 02 Jun 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/firma-artefatti-sigstore/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/firma-artefatti-sigstore/cover.png" alt="Featured image of post Firmare gli artefatti con Sigstore" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/supply-chain-slsa/&#34; &gt;SLSA&lt;/a&gt; richiede provenienza &lt;em&gt;firmata&lt;/em&gt;, e la
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sbom-trasparenza/&#34; &gt;SBOM&lt;/a&gt; vale di più se firmata e legata all&amp;rsquo;artefatto. Ma la
firma crittografica aveva un problema pratico che l&amp;rsquo;ha resa rara: per firmare serve una chiave
privata, e custodire chiavi a lungo termine (rotazione, revoca, HSM, il rischio che trapelino) è un
onere che quasi nessun team si assumeva. &lt;strong&gt;Sigstore&lt;/strong&gt; elimina proprio quell&amp;rsquo;onere.&lt;/p&gt;
&lt;h2 id=&#34;lidea-firma-keyless&#34;&gt;L&amp;rsquo;idea: firma keyless
&lt;/h2&gt;&lt;p&gt;Sigstore permette di firmare &lt;em&gt;senza gestire una chiave privata a lungo termine&lt;/em&gt;. Il meccanismo:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    CI[Pipeline CI&amp;lt;br/&amp;gt;identità OIDC] --&amp;gt;|provami chi sei| F[Fulcio&amp;lt;br/&amp;gt;CA]
    F --&amp;gt;|certificato a vita&amp;lt;br/&amp;gt;brevissima ~minuti| CI
    CI --&amp;gt;|firma l&amp;#39;artefatto&amp;lt;br/&amp;gt;con quel cert| SIG[Firma]
    SIG --&amp;gt;|registra firma+cert| R[Rekor&amp;lt;br/&amp;gt;log pubblico&amp;lt;br/&amp;gt;a prova di manomissione]
    R --&amp;gt; V[Chiunque può&amp;lt;br/&amp;gt;verificare dopo]
    style R fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;La pipeline prova la propria identità via &lt;strong&gt;OIDC&lt;/strong&gt; (es. &amp;ldquo;sono la GitHub Action del repo X&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fulcio&lt;/strong&gt;, una CA, emette un certificato a vita &lt;em&gt;brevissima&lt;/em&gt; (minuti) legato a quell&amp;rsquo;identità.&lt;/li&gt;
&lt;li&gt;Si firma l&amp;rsquo;artefatto con quel certificato effimero; la chiave privata sparisce subito dopo.&lt;/li&gt;
&lt;li&gt;La firma e il certificato vengono registrati in &lt;strong&gt;Rekor&lt;/strong&gt;, un log pubblico, append-only, a prova
di manomissione (lo stesso principio del transparency log).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nessuna chiave da custodire: l&amp;rsquo;identità sostituisce la chiave a lungo termine, e il certificato vive
troppo poco per valere la pena di rubarlo.&lt;/p&gt;
&lt;h2 id=&#34;firmare-e-verificare-con-cosign&#34;&gt;Firmare e verificare con cosign
&lt;/h2&gt;&lt;p&gt;In pratica, dalla pipeline:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# firma keyless: l&amp;#39;identità OIDC della CI diventa il firmatario&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign sign --yes registry.io/app@sha256:abc...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# verifica: accetta solo artefatti firmati dall&amp;#39;identità attesa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cosign verify registry.io/app@sha256:abc... &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --certificate-identity &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/org/repo/.github/workflows/release.yml@refs/heads/main&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --certificate-oidc-issuer &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://token.actions.githubusercontent.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La verifica è il punto che conta: non &amp;ldquo;è firmato?&amp;rdquo; ma &amp;ldquo;è firmato &lt;strong&gt;dall&amp;rsquo;identità che mi aspetto&lt;/strong&gt;?&amp;rdquo;.
Un artefatto firmato da un&amp;rsquo;identità sconosciuta va rifiutato esattamente come uno non firmato. cosign
firma e verifica allo stesso modo anche le &lt;strong&gt;SBOM&lt;/strong&gt; e le &lt;strong&gt;attestazioni&lt;/strong&gt; di provenienza SLSA,
allegandole all&amp;rsquo;immagine nel registry.&lt;/p&gt;
&lt;h2 id=&#34;dove-si-applica-nel-ciclo&#34;&gt;Dove si applica nel ciclo
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Al rilascio&lt;/strong&gt;: la pipeline firma l&amp;rsquo;immagine, la SBOM e la provenienza subito dopo la build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;All&amp;rsquo;ingresso&lt;/strong&gt;: l&amp;rsquo;&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/admission-control/&#34; &gt;admission control&lt;/a&gt; del cluster
verifica la firma e rifiuta ciò che non proviene dall&amp;rsquo;identità attesa. È qui che la firma smette di
essere decorativa e diventa un controllo di accesso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;il-limite-la-firma-attesta-lorigine-non-la-bontà&#34;&gt;Il limite: la firma attesta l&amp;rsquo;origine, non la bontà
&lt;/h2&gt;&lt;p&gt;Una firma valida dice &amp;ldquo;questo artefatto viene davvero da chi dice&amp;rdquo; — non &amp;ldquo;questo artefatto è privo di
vulnerabilità&amp;rdquo;. Si può firmare perfettamente un&amp;rsquo;immagine piena di CVE. La firma risolve &lt;em&gt;autenticità e
integrità&lt;/em&gt;, non &lt;em&gt;qualità&lt;/em&gt;: va combinata con SCA, SBOM e policy, non le sostituisce.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se la firma usa l&#39;identità OIDC della pipeline invece di una chiave che custodisco io, non sto solo spostando la fiducia su GitHub/Fulcio/Rekor? Cosa impedisce a chi li compromette di firmare qualunque cosa?&lt;/summary&gt;
&lt;p&gt;Stai spostando la fiducia, sì, ma verso componenti progettati per essere difendibili e — soprattutto —
&lt;em&gt;osservabili&lt;/em&gt;, il che cambia la natura del rischio. Primo: la fiducia nell&#39;identità OIDC non è
peggiore di prima, è migliore. Con una chiave privata a lungo termine il rischio era una stringa che
poteva trapelare da un file di config, un backup, un laptop, e restare valida per mesi senza che nessuno
se ne accorgesse; con la firma keyless non esiste nessun segreto persistente da rubare, e il certificato
vive minuti. Un attaccante dovrebbe compromettere l&#39;identità della pipeline &lt;em&gt;nel momento&lt;/em&gt; della
build — il che è un problema di sicurezza della CI/CD che hai comunque, firma o no. Secondo, ed è il punto
di Rekor: ogni firma finisce in un log pubblico, append-only, a prova di manomissione. Se qualcuno
riuscisse a firmare un artefatto malevolo con la tua identità, quella firma sarebbe &lt;em&gt;pubblicamente
registrata&lt;/em&gt;, con l&#39;identità e l&#39;istante, visibile a te e a chiunque monitori il log — un attacco non
ripudiabile e rilevabile, non un furto silenzioso di chiave che scopri sei mesi dopo. Terzo, la verifica
è vincolata: non accetti &#34;una firma qualsiasi&#34;, accetti solo l&#39;identità esatta (quel repo, quel workflow,
quel branch), quindi compromettere &#34;GitHub in generale&#34; non basta, serve proprio la tua identità precisa.
Resta vero che Fulcio e Rekor sono radici di fiducia: se vengono compromessi a livello di infrastruttura,
il modello vacilla — ma sono gestiti come infrastruttura critica, replicati e monitorati, e puoi anche
operarne istanze tue. Il confronto corretto non è &#34;fiducia zero contro fiducia in Sigstore&#34;, è &#34;una chiave
privata fragile e silenziosa che custodisci male contro un&#39;identità effimera registrata pubblicamente&#34;:
la seconda sposta la fiducia su qualcosa di più piccolo, più breve nel tempo e, decisivo, verificabile a
posteriori da tutti.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Sigstore rende la firma pratica eliminando le chiavi da custodire: identità effimera via Fulcio, log
pubblico via Rekor, firma e verifica di immagini, SBOM e provenienza con cosign. La firma attesta
l&amp;rsquo;origine, non la qualità, e diventa un controllo solo quando qualcuno la &lt;em&gt;verifica&lt;/em&gt; all&amp;rsquo;ingresso. Con
artefatti verificabili in mano, il tema si sposta su dove tutto questo si orchestra e dove un
attaccante punterebbe per primo: la pipeline CI/CD stessa, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Supply chain e SLSA: fidarsi della build</title>
        <link>https://www.matteobianchi.eu/p/supply-chain-slsa/</link>
        <pubDate>Tue, 26 May 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/supply-chain-slsa/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/supply-chain-slsa/cover.png" alt="Featured image of post Supply chain e SLSA: fidarsi della build" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;La &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sbom-trasparenza/&#34; &gt;SBOM&lt;/a&gt; dice &lt;em&gt;cosa&lt;/em&gt; c&amp;rsquo;è in un artefatto. Ma un attaccante
sofisticato non ha bisogno di inserire una dipendenza vulnerabile: gli basta compromettere la
&lt;strong&gt;pipeline&lt;/strong&gt; che costruisce l&amp;rsquo;artefatto, iniettando codice &lt;em&gt;dopo&lt;/em&gt; il sorgente pulito e &lt;em&gt;prima&lt;/em&gt;
dell&amp;rsquo;immagine finale. SolarWinds ha funzionato così: codice benigno nel repository, backdoor inserita
durante la build. &lt;strong&gt;SLSA&lt;/strong&gt; (Supply-chain Levels for Software Artifacts) esiste per rendere la build
stessa verificabile.&lt;/p&gt;
&lt;h2 id=&#34;la-superficie-dattacco-della-supply-chain&#34;&gt;La superficie d&amp;rsquo;attacco della supply chain
&lt;/h2&gt;&lt;p&gt;Ogni anello tra il codice di uno sviluppatore e l&amp;rsquo;artefatto in produzione è un bersaglio:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    DEV[Sviluppatore] --&amp;gt;|1. commit&amp;lt;br/&amp;gt;compromesso| SRC[(Sorgente)]
    SRC --&amp;gt;|2. dipendenza&amp;lt;br/&amp;gt;malevola| BUILD[Sistema di build]
    BUILD --&amp;gt;|3. build&amp;lt;br/&amp;gt;compromessa| ART[Artefatto]
    ART --&amp;gt;|4. artefatto&amp;lt;br/&amp;gt;sostituito| REG[(Registry)]
    REG --&amp;gt;|5. deploy di&amp;lt;br/&amp;gt;un&amp;#39;immagine falsa| PROD[Produzione]
    style BUILD fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;I controlli visti finora proteggono soprattutto l&amp;rsquo;anello 1-2 (il codice e le dipendenze). SLSA si
concentra sull&amp;rsquo;anello &lt;strong&gt;3-4&lt;/strong&gt;: garantire che l&amp;rsquo;artefatto in produzione sia &lt;em&gt;esattamente&lt;/em&gt; quello
prodotto dalla build attesa, a partire dal sorgente atteso, senza manomissioni intermedie.&lt;/p&gt;
&lt;h2 id=&#34;la-provenienza-il-documento-chiave&#34;&gt;La provenienza: il documento chiave
&lt;/h2&gt;&lt;p&gt;Il concetto centrale di SLSA è la &lt;strong&gt;provenance&lt;/strong&gt;: un documento, generato &lt;em&gt;dal sistema di build stesso&lt;/em&gt;
e firmato, che attesta &amp;ldquo;io, questa build, ho prodotto questo artefatto (hash X), da questo sorgente
(commit Y), con questi parametri&amp;rdquo;. Verificare la provenienza prima del deploy significa rifiutare
qualsiasi artefatto che non possa dimostrare la propria origine.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provenance (semplificata):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  artefatto:  sha256:abc...        ← cosa
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sorgente:   git@...#commit def   ← da dove
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  builder:    github-actions@...   ← chi l&amp;#39;ha costruito
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  firmata dal builder → non falsificabile da chi non controlla il builder
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;i-livelli-di-slsa&#34;&gt;I livelli di SLSA
&lt;/h2&gt;&lt;p&gt;SLSA non è tutto-o-niente: è una scala che alza progressivamente le garanzie.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Livello 1 — provenienza presente&lt;/strong&gt;: la build genera la provenienza. Non ancora a prova di
manomissione, ma esiste e dà trasparenza.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livello 2 — provenienza firmata&lt;/strong&gt;: generata da un servizio di build ospitato e &lt;em&gt;firmata&lt;/em&gt;, quindi
verificabile e non banalmente falsificabile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livello 3 — build indurita&lt;/strong&gt;: il sistema di build è isolato, le sorgenti e i parametri sono
verificati, la provenienza è &lt;em&gt;non falsificabile&lt;/em&gt; anche da chi ha accesso al progetto. È il livello
che avrebbe reso molto più difficile un attacco in stile SolarWinds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Le revisioni del framework rinumerano e articolano i livelli, ma la direzione è costante: da &amp;ldquo;la
provenienza esiste&amp;rdquo; a &amp;ldquo;la provenienza è inattaccabile&amp;rdquo;.)&lt;/p&gt;
&lt;h2 id=&#34;cosa-significa-in-pratica&#34;&gt;Cosa significa in pratica
&lt;/h2&gt;&lt;p&gt;Salire di livello è soprattutto &lt;em&gt;disciplina di pipeline&lt;/em&gt;: build effimere e isolate (niente runner
persistenti che accumulano stato), nessuna modifica manuale all&amp;rsquo;artefatto, provenienza generata
automaticamente, deploy che &lt;em&gt;verifica&lt;/em&gt; la provenienza come gate. Molto di questo si appoggia alla
firma crittografica, il tassello del prossimo capitolo.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; ho già SAST, SCA, code review e secret scanning sul mio codice; se il mio sorgente è pulito e controllato, perché dovrei preoccuparmi di SLSA e della build?&lt;/summary&gt;
&lt;p&gt;Perché tutti i controlli che hai elencato verificano il &lt;em&gt;sorgente&lt;/em&gt;, e la lezione di SolarWinds è
esattamente che il sorgente può essere immacolato mentre l&#39;artefatto spedito è compromesso. Tra il commit
che hai revisionato e l&#39;immagine che gira in produzione c&#39;è un intero sistema — il runner della CI, gli
script di build, la cache delle dipendenze, i plugin, le credenziali che pubblicano sul registry — e nulla
di ciò che fai sul sorgente lo protegge. Un attaccante che ottiene l&#39;accesso al sistema di build non ha
bisogno di toccare il tuo repository: inietta la backdoor &lt;em&gt;durante&lt;/em&gt; la compilazione, l&#39;artefatto
finale contiene codice che non comparirà mai in nessuna code review perché non è mai stato nel sorgente, e
la tua SBOM lo elencherà come se fosse legittimo. Lo stesso vale per l&#39;anello successivo: qualcuno che
compromette il registry può sostituire la tua immagine con un&#39;altra, e senza verifica della provenienza il
cluster la deploierà fiducioso. SLSA chiude proprio questo divario, ortogonale ai controlli sul codice: la
provenienza firmata lega l&#39;artefatto al commit esatto e alla build esatta, così al momento del deploy puoi
&lt;em&gt;rifiutare&lt;/em&gt; qualunque cosa non dimostri di essere nata dal tuo sorgente pulito attraverso la tua
build attesa. Non sostituisce SAST o SCA — quelli garantiscono che il sorgente sia buono — ma garantisce
che ciò che spedisci sia davvero quel sorgente e non qualcosa che gli somiglia. Senza, hai verificato
accuratamente l&#39;ingresso di un tubo di cui non controlli l&#39;uscita.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;SLSA sposta la fiducia dal solo sorgente all&amp;rsquo;intera build: la provenienza firmata attesta cosa è stato
costruito, da dove e da chi, e i livelli alzano progressivamente le garanzie fino a renderla
inattaccabile. Ma &amp;ldquo;firmata&amp;rdquo; presuppone un sistema di firma che non richieda a ognuno di gestire chiavi
private — storicamente il motivo per cui quasi nessuno firmava. Sigstore risolve questo, prossimo
capitolo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>SBOM: la distinta base del software</title>
        <link>https://www.matteobianchi.eu/p/sbom-trasparenza/</link>
        <pubDate>Tue, 19 May 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/sbom-trasparenza/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/sbom-trasparenza/cover.png" alt="Featured image of post SBOM: la distinta base del software" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Quando è uscito Log4Shell, la domanda che ha paralizzato migliaia di aziende non era &amp;ldquo;come si
corregge?&amp;rdquo; ma &amp;ldquo;&lt;strong&gt;dove ce l&amp;rsquo;ho?&lt;/strong&gt;&amp;rdquo;. Senza un inventario, rispondere ha richiesto settimane di caccia
manuale. La &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sca-e-dipendenze/&#34; &gt;SCA&lt;/a&gt; trova i CVE nelle dipendenze, ma presuppone
di sapere &lt;em&gt;cosa&lt;/em&gt; gira in produzione. La &lt;strong&gt;SBOM (Software Bill of Materials)&lt;/strong&gt; è quell&amp;rsquo;inventario: la
distinta base di ogni componente di ciò che spedisci.&lt;/p&gt;
&lt;h2 id=&#34;cosè-concretamente&#34;&gt;Cos&amp;rsquo;è, concretamente
&lt;/h2&gt;&lt;p&gt;Una SBOM è un documento strutturato e leggibile da una macchina che elenca, per ogni artefatto:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Per ogni componente:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - nome e VERSIONE esatta        ← la chiave per matchare i CVE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - identificatore univoco (PURL) ← pkg:npm/lodash@4.17.21
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - hash / checksum               ← integrità
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - licenza                       ← anche compliance legale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - relazioni (chi dipende da chi)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Due standard dominano: &lt;strong&gt;SPDX&lt;/strong&gt; (ISO, nato attorno alla compliance delle licenze) e &lt;strong&gt;CycloneDX&lt;/strong&gt;
(OWASP, nato con la sicurezza in mente). Entrambi vanno bene; l&amp;rsquo;importante è generarla in un formato
standard, non in un foglio di calcolo fatto a mano.&lt;/p&gt;
&lt;h2 id=&#34;dove-e-come-generarla&#34;&gt;Dove e come generarla
&lt;/h2&gt;&lt;p&gt;La SBOM si genera &lt;strong&gt;nella pipeline&lt;/strong&gt;, al momento della build, quando si conosce esattamente cosa
finisce nell&amp;rsquo;artefatto. Generarla dopo, a posteriori, significa indovinare.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    SRC[Sorgente + lockfile] --&amp;gt; BUILD[Build nella CI]
    BUILD --&amp;gt; ART[Artefatto&amp;lt;br/&amp;gt;container / binario]
    BUILD --&amp;gt; GEN[Generatore SBOM&amp;lt;br/&amp;gt;es. Syft]
    GEN --&amp;gt; SBOM[SBOM&amp;lt;br/&amp;gt;CycloneDX/SPDX]
    SBOM --&amp;gt;|firmata e allegata&amp;lt;br/&amp;gt;all&amp;#39;artefatto| REG[(Registry)]
    ART --&amp;gt; REG
    style SBOM fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Punto chiave: la SBOM va &lt;strong&gt;allegata all&amp;rsquo;artefatto e firmata&lt;/strong&gt;, così viaggia con esso ed è
verificabile (lo vedremo con &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/firma-artefatti-sigstore/&#34; &gt;Sigstore&lt;/a&gt;). Una SBOM
che vive in una cartella scollegata dall&amp;rsquo;artefatto che descrive perde metà del valore.&lt;/p&gt;
&lt;h2 id=&#34;usarla-davvero&#34;&gt;Usarla davvero
&lt;/h2&gt;&lt;p&gt;Una SBOM archiviata e mai consultata è teatro della conformità. Il valore sta nell&amp;rsquo;uso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Risposta ai CVE&lt;/strong&gt;: esce una vulnerabilità su &lt;code&gt;libxyz 1.4&lt;/code&gt;? Una query sulle SBOM archiviate dice
in minuti &lt;em&gt;quali&lt;/em&gt; servizi la contengono. La caccia di Log4Shell diventa un filtro.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Policy di ingresso&lt;/strong&gt;: l&amp;rsquo;admission control può rifiutare un&amp;rsquo;immagine &lt;em&gt;senza&lt;/em&gt; SBOM o con componenti
vietati (licenze incompatibili, pacchetti in blocklist).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoraggio continuo&lt;/strong&gt;: le SBOM si ri-scansionano contro i database aggiornati, così si scoprono
CVE &lt;em&gt;nuovi&lt;/em&gt; su software già in produzione da mesi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;il-limite-onesto-profondità&#34;&gt;Il limite onesto: profondità
&lt;/h2&gt;&lt;p&gt;Una SBOM è buona quanto il generatore che la produce. Alcuni componenti sfuggono: binari statici,
dipendenze incluse a mano, codice generato. La SBOM non è una verità magica, è una &lt;em&gt;misura&lt;/em&gt; della tua
visibilità — e il primo passo per migliorarla è vedere dove è incompleta.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se la SCA già scansiona le dipendenze e trova i CVE, perché serve anche produrre e archiviare una SBOM? Non è informazione duplicata?&lt;/summary&gt;
&lt;p&gt;Si sovrappongono sull&#39;input — entrambe partono dall&#39;elenco dei componenti — ma rispondono a due domande
diverse in due momenti diversi, e averne una sola lascia scoperto l&#39;altro. La SCA è un&#39;analisi che fai
&lt;em&gt;ora&lt;/em&gt;, nella pipeline, e ti dice &#34;questo artefatto, oggi, contiene questi CVE noti&#34;: è puntuale e
legata al momento della build. La SBOM è un &lt;em&gt;inventario persistente e interrogabile&lt;/em&gt; che
sopravvive alla build e viaggia con l&#39;artefatto in produzione. La differenza si vede nel caso che conta di
più: un CVE che &lt;em&gt;non esisteva&lt;/em&gt; quando hai fatto la build. La SCA di allora non poteva trovarlo,
perché il database non lo conosceva ancora. Sei mesi dopo esce il nuovo Log4Shell: con la sola SCA dovresti
ricostruire o re-scansionare ogni artefatto per sapere chi è colpito, ammesso di sapere ancora
esattamente cosa gira dove. Con le SBOM archiviate e indicizzate, invece, fai una query — &#34;chi contiene
libxyz sotto la 1.5?&#34; — e hai la lista in minuti, senza toccare le build. In più la SBOM serve a cose che
la SCA non copre: la verifica all&#39;ingresso (l&#39;admission control rifiuta ciò che non ha una SBOM o ha
componenti vietati), la conformità delle licenze, e la provenienza. Il modo giusto di vederle: la SCA è
l&#39;&lt;em&gt;azione&lt;/em&gt; di cercare vulnerabilità, la SBOM è il &lt;em&gt;dato&lt;/em&gt; che rende quella ricerca possibile
per sempre, anche sui CVE che non erano ancora stati scoperti. Si alimentano a vicenda.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;La SBOM è la distinta base del software: sai cosa spedisci, quindi sai in minuti se un nuovo CVE ti
riguarda. Si genera nella build, si firma, viaggia con l&amp;rsquo;artefatto e si interroga nel tempo. Ma sapere
&lt;em&gt;cosa&lt;/em&gt; c&amp;rsquo;è dentro un artefatto non basta se non possiamo fidarci di &lt;em&gt;come&lt;/em&gt; è stato costruito. Un
attaccante che compromette la pipeline può iniettare codice senza toccare il sorgente. Difendere la
catena di costruzione è il prossimo tema: SLSA, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>SCA: il codice che non hai scritto</title>
        <link>https://www.matteobianchi.eu/p/sca-e-dipendenze/</link>
        <pubDate>Tue, 21 Apr 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/sca-e-dipendenze/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/sca-e-dipendenze/cover.png" alt="Featured image of post SCA: il codice che non hai scritto" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Il &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sast-analisi-statica/&#34; &gt;SAST&lt;/a&gt; analizza il codice che scriviamo. Ma in
un&amp;rsquo;applicazione moderna quel codice è una frazione del totale: il resto sono &lt;strong&gt;dipendenze&lt;/strong&gt; — librerie
open source, transitivamente centinaia di pacchetti che non abbiamo mai letto. La &lt;strong&gt;SCA (Software
Composition Analysis)&lt;/strong&gt; si occupa di questo codice: trova le vulnerabilità &lt;em&gt;note&lt;/em&gt; (CVE) nelle librerie
che importiamo. Log4Shell ci ha insegnato quanto possa pesare una sola riga in un &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;lalbero-delle-dipendenze-transitive&#34;&gt;L&amp;rsquo;albero delle dipendenze transitive
&lt;/h2&gt;&lt;p&gt;Il punto chiave: non si importano le librerie dichiarate, si importa il loro intero albero.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    APP[La tua app] --&amp;gt; A[libreria-web]
    APP --&amp;gt; B[client-http]
    A --&amp;gt; C[parser-json v1.2]
    B --&amp;gt; C
    B --&amp;gt; D[logging-lib v2.0&amp;lt;br/&amp;gt;CVE-2024-XXXX]
    style D fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Hai dichiarato &lt;code&gt;client-http&lt;/code&gt;, ma ti ritrovi &lt;code&gt;logging-lib v2.0&lt;/code&gt; vulnerabile &lt;em&gt;senza averla mai scritta&lt;/em&gt;
nel tuo manifest. La SCA risolve l&amp;rsquo;intero albero e confronta ogni nodo con i database di
vulnerabilità. La maggior parte dei CVE che ti colpiscono vive nelle dipendenze &lt;strong&gt;transitive&lt;/strong&gt;, quelle
che non hai scelto consapevolmente.&lt;/p&gt;
&lt;h2 id=&#34;non-tutti-i-cve-ti-riguardano&#34;&gt;Non tutti i CVE ti riguardano
&lt;/h2&gt;&lt;p&gt;Il tranello della SCA è il diluvio di avvisi. Un CVE in una libreria &lt;em&gt;non significa&lt;/em&gt; che la tua app
sia vulnerabile. Due domande filtrano il rumore:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Per ogni CVE segnalato:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Uso davvero la funzione vulnerabile?   (reachability)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2. Il percorso è esposto a input ostile?  (exploitability nel mio contesto)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Se entrambe NO → rischio basso, patch pianificata, non emergenza.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Gli strumenti più avanzati fanno &lt;strong&gt;reachability analysis&lt;/strong&gt;: controllano se il tuo codice chiama
davvero la funzione vulnerabile. Un CVE in un metodo che non invochi mai è rumore a bassa priorità;
uno nel percorso di autenticazione esposto a internet è un&amp;rsquo;emergenza. Prioritizzare per contesto, non
per numero di avvisi, è ciò che tiene il team sano — lo vedremo meglio nel capitolo sul
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/vulnerability-management-triage/&#34; &gt;vulnerability management&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;aggiornare-senza-rompere&#34;&gt;Aggiornare senza rompere
&lt;/h2&gt;&lt;p&gt;La SCA non serve a nulla se poi non si aggiorna. Le pratiche che funzionano:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bot di aggiornamento&lt;/strong&gt; (Dependabot, Renovate) che aprono pull request automatiche per le nuove
versioni, testate dalla CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lockfile&lt;/strong&gt; committati: la build è riproducibile, si sa esattamente quale versione gira.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aggiornamenti piccoli e frequenti&lt;/strong&gt; invece del salto di tre major ogni due anni, che nessuno osa
fare perché romperebbe tutto.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;nel-flusso-di-lavoro&#34;&gt;Nel flusso di lavoro
&lt;/h2&gt;&lt;p&gt;La SCA sta nella CI (su ogni pull request, analizzando il manifest e il lockfile) e come scansione
periodica del codice già in produzione: un CVE nuovo può emergere su una dipendenza che non tocchi da
mesi. Questo richiede di sapere &lt;em&gt;cosa&lt;/em&gt; gira davvero in produzione — l&amp;rsquo;inventario degli artefatti, che
è il tema della SBOM, tra pochi capitoli.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se continuo ad aggiornare le dipendenze a ogni CVE, non introduco instabilità e rischio di supply chain (una versione nuova compromessa) peggiore del CVE stesso?&lt;/summary&gt;
&lt;p&gt;È una tensione reale e va gestita, non ignorata in nessuna delle due direzioni. Aggiornare alla cieca
a ogni avviso è sbagliato quanto non aggiornare mai: una nuova versione può introdurre regressioni, o —
caso raro ma grave — essere una release compromessa, come negli attacchi di supply chain dove l&#39;account
di un maintainer viene violato. La risposta non è scegliere tra &#34;sempre&#34; e &#34;mai&#34;, è &lt;em&gt;prioritizzare e
verificare&lt;/em&gt;. Prioritizzare: non tutti i CVE sono emergenze, la reachability analysis e il contesto
dicono quali patchare subito e quali possono attendere una finestra pianificata, così non sei in
aggiornamento perpetuo. Verificare: l&#39;aggiornamento passa dalla CI con i tuoi test, non va dritto in
produzione; aggiorni a versioni che hanno qualche giorno di vita, non all&#39;ora zero; usi il lockfile con
gli hash così sai che stai scaricando esattamente l&#39;artefatto atteso; e, per i rischi di supply chain
veri, ti appoggi alla verifica della provenienza e delle firme (SLSA, Sigstore — i prossimi capitoli)
invece di fidarti del solo numero di versione. Il rischio di una dipendenza vulnerabile nota, con exploit
pubblico, è quasi sempre più alto e più certo del rischio ipotetico di una release compromessa che i
controlli di provenienza intercettano. Aggiornare in modo disciplinato riduce entrambi; non aggiornare
ne elimina uno solo e ti lascia l&#39;altro, che è anche il più sfruttato.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;La SCA illumina il codice che non hai scritto: risolve l&amp;rsquo;albero transitivo, trova i CVE noti e — se
fatta bene — li prioritizza per reachability invece che per conteggio. Insieme al SAST copre il
codice, nostro e altrui, in modo statico. Ma entrambi guardano il codice &lt;em&gt;fermo&lt;/em&gt;. Alcuni difetti si
vedono solo quando l&amp;rsquo;applicazione gira e risponde a richieste reali: è il turno dell&amp;rsquo;analisi dinamica,
prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
