Retour aux mises à jour
New releaseAug 18, 2026

nmap-vulners v1.5

Script NSE pour Nmap qui interroge l'API Vulners pour identifier les vulnérabilités connues (CVE) des services réseau détectés, améliorant le scan de ports standard avec une recherche automatisée de CVE et un score CVSS.

Partager

nmap-vulners

Transformez un scan de services nmap en une liste de CVE, de scores CVSS et d'exploits connus.

Trois scripts NSE qui prennent les logiciels déjà identifiés par nmap, interrogent la base Vulners pour savoir ce qui est connu à leur sujet, puis impriment la réponse dans le rapport de scan.

tests license nmap data stars

vulners.nse against scanme.nmap.org


Les trois scripts

ScriptClé requiseCe qu'il fait
vulners.nsenonEnvoie chaque CPE trouvé par nmap à l'endpoint public de Vulners et affiche ce qui est connu à son sujet, en commençant par le CVSS le plus élevé
vulners_enterprise.nseouiLa même recherche via l'API v4 de Vulners : scores CVSS v3 et exploits référençant chaque CVE
http-vulners-regex.nsenonIdentifie les logiciels web à partir des en-têtes HTTP et du contenu des pages, afin que les deux autres aient quelque chose à rechercher même quand -sV ne peut pas les nommer

Ils sont indépendants. Lancez-en un, ou les trois : le script regex transmet automatiquement ses résultats aux deux autres.

Installation

macOS, Linux, Kali, WSL - une seule ligne, sans argument :

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

Windows - PowerShell en tant qu'administrateur :

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

L'installateur demande à nmap où se trouvent ses données, y copie les scripts et leurs fichiers de données, reconstruit la base de scripts, puis vérifie que --script vulners résout bien ce qu'il vient d'installer - nmap fournit son propre vulners.nse, et celui-ci le remplace.

Sans root, et autres options
# 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 accepte les mêmes options : -User, -Prefix, -Ref, -Uninstall.

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

L'installateur utilise les fichiers situés à côté de lui, il installe donc exactement ce que vous avez cloné. Lancer les scripts directement depuis le checkout fonctionne aussi :

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

Utilisez un chemin absolu lorsque vous lancez depuis un checkout. nmap résout d'abord un --script ./vulners.nse relatif par rapport à son propre script.db, puis exécute silencieusement la copie fournie avec nmap au lieu de la vôtre.

À la main

Cinq fichiers, deux répertoires :

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

Ensuite sudo nmap --script-updatedb.

Le répertoire de données de nmap est généralement /usr/share/nmap (Debian, Ubuntu, Kali), /usr/local/share/nmap (compilé depuis les sources), /opt/homebrew/share/nmap (Homebrew) ou C:\Program Files (x86)\Nmap (Windows). Pour en être sûr, demandez à nmap :

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

Le répertoire contenant nse_main.lua est celui qu'utilise ce nmap.

Utilisation

vulners - aucune clé requise

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

Chaque CPE signalé par nmap est recherché ; chaque vulnérabilité est affichée avec son score, l'échelle sur laquelle ce score est exprimé et un lien. Les entrées avec un exploit connu sont marquées *EXPLOIT* et sont affichées quel que soit le seuil, car une faille de faible sévérité exploitée vous compromet quand même.

vulners_enterprise - clé API Vulners

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

vulners_enterprise.nse against scanme.nmap.org

L'endpoint enterprise répond avec les métriques CVSS v3 et les références d'exploits collectées par Vulners, de sorte qu'une CVE exploitée est marquée *HAS EXPLOIT* et que l'exploit lui-même est listé à côté. Tous les CPE d'un port partent en une seule requête.

http-vulners-regex - identifier ce que -sV ne peut pas nommer

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

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

178 motifs associent les en-têtes HTTP et le balisage des pages - Server, X-Powered-By, balises de générateur, URL d'assets - à des CPE : serveurs web, CMS, frameworks, plugins WordPress, bibliothèques JavaScript. Tout ce qu'il trouve est publié sur le port, afin que vulners et vulners_enterprise puissent le rechercher dans le même scan.

Arguments des scripts

vulners

ArgumentDéfautSignification
vulners.mincvss0Masque les vulnérabilités dont le score est inférieur à cette valeur. Les bulletins non notés et les exploits sont toujours affichés
vulners.api_hostvulners.comNom d'hôte de l'API
vulners.api_port443Port de api_host

vulners_enterprise

