<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Vulnerability Management on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/vulnerability-management/</link>
        <description>Recent content in Vulnerability Management on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 25 Aug 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/vulnerability-management/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Vulnerability management: dal CVSS al rischio reale</title>
        <link>https://www.matteobianchi.eu/p/vulnerability-management-triage/</link>
        <pubDate>Tue, 25 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/vulnerability-management-triage/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/vulnerability-management-triage/cover.png" alt="Featured image of post Vulnerability management: dal CVSS al rischio reale" /&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/security-gates/&#34; &gt;security gate&lt;/a&gt; deve decidere cosa è &amp;ldquo;rischio alto&amp;rdquo;, e il
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/dependency-patch-management/&#34; &gt;patch management&lt;/a&gt; deve decidere cosa patchare
prima. Entrambi si scontrano con lo stesso muro: diecimila CVE aperti, un team con tempo finito.
Patchare tutto è impossibile; patchare a caso è pericoloso. Il &lt;strong&gt;vulnerability management&lt;/strong&gt; è la
disciplina di mettere in ordine ciò che conta — e comincia dal capire perché il punteggio che tutti
usano, da solo, inganna.&lt;/p&gt;
&lt;h2 id=&#34;perché-il-solo-cvss-inganna&#34;&gt;Perché il solo CVSS inganna
&lt;/h2&gt;&lt;p&gt;Il &lt;strong&gt;CVSS&lt;/strong&gt; misura la &lt;em&gt;gravità tecnica&lt;/em&gt; di una vulnerabilità: quanto sarebbe grave &lt;em&gt;se&lt;/em&gt; sfruttata.
Utile, ma risponde alla domanda sbagliata se usato da solo. Un CVE con CVSS 9.8 su una libreria che
non è mai esposta a input ostile, e che nessuno sta sfruttando nel mondo, è meno urgente di un CVSS
7.5 con exploit pubblico e attivo sul tuo servizio internet-facing. Ordinare la coda per solo CVSS
significa lavorare sui numeri grandi, non sui rischi reali.&lt;/p&gt;
&lt;h2 id=&#34;epss-la-probabilità-di-sfruttamento&#34;&gt;EPSS: la probabilità di sfruttamento
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;&lt;strong&gt;EPSS (Exploit Prediction Scoring System)&lt;/strong&gt; aggiunge la dimensione mancante: la &lt;em&gt;probabilità&lt;/em&gt; che
un CVE venga sfruttato nei prossimi 30 giorni, stimata da un modello su segnali reali (exploit
pubblicati, attività osservata). È un numero tra 0 e 1:&lt;/p&gt;
&lt;p&gt;$$ \text{EPSS}(cve) = P(\text{sfruttamento entro 30 giorni}) \in [0, 1] $$&lt;/p&gt;
&lt;p&gt;Il valore pratico di EPSS è che la stragrande maggioranza dei CVE ha probabilità bassissima di essere
sfruttata: filtrare per EPSS alto riduce una coda di migliaia a una manciata di voci che meritano
attenzione &lt;em&gt;ora&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;comporre-il-rischio&#34;&gt;Comporre il rischio
&lt;/h2&gt;&lt;p&gt;Nessun punteggio singolo basta. Il rischio operativo nasce dalla composizione di gravità,
probabilità ed esposizione nel &lt;em&gt;tuo&lt;/em&gt; contesto:&lt;/p&gt;
&lt;p&gt;$$ \text{Rischio} \approx \underbrace{\text{CVSS}}&lt;em&gt;{\text{se sfruttato}} \times \underbrace{\text{EPSS}}&lt;/em&gt;{\text{quanto è probabile}} \times \underbrace{E}_{\text{esposizione}} $$&lt;/p&gt;
&lt;p&gt;dove $E$ cattura il contesto che solo tu conosci: il servizio è esposto a internet? tratta dati
sensibili? la funzione vulnerabile è davvero &lt;em&gt;raggiungibile&lt;/em&gt; dal tuo codice? Una formula del genere
non è una verità esatta, è un modo per &lt;strong&gt;ordinare&lt;/strong&gt; la coda in modo difendibile invece che per numero
grezzo.&lt;/p&gt;
&lt;h2 id=&#34;il-segnale-che-batte-tutto-kev&#34;&gt;Il segnale che batte tutto: KEV
&lt;/h2&gt;&lt;p&gt;C&amp;rsquo;è una scorciatoia che precede ogni calcolo. Se un CVE è nel catalogo &lt;strong&gt;CISA KEV&lt;/strong&gt; (Known Exploited
Vulnerabilities), significa che è sfruttato &lt;em&gt;attivamente, ora, nel mondo reale&lt;/em&gt;. Questi vanno
patchati per primi, sempre, indipendentemente dal CVSS:&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;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;Ordine di priorità pratico:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Nel catalogo KEV (sfruttato ORA)           → emergenza, patch immediata
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2. EPSS alto + esposto + raggiungibile        → questa settimana
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  3. CVSS alto ma EPSS basso / non raggiungibile → finestra pianificata
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  4. Non raggiungibile, non esposto              → debito, quando capita
&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;il-ciclo-non-levento&#34;&gt;Il ciclo, non l&amp;rsquo;evento
&lt;/h2&gt;&lt;p&gt;Il vulnerability management non è una scansione una tantum ma un &lt;strong&gt;ciclo&lt;/strong&gt;: scoprire (da
&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sca-e-dipendenze/&#34; &gt;SCA&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/sbom-trasparenza/&#34; &gt;SBOM&lt;/a&gt;, scanner
runtime), prioritizzare (CVSS × EPSS × contesto, con KEV in cima), rimediare (patch o mitigazione) e
verificare che la correzione sia davvero in produzione. E ricominciare, perché ogni giorno arrivano
CVE nuovi su software che non hai toccato. L&amp;rsquo;obiettivo non è &amp;ldquo;zero vulnerabilità&amp;rdquo; — irraggiungibile —
ma tenere il rischio &lt;em&gt;noto e sotto una soglia accettabile&lt;/em&gt;, con le decisioni tracciate.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se prioritizzo con EPSS e raggiungibilità, non rischio di rimandare per sempre un CVSS 9.8 &#34;non raggiungibile&#34; che poi diventa sfruttabile dopo un mio cambio di codice?&lt;/summary&gt;
&lt;p&gt;È il rischio corretto da temere, e la risposta non è abbandonare la prioritizzazione — che è l&#39;unica
alternativa al collasso sotto diecimila CVE — ma renderla &lt;em&gt;dinamica&lt;/em&gt; e non un giudizio dato una
volta per sempre. Primo, &#34;non raggiungibile&#34; e &#34;EPSS basso&#34; non significano &#34;ignorato&#34;: significano
&#34;declassato a debito tracciato con una finestra pianificata&#34;. Il CVE resta nell&#39;inventario, resta
visibile, e viene comunque affrontato — solo dopo ciò che è sfruttato attivamente. La differenza tra
&#34;debito pianificato&#34; e &#34;dimenticato&#34; è che il primo è in una lista che qualcuno rivede. Secondo, e qui
sta il punto che sollevi: la prioritizzazione va &lt;em&gt;rivalutata di continuo&lt;/em&gt;, perché i suoi input
cambiano. L&#39;EPSS si aggiorna ogni giorno: un CVE con probabilità bassissima oggi può schizzare quando
viene pubblicato un exploit, e un buon sistema di vulnerability management ri-valuta l&#39;intera coda sui
punteggi aggiornati, così quel 9.8 &#34;dormiente&#34; risale automaticamente in cima nel momento in cui diventa
pericoloso — tipicamente prima che tu venga colpito, perché l&#39;EPSS reagisce alla comparsa dell&#39;exploit,
non all&#39;attacco. La comparsa nel catalogo KEV fa lo stesso in modo ancora più netto. Terzo, la
raggiungibilità è una proprietà del tuo codice &lt;em&gt;attuale&lt;/em&gt;, e hai ragione che un cambio può renderla
vera: per questo la raggiungibilità si ricalcola a ogni build nella SCA, non si congela. Se una pull
request inizia a chiamare la funzione prima irraggiungibile, lo stesso CVE cambia classe e il gate lo
intercetta su quella PR. Quindi il meccanismo che temi — &#34;lo rimando e mi dimentico&#34; — è esattamente ciò
che un vulnerability management fatto a ciclo impedisce: niente è giudicato una volta sola, ogni CVE è
ri-pesato quando cambiano l&#39;EPSS, il KEV o il tuo codice. La prioritizzazione non è &#34;scegliere cosa
ignorare per sempre&#34;, è &#34;scegliere l&#39;ordine, e rivedere l&#39;ordine quando il mondo cambia&#34;. L&#39;unica vera
alternativa — trattare tutti i diecimila CVE come ugualmente urgenti — garantisce che il team si bruci
sui 9.8 teorici mentre il 7.5 con exploit attivo aspetta il suo turno in fondo a una lista ordinata per
numero. Quello sì che è dimenticare ciò che conta.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Il vulnerability management mette ordine nel caos dei CVE: il CVSS misura la gravità ma inganna da
solo, l&amp;rsquo;EPSS aggiunge la probabilità di sfruttamento, il contesto aggiunge l&amp;rsquo;esposizione, e il
catalogo KEV batte ogni calcolo. È un ciclo che ri-pesa tutto quando cambia il mondo, non un giudizio
una tantum. Questo dipende dal &lt;em&gt;sapere&lt;/em&gt; cosa succede — le fonti di segnale. Portare i log e la
detection dentro la pipeline e il runtime è il prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
