Torna agli aggiornamenti
New releaseAug 18, 2026

nmap-vulners v1.5

Script NSE di Nmap che interroga l'API di Vulners per identificare vulnerabilità note (CVE) per i servizi di rete rilevati, migliorando la scansione delle porte standard con ricerca automatica di CVE e punteggio CVSS.

Condividi

nmap-vulners

Trasforma una scansione dei servizi di nmap in un elenco di CVE, punteggi CVSS ed exploit noti.

Tre script NSE che prendono il software che nmap ha già identificato, interrogano il database di Vulners per sapere cosa è noto al riguardo e stampano la risposta nel report di scansione.

tests license nmap data stars

vulners.nse contro scanme.nmap.org


I tre script

ScriptRichiede una chiaveFunzione
vulners.nsenoInvia ogni CPE trovato da nmap all'endpoint pubblico di Vulners e stampa ciò che è noto, a partire dal CVSS più alto
vulners_enterprise.nseLa stessa ricerca tramite l'API v4 di Vulners: punteggi CVSS v3 ed exploit che citano ogni CVE
http-vulners-regex.nsenoRileva il software web da intestazioni HTTP e contenuto delle pagine, così le altre due hanno qualcosa da cercare anche quando -sV non riesce a identificarlo

Sono indipendenti. Eseguine uno o tutti e tre: lo script regex passa automaticamente i suoi risultati alle altre due.

Installazione

macOS, Linux, Kali, WSL - una riga, senza argomenti:

curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh

Windows - PowerShell come amministratore:

irm https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.ps1 | iex

Il programma di installazione chiede a nmap dove conserva i suoi dati, copia gli script e i loro file dati in quella posizione, ricostruisce il database degli script e poi verifica che --script vulners risolva davvero a ciò che ha appena installato: nmap include una propria vulners.nse, e questo la sostituisce.

Senza root, e altre opzioni
# into ~/.nmap, no sudo; the installer prints the NMAPDIR line to add to your profile
curl -fsSL https://raw.githubusercontent.com/vulnersCom/nmap-vulners/master/install.sh | sh -s -- --user

# a specific directory
./install.sh --prefix /usr/local/share/nmap

# a specific release
./install.sh --ref v1.5

# remove everything it installed
./install.sh --uninstall

PowerShell accetta le stesse opzioni: -User, -Prefix, -Ref, -Uninstall.

Da un checkout
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh

Il programma di installazione usa i file che lo accompagnano, quindi installa esattamente ciò che hai clonato. Eseguire gli script direttamente dal checkout funziona anche:

nmap -sV --script "$PWD/vulners.nse" <target>

Usa un percorso assoluto quando esegui da un checkout. nmap risolve prima un --script ./vulners.nse relativo contro la propria script.db ed esegue silenziosamente la copia inclusa con nmap invece della tua.

A mano

Cinque file, due directory:

FileDestinazione
vulners.nse, vulners_enterprise.nse, http-vulners-regex.nse<nmap data dir>/scripts/
http-vulners-regex.json, http-vulners-paths.txt<nmap data dir>/nselib/data/

Poi sudo nmap --script-updatedb.

La directory dati di nmap di solito è /usr/share/nmap (Debian, Ubuntu, Kali), /usr/local/share/nmap (compilato dai sorgenti), /opt/homebrew/share/nmap (Homebrew) o C:\Program Files (x86)\Nmap (Windows). Per essere certi, chiedi a nmap:

nmap -d2 --script-help probe 2>&1 | grep nse_main.lua

La directory che contiene nse_main.lua è quella usata da questa versione di nmap.

Utilizzo

vulners - nessuna chiave richiesta

nmap -sV --script vulners [--script-args mincvss=<score>] <target>

Ogni CPE segnalato da nmap viene cercato; ogni vulnerabilità viene stampata con il suo punteggio, la scala a cui appartiene e un link. Le voci con un exploit noto sono contrassegnate *EXPLOIT* e vengono mostrate qualunque sia la soglia, perché un bug a bassa gravità già sfruttato può comunque comprometterti.

vulners_enterprise - chiave API di Vulners

export VULNERS_API_KEY=<token>
nmap -sV --script vulners_enterprise [--script-args mincvss=<score>] <target>

vulners_enterprise.nse contro scanme.nmap.org

L'endpoint enterprise risponde con le metriche CVSS v3 e con i riferimenti agli exploit raccolti da Vulners, quindi un CVE sfruttato viene contrassegnato *HAS EXPLOIT* e l'exploit stesso è elencato accanto ad esso. Tutti i CPE di una porta viaggiano in una sola richiesta.

http-vulners-regex - identifica ciò che -sV non sa nominare

nmap -sV --script http-vulners-regex [--script-args paths={"/"}] <target>

http-vulners-regex.nse contro scanme.nmap.org

178 pattern associano intestazioni HTTP e markup delle pagine - Server, X-Powered-By, tag di generatori, URL di asset - ai CPE: web server, CMS, framework, plugin WordPress, librerie JavaScript. Qualsiasi cosa trovi viene pubblicata sulla porta, così vulners e vulners_enterprise possono cercarla nella stessa scansione.

Argomenti degli script

vulners

ArgomentoPredefinitoSignificato
vulners.mincvss0Nasconde le vulnerabilità con punteggio inferiore a questo. I bollettini senza punteggio e gli exploit vengono sempre mostrati
vulners.api_hostvulners.comNome host dell'API
vulners.api_port443Porta su api_host

vulners_enterprise

ArgomentoPredefinitoSignificato
vulners_enterprise.mincvss0Come sopra
vulners_enterprise.api_key-Token API. Preferisci la variabile d'ambiente, vedi sotto
vulners_enterprise.api_key_file-Percorso assoluto di un file la cui prima riga è il token
vulners_enterprise.api_hostvulners.comNome host dell'API
vulners_enterprise.api_port443Porta su api_host

