<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Dependencies on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/dependencies/</link>
        <description>Recent content in Dependencies on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 11 Aug 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/dependencies/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Patch e dipendenze: il debito che matura</title>
        <link>https://www.matteobianchi.eu/p/dependency-patch-management/</link>
        <pubDate>Tue, 11 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/dependency-patch-management/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/dependency-patch-management/cover.png" alt="Featured image of post Patch e dipendenze: il debito che matura" /&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/sca-e-dipendenze/&#34; &gt;SCA&lt;/a&gt; e la &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sbom-trasparenza/&#34; &gt;SBOM&lt;/a&gt;
dicono &lt;em&gt;cosa&lt;/em&gt; è vulnerabile. Ma trovare non è correggere, e qui comincia il lavoro vero della fase
&lt;em&gt;operate&lt;/em&gt;: un flusso infinito di CVE su software già in produzione. Le dipendenze non aggiornate sono,
anno dopo anno, tra i vettori d&amp;rsquo;ingresso più sfruttati in assoluto — non per sofisticazione, ma per
pigrizia collettiva. Il problema non è tecnico, è di &lt;em&gt;sostenibilità del flusso&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;il-debito-che-matura-da-solo&#34;&gt;Il debito che matura da solo
&lt;/h2&gt;&lt;p&gt;Un codice fermo non è un codice sicuro: le vulnerabilità arrivano &lt;em&gt;a lui&lt;/em&gt;, non da lui.&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;lnt&#34;&gt;3
&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;/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;Giorno del rilascio:   0 CVE noti nelle dipendenze
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3 mesi dopo:           3 CVE scoperti (tu non hai toccato nulla)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;12 mesi dopo:          decine di CVE, e il salto di versione è ormai enorme
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ &amp;#34;non aggiorniamo per non rompere&amp;#34; → il costo di aggiornare cresce ogni mese
&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;Il paradosso: più rimandi, più l&amp;rsquo;aggiornamento diventa rischioso (tre major in un colpo), e più
rimandi ancora. Si esce solo con aggiornamenti &lt;strong&gt;piccoli e frequenti&lt;/strong&gt;, resi indolori
dall&amp;rsquo;automazione.&lt;/p&gt;
&lt;h2 id=&#34;automatizzare-il-flusso&#34;&gt;Automatizzare il flusso
&lt;/h2&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    SRC[(Nuova versione&amp;lt;br/&amp;gt;o CVE)] --&amp;gt; BOT[Bot: Renovate /&amp;lt;br/&amp;gt;Dependabot]
    BOT --&amp;gt;|apre PR| CI[CI: build + test&amp;lt;br/&amp;gt;+ SCA]
    CI --&amp;gt;|verde| MERGE[Merge&amp;lt;br/&amp;gt;auto o rapido]
    CI --&amp;gt;|rosso| HUMAN[Revisione umana]
    style BOT fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Un bot apre pull request di aggiornamento; la CI le testa; quelle a basso rischio (patch, minor con
test verdi) si possono auto-mergiare, le altre vanno a revisione. Il team non insegue più i CVE a
mano: gestisce un flusso di PR già testate. Questo trasforma il patching da progetto periodico
doloroso a routine continua invisibile.&lt;/p&gt;
&lt;h2 id=&#34;non-tutto-è-urgente-prioritizzare&#34;&gt;Non tutto è urgente: prioritizzare
&lt;/h2&gt;&lt;p&gt;Patchare &lt;em&gt;tutto subito&lt;/em&gt; è impossibile e inutile. Si prioritizza per rischio reale, non per numero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sfruttamento attivo&lt;/strong&gt;: un CVE nel catalogo &lt;strong&gt;CISA KEV&lt;/strong&gt; (vulnerabilità sfruttate in natura) va
prima di cento CVE teorici. Chi vi attacca usa quelli.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Esposizione&lt;/strong&gt;: internet-facing e dati sensibili prima dei servizi interni.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Raggiungibilità&lt;/strong&gt;: il CVE in codice che esegui davvero, non in una funzione mai chiamata — il
tema del &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/vulnerability-management-triage/&#34; &gt;vulnerability management&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;le-immagini-base-un-flusso-dedicato&#34;&gt;Le immagini base: un flusso dedicato
&lt;/h2&gt;&lt;p&gt;Le immagini container hanno una dinamica propria: anche se la tua app non cambia, la base accumula CVE
nei pacchetti OS. La pratica è &lt;strong&gt;ricostruire periodicamente&lt;/strong&gt; le immagini dalla base aggiornata (una
pipeline schedulata che ricompila e ridistribuisce), non solo quando cambia il codice. Un&amp;rsquo;immagine
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/container-image-security/&#34; &gt;minimale&lt;/a&gt; riduce drasticamente questo flusso, perché
ha meno pacchetti da patchare.&lt;/p&gt;
&lt;h2 id=&#34;patch-virtuale-guadagnare-tempo&#34;&gt;Patch virtuale: guadagnare tempo
&lt;/h2&gt;&lt;p&gt;Quando non si può patchare subito (nessuna fix disponibile, finestra di manutenzione lontana, sistema
legacy), la &lt;strong&gt;patch virtuale&lt;/strong&gt; compra tempo: un WAF o le regole di &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/runtime-security-falco/&#34; &gt;runtime
security&lt;/a&gt; bloccano lo &lt;em&gt;sfruttamento&lt;/em&gt; del CVE mentre la
correzione vera viene pianificata. È una mitigazione, non una cura: riduce il rischio nell&amp;rsquo;immediato,
non elimina la vulnerabilità.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; l&#39;auto-merge degli aggiornamenti non è pericoloso? Un bot che fonde dipendenze da solo è esattamente il vettore di un attacco di supply chain.&lt;/summary&gt;
&lt;p&gt;È una preoccupazione legittima, e la risposta non è &#34;mai auto-merge&#34; né &#34;auto-merge di tutto&#34;, ma
calibrare l&#39;automazione sul rischio e circondarla di controlli — perché l&#39;alternativa, il patching
manuale, ha un tasso di fallimento molto più alto e più silenzioso. Partiamo dal rischio che sollevi: una
release compromessa (account del maintainer violato, pacchetto typosquatting) fusa automaticamente in
produzione. Si mitiga così. Primo, l&#39;auto-merge non va mai dritto in produzione: fonde in un branch che
passa dalla &lt;em&gt;tua&lt;/em&gt; CI completa — build, test, SCA, policy — e poi dalla tua pipeline di deploy con
i suoi gate; non è &#34;il bot spinge in prod&#34;, è &#34;il bot propone, i tuoi controlli decidono&#34;. Secondo, si
auto-mergia solo la classe a basso rischio: patch e minor con changelog pulito e test verdi, non i major,
non le dipendenze critiche di sicurezza, che vanno a revisione umana. Terzo, si impone una
&lt;em&gt;quarantena temporale&lt;/em&gt;: Renovate può aspettare che una versione abbia N giorni di vita prima di
proporla (&lt;code&gt;minimumReleaseAge&lt;/code&gt;), così le release malevole, che di solito vengono scoperte e
ritirate in fretta, non ti raggiungono all&#39;ora zero. Quarto, i lockfile con hash garantiscono che stai
scaricando esattamente l&#39;artefatto atteso, e la verifica di provenienza (SLSA/Sigstore) aggiunge un
controllo sull&#39;origine. Ora il rovescio: non automatizzare significa che gli aggiornamenti si accumulano
perché &#34;non c&#39;è tempo&#34;, il debito matura, e finisci per girare mesi con CVE &lt;em&gt;noti e con exploit
pubblici&lt;/em&gt; — un rischio molto più certo e sfruttato di una release compromessa che la quarantena
intercetta. Il patching manuale fallisce per omissione, in silenzio, ed è il vettore numero uno delle
violazioni reali. L&#39;automazione ben calibrata riduce quel rischio enorme e certo, al prezzo di un rischio
piccolo e gestibile con quarantena, test e provenienza. La domanda giusta non è &#34;mi fido del bot?&#34; ma
&#34;mi fido dei miei controlli automatici più di quanto mi fidi del fatto che qualcuno aggiorni a mano in
tempo?&#34; — e quasi sempre la risposta onesta è sì.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Le dipendenze non aggiornate sono il vettore più sfruttato perché il debito matura da solo: si gestisce
con aggiornamenti piccoli e frequenti automatizzati dai bot, immagini base ricostruite di continuo,
prioritizzazione per sfruttamento reale (KEV) e patch virtuale per guadagnare tempo. Ma decidere &lt;em&gt;cosa&lt;/em&gt;
patchare prima richiede un modo per confrontare migliaia di CVE: metriche, contesto, triage. È il
vulnerability management, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
