Indice dei contenuti
- Cos’è il database OSV
- Caratteristiche principali del database OSV
- A cosa serve concretamente OSV
- Come funziona il database OSV
- Esempi di utilizzo di OSV
La gestione delle vulnerabilità è un’attività cruciale per proteggere sistemi e applicazioni. Questo articolo è dedicato al database OSV (Open Source Vulnerabilities), uno strumento open source pensato per mappare e monitorare in modo efficiente le vulnerabilità nei progetti software.
Vedremo cos’è, come funziona, a cosa serve concretamente, le sue caratteristiche principali e alcuni esempi pratici del suo utilizzo.
Cos’è il database OSV
Il database OSV è un progetto open source lanciato da Google con l’obiettivo di fornire una fonte unificata e standardizzata di informazioni sulle vulnerabilità nei pacchetti software open source.
OSV, acronimo di Open Source Vulnerabilities, si propone di semplificare l’accesso e la comprensione delle vulnerabilità che affliggono librerie e componenti utilizzati comunemente nello sviluppo software.
A differenza di altri database, OSV è pensato specificamente per gli sviluppatori: fornisce dati strutturati, aggiornati e facilmente interrogabili. Il progetto si basa su un formato standard chiamato OSV schema, che rende possibile integrare le informazioni in altri strumenti di sicurezza e workflow di sviluppo.
Caratteristiche principali del database OSV
Le caratteristiche principali del database OSV lo rendono uno strumento unico e particolarmente utile nel panorama della cyber security, soprattutto per chi lavora quotidianamente con software open source.
Non si tratta di un semplice archivio di vulnerabilità, ma di un sistema progettato per semplificare l’accesso, la comprensione e l’integrazione dei dati di sicurezza all’interno del ciclo di sviluppo software. Vediamo nel dettaglio cosa rende OSV così efficace.
Una delle funzioni più apprezzate è l’integrazione automatica con le principali piattaforme di versionamento del codice, come GitHub, GitLab e altri repository pubblici.
Questo significa che OSV può intercettare direttamente dagli ambienti di sviluppo gli aggiornamenti, le patch o le modifiche che risolvono vulnerabilità, rendendo il processo di monitoraggio molto più fluido e tempestivo. L’automatismo di questa integrazione aiuta le aziende e gli sviluppatori a restare aggiornati senza dover monitorare manualmente centinaia di fonti diverse.
Un’altra caratteristica fondamentale è l’utilizzo di un formato dati aperto e standardizzato. OSV si basa su uno schema JSON ben documentato, noto come OSV schema, che facilita l’automazione e l’interoperabilità con altri strumenti e framework di sicurezza.
Questo aspetto è particolarmente rilevante per chi sviluppa software in ambienti DevSecOps, dove ogni fase del processo – dallo sviluppo alla distribuzione – deve essere automatizzabile e integrabile con strumenti esterni.
Il supporto multi-ecosistema è un ulteriore punto di forza: il database OSV non si limita a un solo linguaggio o ambiente, ma include vulnerabilità provenienti da Python (PyPI), JavaScript (npm),
Go, Rust, Debian, Linux Kernel e altri. In pratica, OSV è in grado di coprire la maggior parte dei pacchetti utilizzati nello sviluppo moderno, offrendo una panoramica ampia e dettagliata delle minacce che potrebbero colpire applicazioni sviluppate in ambienti diversi.
A questo si aggiunge la disponibilità di un’API pubblica, che consente agli utenti di interrogare il database in tempo reale. Questa API può essere utilizzata in diversi contesti, come script personalizzati, scanner di vulnerabilità, sistemi CI/CD o dashboard di monitoraggio.
L’accesso in tempo reale ai dati consente di ricevere informazioni sempre aggiornate, evitando che una vulnerabilità appena scoperta passi inosservata per ore o giorni.
Infine, uno degli elementi che distingue davvero OSV da altri database è il suo approccio developer-first. I dati non sono solo elenchi tecnici di CVE o exploit: sono organizzati in modo da mostrare in modo chiaro quali versioni di un pacchetto sono affette, quali sono sicure e come correggere il problema.
Questo approccio è pensato per facilitare le decisioni degli sviluppatori, permettendo loro di intervenire rapidamente senza dover interpretare informazioni complesse o ambigue.
In sintesi, il database OSV è uno strumento flessibile, moderno e orientato agli sviluppatori, capace di integrarsi perfettamente nei processi di sviluppo e contribuire in modo concreto a migliorare la sicurezza del software open source.
A cosa serve concretamente OSV
Dal punto di vista operativo, il database OSV è uno strumento estremamente efficace per identificare in modo tempestivo la presenza di vulnerabilità all’interno delle dipendenze di un progetto software.
Questo è un aspetto fondamentale nel contesto moderno dello sviluppo, dove l’utilizzo di componenti open source è diventato la norma piuttosto che l’eccezione.
Uno degli scenari più critici riguarda il rischio di importare una vulnerabilità nota semplicemente installando una libreria aggiornata da un repository pubblico.
In un ambiente dove le dipendenze si aggiornano frequentemente – come avviene con npm, PyPI o Go Modules – tenere sotto controllo le versioni vulnerabili può essere una sfida enorme. Il database OSV nasce proprio per automatizzare questo compito.
In un contesto DevSecOps, dove la sicurezza è integrata nel flusso continuo di sviluppo e distribuzione (CI/CD), OSV consente di:
- Verificare manualmente o automaticamente se una libreria o una sua versione specifica è affetta da vulnerabilità note.
- Integrare controlli di sicurezza automatizzati nei pipeline di build, evitando che codice vulnerabile arrivi in produzione.
- Ricevere aggiornamenti in tempo reale grazie all’uso dell’API pubblica, mantenendo sempre aggiornate le informazioni sulla sicurezza del proprio stack software.
Esempio pratico: verifica manuale tramite API
OSV fornisce un’API semplice e potente. Supponiamo che uno sviluppatore voglia verificare se sta utilizzando una versione vulnerabile della libreria flask in Python.
Ecco un esempio di richiesta HTTP POST per controllare la versione 2.0.1:
curl -X POST https://api.osv.dev/v1/query \
-H "Content-Type: application/json" \
-d '{
"package": {
"name": "flask",
"ecosystem": "PyPI"
},
"version": "2.0.1"
}'
Se la versione indicata è coinvolta in vulnerabilità note, la risposta conterrà dettagli come:
- OSV-ID (es. PYSEC-2021-…)
- Descrizione del problema
- Versioni affette
- Versioni in cui il bug è stato corretto
- Collegamenti a commit o CVE
Integrazione automatica: sicurezza nelle pipeline CI/CD
In un contesto DevOps, OSV può essere utilizzato insieme a strumenti di gestione delle dipendenze come:
- osv-scanner: un tool open source ufficiale per effettuare la scansione di file package-lock.json, requirements.txt, go.mod ecc.
- Scanner di sicurezza come Trivy, Snyk o Dependency-Track, molti dei quali integrano i dati OSV.
Ad esempio, usando osv-scanner:
osv-scanner --lockfile=requirements.txt
Questo comando consente di esaminare rapidamente un file requirements.txt (Python) e di ricevere un report con le librerie vulnerabili, specificando anche le versioni sicure disponibili.
Notifiche e aggiornamenti continui
Per progetti particolarmente critici, è possibile automatizzare il controllo periodico delle vulnerabilità, eseguendo script che interrogano l’API OSV ogni notte e inviano notifiche via email o in un canale Slack in caso di nuove minacce rilevate.
Grazie a questi strumenti e funzionalità, il database OSV diventa un pilastro fondamentale per la sicurezza dei progetti software, consentendo alle aziende e ai team di sviluppo di anticipare i rischi e mantenere una postura di sicurezza attiva e aggiornata.
In un’epoca in cui il codice open source è onnipresente, monitorare le vulnerabilità non è più un’opzione, ma una necessità.