http-vulners-regex

ArgomentoPredefinitoSignificato
http-vulners-regex.pathshttp-vulners-paths.txt (125 percorsi)Una lista Lua di percorsi, oppure una stringa che indica un file con un percorso per riga

L'intero elenco di percorsi viaggia in un'unica pipeline HTTP. Un file che non può essere letto blocca lo script invece di ripiegare sull'elenco incluso, così un refuso nel nome del file non può trasformare una scansione a tre percorsi in una a 125.

Dove conservare la chiave API

In ordine di preferenza:

  1. VULNERS_API_KEY nella variabile d'ambiente
  2. --script-args vulners_enterprise.api_key_file=/absolute/path
  3. --script-args vulners_enterprise.api_key=<token>

La terza è comoda ma dispersiva: nmap copia la propria riga di comando in ogni report, quindi il token finisce nell'attributo args dell'output -oX e nella cronologia della shell. Lo script stesso non scrive mai il token da nessuna parte, incluso l'output di debug: esiste un test di regressione che lo garantisce.

I token si trovano nel tuo account vulners.com. Senza uno di essi, vulners_enterprise rimane in silenzio e non invia nulla.

Come i tre si integrano

nmap -sV
   |
   +-- service fingerprint --> port.version.cpe ------------+
   |                                                        |
   +-- http-vulners-regex.nse                               |
         requests the path list in one pipeline             |
         matches headers and bodies against 178 patterns    |
         publishes the CPEs it found for that port ---------+
                                                            |
                                                            v
                                     vulners.nse / vulners_enterprise.nse
                                        one batched request per port
                                        answers cached for the whole scan
                                        sorted by CVSS, exploits marked

Output leggibile dalle macchine

Tutto ciò che gli script stampano è anche strutturato, quindi l'output -oX può essere analizzato senza toccare il testo leggibile dall'uomo:

<script id="vulners_enterprise">
  <table key="cpe:/a:apache:http_server:2.4.7">
    <table>
      <elem key="id">CVE-2021-44790</elem>
      <elem key="type">cve</elem>
      <elem key="cvss">9.8</elem>
      <elem key="cvss_type">cvss3.1</elem>
    </table>
    <table>
      <elem key="id">EDB-ID:51193</elem>
      <elem key="type">exploitdb</elem>
      <elem key="cvss">9.8</elem>
      <elem key="cvss_type">cvss3.1</elem>
      <elem key="is_exploit">true</elem>
    </table>
  </table>
</script>

Le chiavi sono id, type, cvss, cvss_type e is_exploit, che è presente solo nelle voci che ne hanno uno. Le tabelle dei risultati sono indicizzate dal CPE per cui sono state trovate. Un bollettino senza punteggio non contiene né cvsscvss_type.

Scansioni rispettose

Una scansione di una rete interroga l'API molto meno di quanto sembri:

  • tutti i CPE di una porta finiscono in una richiesta in batch
  • le risposte vengono memorizzate nella cache per l'intera scansione, quindi cento server identici costano una ricerca, non cento
  • una ricerca già in corso viene attesa invece di essere ripetuta
  • la scansione dei 125 percorsi usa 5 connessioni TCP invece di 126 e richiede pagine compresse quando il server le offre
  • un limite di velocità o un'interruzione ferma le richieste della scansione invece di ritentare per ogni host

Sviluppo

I test, il controllo di igiene e CONTRIBUTING.md sono solo nel repository git; l'archivio di rilascio include gli script e i loro dati. Tre controlli, tutti offline tranne dove indicato:

nmap -sn -Pn --script ./tests/run.nse --script-args testdir=tests,root=. 127.0.0.1
python3 tests/e2e/run_e2e.py
python3 tools/check.py

110 casi unitari vengono eseguiti dentro nmap contro le vere librerie NSE; 33 casi end-to-end guidano il vero binario di nmap contro un server web locale e un'API Vulners simulata; il controllo di igiene tiene segreti, output di scansione e file spazzatura degli editor fuori dall'albero. python3 tests/e2e/run_e2e.py --live aggiunge sei verifiche contro il servizio reale. Vedi CONTRIBUTING.md.

FAQ

Sfrutta qualcosa? No. Gli script leggono banner e pagine e interrogano un database. Sono nella categoria safe di nmap.

Funziona senza chiave API? Sì: vulners e http-vulners-regex non ne richiedono una. vulners_enterprise sì.

Perché una vulnerabilità mostra cvss2.0 mentre un'altra mostra cvss3.1? L'etichetta indica la scala su cui si basa il punteggio. Vulners restituisce quella pubblicata dalla fonte; un punteggio v2 di 9.3 non è un punteggio v3 di 9.3.

Perché viene mostrata una voce con punteggio basso quando imposto mincvss? Perché ha un exploit noto, oppure perché la fonte non le ha mai assegnato un punteggio. Entrambi i casi sono voluti.

Non ha trovato nulla su un host che so essere vulnerabile. Esegui con -d2: gli script registrano ogni CPE per cui hanno chiesto. Di solito nmap identifica il servizio ma non la versione, e senza versione non c'è nulla da cercare.

Licenza

Gli script sono concessi in licenza come Nmap stesso: vedi LICENSE per la Nmap Public Source License e nmap.org/npsl per capire cosa significa.

I dati sulle vulnerabilità provengono da Vulners e sono soggetti ai loro termini.

Correlati


Mantenuto dal team Vulners <[email protected]>

#nmap #nse #vulnerability-scanner #cve #cvss #cpe #vulners #security-tools #pentest #infosec #network-scanner #exploit-database #lua #vulnerability-detection #security-automation

Categorie