Voltar às atualizações
New releaseAug 18, 2026

nmap-vulners v1.5

Script NSE do Nmap que consulta a API do Vulners para identificar vulnerabilidades conhecidas (CVEs) em serviços de rede detectados, aprimorando a varredura de portas padrão com busca automatizada de CVEs e pontuação CVSS.

Compartilhar

nmap-vulners

Transforme uma varredura de serviços do nmap em uma lista de CVEs, pontuações CVSS e exploits conhecidos.

Três scripts NSE que pegam o software que o nmap já identificou, consultam o banco de dados do Vulners sobre o que se sabe sobre ele e imprimem a resposta dentro do relatório de varredura.

tests license nmap data stars

vulners.nse against scanme.nmap.org


Os três scripts

ScriptPrecisa de chaveO que faz
vulners.nsenãoEnvia cada CPE que o nmap encontrou para o endpoint público do Vulners e imprime o que se sabe sobre ele, com o maior CVSS primeiro
vulners_enterprise.nsesimA mesma consulta através da API v4 do Vulners: pontuações CVSS v3 e os exploits que referenciam cada CVE
http-vulners-regex.nsenãoIdentifica o software web a partir de cabeçalhos HTTP e conteúdo de páginas, para que os outros dois tenham algo para consultar mesmo quando o -sV não consegue identificá-lo

Eles são independentes. Execute um ou todos os três — o script de regex entrega suas descobertas automaticamente aos outros dois.

Instalação

macOS, Linux, Kali, WSL — uma linha, sem argumentos:

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

Windows — PowerShell como Administrador:

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

O instalador pergunta ao nmap onde ele guarda seus dados, copia os scripts e seus arquivos de dados para lá, reconstrói o banco de dados de scripts e então verifica se --script vulners realmente resolve para o que acabou de instalar — o nmap traz um vulners.nse próprio, e este o substitui.

Sem root e outras opções
# 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

O PowerShell aceita as mesmas opções: -User, -Prefix, -Ref, -Uninstall.

A partir de um checkout
git clone https://github.com/vulnersCom/nmap-vulners
cd nmap-vulners
./install.sh

O instalador usa os arquivos ao lado dele, então isso instala exatamente o que você clonou. Executar os scripts diretamente do checkout também funciona:

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

Use um caminho absoluto ao executar a partir de um checkout. O nmap resolve um --script ./vulners.nse relativo primeiro contra o seu próprio script.db e, silenciosamente, executa a cópia que veio com o nmap em vez da sua.

Manualmente

Cinco arquivos, dois diretórios:

ArquivoVai para
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/

Depois sudo nmap --script-updatedb.

O diretório de dados do nmap costuma ser /usr/share/nmap (Debian, Ubuntu, Kali), /usr/local/share/nmap (compilado a partir do código-fonte), /opt/homebrew/share/nmap (Homebrew) ou C:\Program Files (x86)\Nmap (Windows). Para ter certeza, pergunte ao nmap:

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

O diretório que contém o nse_main.lua é o que este nmap usa.

Uso

vulners — nenhuma chave necessária

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

Cada CPE que o nmap reporta é consultado; cada vulnerabilidade é impressa com sua pontuação, a escala em que essa pontuação se baseia e um link. Entradas com um exploit conhecido são marcadas *EXPLOIT* e são exibidas independentemente do limite, porque uma falha de baixa severidade já explorada ainda compromete você.

vulners_enterprise — chave da API do Vulners

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

vulners_enterprise.nse against scanme.nmap.org

O endpoint enterprise responde com métricas CVSS v3 e com as referências de exploits que o Vulners coletou; assim, um CVE explorado é marcado como *HAS EXPLOIT* e o exploit em si é listado ao lado dele. Todos os CPEs de uma porta viajam em uma requisição.

http-vulners-regex — identificar o que o -sV não consegue nomear

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

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

178 padrões mapeiam cabeçalhos HTTP e marcação de páginas — Server, X-Powered-By, tags de gerador, URLs de assets — para CPEs: servidores web, CMSs, frameworks, plugins do WordPress e bibliotecas JavaScript. Tudo o que ele encontra é publicado na porta, para que vulners e vulners_enterprise consultem na mesma varredura.

Argumentos dos scripts

vulners

ArgumentoPadrãoSignificado
vulners.mincvss0Oculta vulnerabilidades com pontuação abaixo deste valor. Boletins e exploits sem pontuação são sempre exibidos
vulners.api_hostvulners.comNome do host da API
vulners.api_port443Porta em api_host

vulners_enterprise