ArgumentDéfautSignification
vulners_enterprise.mincvss0Comme ci-dessus
vulners_enterprise.api_key-Jeton API. Préférez la variable d'environnement, voir ci-dessous
vulners_enterprise.api_key_file-Chemin absolu vers un fichier dont la première ligne est le jeton
vulners_enterprise.api_hostvulners.comNom d'hôte de l'API
vulners_enterprise.api_port443Port de api_host

http-vulners-regex

ArgumentDéfautSignification
http-vulners-regex.pathshttp-vulners-paths.txt (125 chemins)Une liste Lua de chemins, ou une chaîne nommant un fichier avec un chemin par ligne

Toute la liste de chemins voyage dans un seul pipeline HTTP. Un fichier illisible arrête le script plutôt que de revenir à la liste fournie, de sorte qu'une faute de frappe dans le nom du fichier ne peut pas transformer un scan de trois chemins en un scan de 125 chemins.

Où conserver la clé API

Par ordre de préférence :

  1. VULNERS_API_KEY dans l'environnement
  2. --script-args vulners_enterprise.api_key_file=/absolute/path
  3. --script-args vulners_enterprise.api_key=<token>

La troisième est pratique et fuyante : nmap copie sa propre ligne de commande dans chaque rapport, si bien que le jeton se retrouve dans l'attribut args de la sortie -oX et dans l'historique de votre shell. Le script lui-même n'écrit jamais le jeton nulle part, y compris dans sa sortie de débogage - un test de régression le vérifie.

Les jetons se trouvent dans votre compte vulners.com. Sans jeton, vulners_enterprise reste silencieux et n'envoie rien.

Comment les trois s'articulent

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

Sortie lisible par machine

Tout ce que les scripts affichent est également structuré, de sorte que la sortie -oX peut être analysée sans toucher au texte humain :

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

Les clés sont id, type, cvss, cvss_type et is_exploit, cette dernière n'étant présente que sur les entrées qui en ont une. Les tables de résultats sont indexées par le CPE pour lequel elles ont été trouvées. Un bulletin non noté ne comporte ni cvss ni cvss_type.

Scanner poliment

Un scan de réseau sollicite l'API bien moins qu'il n'y paraît :

  • tous les CPE d'un port partent en une seule requête groupée
  • les réponses sont mises en cache pour tout le scan : cent serveurs identiques ne coûtent qu'une seule recherche, pas cent
  • une recherche déjà en cours est attendue plutôt que répétée
  • le balayage des 125 chemins s'effectue sur 5 connexions TCP plutôt que 126, et demande des pages compressées lorsque le serveur le propose
  • un dépassement de limite de débit ou une panne arrête les requêtes du scan au lieu de réessayer hôte par hôte

Développement

Les tests, le contrôle d'hygiène et CONTRIBUTING.md ne se trouvent que dans le dépôt git ; l'archive de version contient les scripts et leurs données. Trois contrôles, tous hors ligne sauf indication contraire :

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 cas unitaires s'exécutent dans nmap contre les vraies bibliothèques NSE ; 33 cas de bout en bout pilotent le vrai binaire nmap contre un serveur web local et une API Vulners factice ; le contrôle d'hygiène élimine secrets, sorties de scan et fichiers parasites d'éditeur de l'arborescence. python3 tests/e2e/run_e2e.py --live ajoute six vérifications contre le service réel. Voir CONTRIBUTING.md.

FAQ

Est-ce qu'il exploite quelque chose ? Non. Les scripts lisent des bannières et des pages et interrogent une base de données. Ils appartiennent à la catégorie safe de nmap.

Fonctionne-t-il sans clé API ? Oui - vulners et http-vulners-regex n'en ont pas besoin. vulners_enterprise en a besoin.

Pourquoi une vulnérabilité affiche cvss2.0 alors qu'une autre affiche cvss3.1 ? Le libellé indique l'échelle sur laquelle le score est exprimé. Vulners renvoie celui que la source a publié ; un score v2 de 9.3 n'est pas un score v3 de 9.3.

Pourquoi une entrée à faible score est-elle affichée quand je règle mincvss ? Parce qu'elle a un exploit connu, ou parce que la source ne l'a jamais notée. Les deux sont voulus.

Il n'a rien trouvé sur un hôte que je sais vulnérable. Lancez avec -d2 : les scripts journalisent chaque CPE interrogé. En général, nmap a identifié le service mais pas sa version, et il n'y a pas de version à rechercher.

Licence

Les scripts sont sous licence identique à celle de Nmap lui-même - voir LICENSE pour la Nmap Public Source License, et nmap.org/npsl pour ce qu'elle implique.

Les données de vulnérabilités proviennent de Vulners et sont soumises à leurs conditions.

Liens connexes


Maintenu par l'équipe Vulners <[email protected]>

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

Catégories