Come funziona il database OSV
Il funzionamento del database OSV si basa su una combinazione intelligente di automazione e contributo umano, progettata per garantire un flusso continuo, affidabile e aggiornato di informazioni sulle vulnerabilità nei pacchetti open source.
Alla base del sistema vi sono due meccanismi fondamentali:
- Segnalazioni manuali da parte dei maintainer
Gli sviluppatori e i manutentori ufficiali di un progetto open source possono segnalare direttamente una vulnerabilità tramite issue o pull request nel repository GitHub di OSV. Questo permette di raccogliere dettagli tecnici precisi, descrizioni contestualizzate e collegamenti diretti al codice affetto. - Analisi automatizzate dei repository pubblici
OSV è integrato con una serie di strumenti e pipeline automatizzate che monitorano costantemente le modifiche nei repository, alla ricerca di patch, commit sospetti, CVE registrati e advisory ufficiali. Questo sistema di monitoraggio consente di intercettare in tempo reale l’introduzione di fix di sicurezza anche quando non è stato ancora pubblicato un avviso formale.
Struttura di un record OSV
Ogni vulnerabilità individuata viene formalizzata in un record JSON conforme allo OSV schema, un formato strutturato e leggibile sia dagli esseri umani che dalle macchine. Ecco un esempio semplificato:
{
"id": "PYSEC-2022-123",
"modified": "2022-11-03T00:00:00Z",
"published": "2022-10-31T00:00:00Z",
"package": {
"name": "flask",
"ecosystem": "PyPI"
},
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{ "introduced": "0" },
{ "fixed": "2.0.2" }
]
}
],
"versions": ["2.0.0", "2.0.1"]
}
],
"summary": "Improper input validation in Flask session handling",
"details": "Flask versions 2.0.0 and 2.0.1 are affected by a vulnerability in session cookie parsing that may allow session hijacking.",
"references": [
{ "type": "ADVISORY", "url": "https://example.com/security/flask-advisory" },
{ "type": "FIX", "url": "https://github.com/pallets/flask/commit/abc123" },
{ "type": "CVE", "url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0001" }
]
}
Integrazione con altri strumenti
Grazie al formato standardizzato, i dati raccolti da OSV possono essere utilizzati direttamente da software di sicurezza, tra cui:
- Scanner di vulnerabilità (es. osv-scanner, Trivy, Grype)
- Sistemi CI/CD (tramite API o plugin dedicati)
- Gestori di dipendenze che controllano automaticamente la sicurezza dei pacchetti
Esempio
Integrando OSV in una pipeline GitHub Actions, è possibile eseguire una scansione automatica dei pacchetti ogni volta che viene effettuato un commit:
jobs:
security-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run OSV Scanner
run: |
curl -L https://github.com/google/osv-scanner/releases/latest/download/osv-scanner-linux-amd64 -o osv-scanner
chmod +x osv-scanner
./osv-scanner --lockfile=requirements.txt
Questo tipo di integrazione permette ai team di bloccare automaticamente le build che contengono librerie vulnerabili, o almeno di segnalarle immediatamente, prima che entrino in produzione.
Il database OSV si distingue per la capacità di unire efficienza automatica e competenza umana, offrendo un flusso costante di dati precisi, strutturati e facilmente integrabili.
Il suo funzionamento modulare e aperto lo rende ideale per tutti gli attori coinvolti nella cyber security, dagli sviluppatori singoli fino ai SOC aziendali, contribuendo a ridurre drasticamente il rischio associato all’uso di software open source.
Esempi di utilizzo di OSV
L’adozione del database OSV nella pratica quotidiana di sviluppo rappresenta un passo avanti decisivo nella prevenzione delle vulnerabilità legate alle dipendenze open source.
Grazie alla sua API pubblica, ai tool CLI dedicati e all’integrazione con gli ecosistemi di sviluppo più diffusi, OSV può essere utilizzato sia manualmente che in modo completamente automatizzato.
Caso 1: Analisi delle dipendenze in un progetto Node.js
Supponiamo che un team stia lavorando a una web app in Node.js, con le dipendenze gestite tramite il file package-lock.json.
Il modo più semplice per integrare OSV è utilizzare osv-scanner, lo strumento ufficiale di Google per analizzare progetti localmente.
Esecuzione locale con osv-scanner
- Installazione rapida:
curl -L https://github.com/google/osv-scanner/releases/latest/download/osv-scanner-linux-amd64 -o osv-scanner
chmod +x osv-scanner
- Scansione del progetto:
./osv-scanner --lockfile=package-lock.json
- Output atteso:
Il report mostrerà per ogni pacchetto eventualmente vulnerabile:
- Nome del pacchetto
- Versione utilizzata
- Vulnerabilità rilevata (es. GHSA-xxxx)
- Versioni sicure consigliate
- Link a dettagli tecnici e commit di fix
Azione successiva
Una volta individuata la libreria vulnerabile, lo sviluppatore può:
- Eseguire npm update o npm audit fix se disponibile
- Consultare il changelog del pacchetto per decidere l’aggiornamento più sicuro
- Creare una pull request dedicata con l’upgrade della dipendenza
Caso 2: Controllo automatico notturno via API OSV
In ambienti enterprise, è molto utile automatizzare il controllo delle dipendenze tramite uno script che interroga l’API di OSV durante la notte, inviando eventualmente un report alla sicurezza IT o in un canale Slack.
Esempio di script in Python
import requests
import json
def check_vulnerability(package_name, ecosystem, version):
url = "https://api.osv.dev/v1/query"
data = {
"package": {
"name": package_name,
"ecosystem": ecosystem
},
"version": version
}
response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(data))
if response.status_code == 200:
vulnerabilities = response.json().get("vulns", [])
if vulnerabilities:
print(f" {package_name}@{version} has {len(vulnerabilities)} vulnerabilities:")
for vuln in vulnerabilities:
print(f"- {vuln['id']}: {vuln.get('summary', 'No summary')}")
else:
print(f" {package_name}@{version} has no known vulnerabilities.")
else:
print("API error:", response.status_code)
# Esempio: controllare Express.js
check_vulnerability("express", "npm", "4.17.1")
Questo script può essere esteso per analizzare tutte le dipendenze da un file package-lock.json, requirements.txt, ecc., ed eseguito automaticamente tramite cron o come job CI/CD.
Caso 3: Blocco automatico della build in CI/CD
Nel contesto DevSecOps, OSV può essere integrato in pipeline di Continuous Integration per bloccare il deploy se viene rilevata una vulnerabilità critica.
Esempio con GitHub Actions
jobs:
osv-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Download osv-scanner
run: |
curl -L https://github.com/google/osv-scanner/releases/latest/download/osv-scanner-linux-amd64 -o osv-scanner
chmod +x osv-scanner
- name: Run vulnerability scan
run: ./osv-scanner --lockfile=package-lock.json
Si può configurare la pipeline affinché la build fallisca se viene rilevata almeno una vulnerabilità non mitigata.
Questi esempi dimostrano come il database OSV sia molto più di un archivio consultabile: si tratta di uno strumento operativo, pensato per essere inserito concretamente nel ciclo di vita del software.
Che si tratti di una startup con un piccolo progetto o di una grande azienda con infrastrutture complesse, OSV aiuta a individuare e gestire le vulnerabilità prima che diventino falle di sicurezza sfruttabili, contribuendo alla costruzione di un ambiente di sviluppo più sicuro, automatizzato e conforme ai moderni standard di sicurezza del software.
Domande e risposte
- Cos’è il database OSV?
È un database open source che raccoglie informazioni sulle vulnerabilità nei pacchetti software. - Chi ha creato OSV?
Il progetto è stato avviato da Google per supportare la sicurezza dei progetti open source. - Quali ecosistemi sono supportati?
Supporta Python, JavaScript, Go, Rust, Debian, Linux Kernel e altri. - Come posso usare OSV nel mio progetto?
Puoi integrarlo via API o strumenti CI/CD per controlli automatici delle dipendenze. - È gratuito?
Sì, il database OSV è completamente gratuito e open source. - Cosa differenzia OSV da altri database CVE?
OSV è pensato per gli sviluppatori, con un formato strutturato e interrogabile via API. - Come vengono raccolte le informazioni?
Attraverso analisi automatiche, contributi di maintainer e sincronizzazione con altri database. - Posso contribuire al database?
Sì, chiunque può proporre nuovi record o aggiornamenti tramite GitHub. - OSV funziona anche offline?
Puoi scaricare i dati in formato JSON per uso locale, ma perde l’aggiornamento in tempo reale. - È affidabile per ambienti di produzione?
Assolutamente sì, viene usato anche da grandi aziende per rafforzare la sicurezza dei sistemi.