ArgumentoPadrãoSignificado
vulners_enterprise.mincvss0Como acima
vulners_enterprise.api_key-Token da API. Prefira a variável de ambiente, veja abaixo
vulners_enterprise.api_key_file-Caminho absoluto para um arquivo cuja primeira linha é o token
vulners_enterprise.api_hostvulners.comNome do host da API
vulners_enterprise.api_port443Porta em api_host

http-vulners-regex

ArgumentoPadrãoSignificado
http-vulners-regex.pathshttp-vulners-paths.txt (125 caminhos)Uma lista Lua de caminhos, ou uma string nomeando um arquivo com um caminho por linha

Toda a lista de caminhos viaja em um único pipeline HTTP. Um arquivo que não pode ser lido interrompe o script em vez de recorrer à lista que acompanha a ferramenta, então um erro de digitação no nome do arquivo não pode transformar uma varredura de três caminhos em uma de 125.

Onde guardar a chave da API

Em ordem de preferência:

  1. VULNERS_API_KEY no ambiente
  2. --script-args vulners_enterprise.api_key_file=/absolute/path
  3. --script-args vulners_enterprise.api_key=<token>

A terceira é conveniente e vazada: o nmap copia sua própria linha de comando para todos os relatórios, então o token acaba no atributo args da saída -oX e no seu histórico de shell. O script em si nunca grava o token em lugar nenhum, inclusive na sua saída de depuração — há um teste de regressão que garante isso.

Os tokens ficam na sua conta do vulners.com. Sem um, o vulners_enterprise permanece em silêncio e não envia nada.

Como os três se encaixam

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

Saída legível por máquina

Tudo o que os scripts imprimem também é estruturado, então a saída -oX pode ser analisada sem tocar no texto legível por humanos:

<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>

As chaves são id, type, cvss, cvss_type e is_exploit, que está presente apenas em entradas que o possuem. As tabelas de resultados são indexadas pelo CPE para o qual foram encontradas. Um boletim sem pontuação não traz nem cvss nem cvss_type.

Varredura educada

Uma varredura de uma rede faz muito menos requisições à API do que parece:

  • cada CPE de uma porta vai em uma requisição em lote
  • as respostas ficam em cache durante toda a varredura, então cem servidores idênticos custam uma consulta, não cem
  • uma consulta já em andamento é aguardada em vez de repetida
  • a varredura de 125 caminhos roda sobre 5 conexões TCP em vez de 126 e solicita páginas compactadas quando o servidor as oferece
  • um limite de taxa ou uma queda interrompe as requisições da varredura em vez de tentar novamente por host

Desenvolvimento

Os testes, a verificação de higiene e o CONTRIBUTING.md estão apenas no repositório git; o arquivo de release acompanha os scripts e seus dados. Três verificações, todas offline exceto onde indicado:

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 casos de teste unitário rodam dentro do nmap contra as bibliotecas NSE reais; 33 casos de ponta a ponta usam o binário real do nmap contra um servidor web local e uma API do Vulners simulada; a verificação de higiene mantém segredos, saídas de varredura e lixo de editores fora da árvore. python3 tests/e2e/run_e2e.py --live adiciona seis verificações contra o serviço real. Veja CONTRIBUTING.md.

FAQ

Ele explora alguma coisa? Não. Os scripts leem banners e páginas e consultam um banco de dados. Eles estão na categoria safe do nmap.

Funciona sem uma chave de API? Sim — vulners e http-vulners-regex não precisam de nenhuma. vulners_enterprise precisa.

Por que uma vulnerabilidade mostra cvss2.0 enquanto outra mostra cvss3.1? O rótulo nomeia a escala em que a pontuação se baseia. O Vulners retorna o que a fonte publicou; uma pontuação v2 de 9.3 não é uma pontuação v3 de 9.3.

Por que uma entrada com pontuação baixa é exibida quando eu defino mincvss? Porque ela tem um exploit conhecido, ou porque a fonte nunca a pontuou. Ambas as situações são intencionais.

Não encontrou nada em um host que eu sei que é vulnerável. Execute com -d2: os scripts registram cada CPE que consultaram. Normalmente o nmap nomeia o serviço, mas não a versão, e não há versão para consultar.

Licença

Os scripts são licenciados da mesma forma que o próprio Nmap — veja LICENSE para a Nmap Public Source License e nmap.org/npsl para saber o que ela significa.

Os dados de vulnerabilidades vêm do Vulners e estão sujeitos aos seus termos.

Relacionados


Mantido pela equipe Vulners <[email protected]>

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

Categorias