<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SLSA on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/slsa/</link>
        <description>Recent content in SLSA on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 26 May 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/slsa/index.xml" rel="self" type="application/rss+xml" /><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>
        
    </channel>
</rss>
