🌐 Universal Parser (Pro)

Remarque : Universal Parser n’est disponible que dans DefectDojo Pro.

Universal Parser est activĂ© pour chaque instance DefectDojo Pro ; il n’y a rien Ă  activer. Consultez notre prĂ©sentation d’annonce pour plus d’informations.

À propos d’Universal Parser

DefectDojo dispose d’une vaste bibliothĂšque de parseurs, rĂ©guliĂšrement mise Ă  jour, pour aider les Ă©quipes de sĂ©curitĂ© Ă  ingĂ©rer des donnĂ©es. Cependant, il arrive que les utilisateurs disposent d’un outil non pris en charge par les parseurs existants, ou qu’ils souhaitent importer des donnĂ©es dans le modĂšle DefectDojo diffĂ©remment de la façon dont le parseur le fait.

Universal Parser de DefectDojo est conçu pour offrir aux utilisateurs disposant de types de rapports non pris en charge une solution permettant d’importer et de mapper n’importe quel fichier JSON, CSV ou XML.

Universal Parser, c’est :

  • Un moyen rapide de prendre en charge des formats de fichiers pour lesquels nous ne disposons pas de parseurs Community, comme les rapports produits par des outils internes
  • Un outil pour vous aider Ă  ingĂ©rer des donnĂ©es, mĂȘme si un parseur Community est obsolĂšte ou ne structure pas les constatations comme vous le souhaiteriez
  • Une alternative Ă  l’Ă©criture de scripts personnalisĂ©s pour transformer les rapports d’outils dans le format CSV/JSON attendu par le type d’analyse « Generic Findings Import »
  • Conçu pour ĂȘtre facile Ă  utiliser par tous, sans code et avec une configuration minimale

Universal Parser, ce n’est pas :

  • Un remplacement complet des parseurs open source, des Connectors, ou des rapports « Generic Findings Import » soigneusement retravaillĂ©s
  • Capable de gĂ©rer une logique nuancĂ©e et conditionnelle pour structurer les constatations

La configuration d’Universal Parser n’est disponible que dans l’interface Pro, mais vous pouvez toujours importer des analyses Ă  l’aide d’un Universal Parser via l’ancienne interface ou l’API.

Étape 1 : CrĂ©er un nouvel Universal Parser

Vous pouvez créer un nouvel Universal Parser en cliquant sur le bouton « New Universal Parser » dans la barre de navigation, sous la section « Import », ou depuis le lien présent sur la page « Add Findings ».

image

Le premier Ă©cran vous demandera un fichier d’analyse et un nom de parseur.

image

Le fichier doit :

  • Avoir une extension reconnue (voir les extensions de fichiers prises en charge ci-dessous)
  • Contenir suffisamment d’objets de type constatation pour ĂȘtre reprĂ©sentatif de rapports rĂ©els, c’est-Ă -dire un fichier qui inclut des valeurs dans tous les champs facultatifs
  • Ne pas dĂ©passer environ 1 Ă  2 Mo — au-delĂ , l’analyse du fichier prendra gĂ©nĂ©ralement plus de temps, sans aucun bĂ©nĂ©fice

Le nom du parseur sera utilisĂ© lors de la crĂ©ation du Test_Type pour ce nouveau parseur. Vous retrouverez votre Universal Parser nouvellement créé dans la liste dĂ©roulante des types d’analyse de la page « Add Findings », sous un nom du type « Universal Parser - MyCustomParser ». Les noms de parseurs doivent ĂȘtre uniques afin d’Ă©viter toute confusion lors du choix d’un type d’analyse pour les imports.

Étape 2 : Mapper vos champs de Constatation

image

AprĂšs avoir tĂ©lĂ©versĂ© un exemple de fichier d’analyse, sĂ©lectionnĂ© un nom de parseur et cliquĂ© sur « Next », la page suivante vous permet de configurer la façon dont cet Universal Parser remplira les champs de constatation lors des imports effectuĂ©s avec cette configuration. À droite, vous trouverez une sĂ©lection de champs de constatation DefectDojo (champs de sortie). Des menus dĂ©roulants Ă  gauche de chaque champ de sortie vous permettent de sĂ©lectionner le ou les Ă©lĂ©ments (champs d’entrĂ©e) de la structure de votre fichier d’analyse Ă  utiliser pour les remplir.

Exemple :

Si vous avez tĂ©lĂ©versĂ© un fichier d’analyse au format JSON qui ressemble Ă  ceci :

{
    "findings": [
        {
            "title": "Finding 1 Title",
            "description": "Finding 1 Description",
            "severity": "CRITICAL",
            "CVE": "CVE-2025-12345",
            ...
        },
        {
            "title": "Finding 2 Title",
            "description": "Finding 2 Description",
            "severity": "LOW",
            "CVE": "CVE-2025-54321",
            ...
        },
        ...

    ]
}

Vous verrez une reprĂ©sentation hiĂ©rarchique des champs uniques dĂ©tectĂ©s Ă  partir de la structure du fichier d’entrĂ©e, avec des icĂŽnes indiquant le type de chaque champ (si nous pouvons le dĂ©terminer). Vous pouvez alors sĂ©lectionner le champ d’entrĂ©e « title » dans le menu dĂ©roulant qui alimente le champ de sortie « Title », le champ d’entrĂ©e « description » peut ĂȘtre associĂ© au champ de sortie « Description », et ainsi de suite.

Les noms des champs d’entrĂ©e n’ont pas besoin de correspondre aux noms des champs de sortie, et votre fichier d’analyse peut ne pas avoir d’Ă©quivalent pour tous les champs de sortie DefectDojo.

Champs de constatation mappables

Le tableau ci-dessous rĂ©pertorie tous les champs de constatation DefectDojo (champs de sortie) auxquels vous pouvez mapper un champ d’entrĂ©e. Votre fichier d’analyse n’aura pas nĂ©cessairement un Ă©quivalent pour chacun d’eux — ne mappez que ce qui est prĂ©sent.

  • Requis — ce champ de sortie doit avoir au moins un champ d’entrĂ©e mappĂ© avant de pouvoir enregistrer le parseur.
  • Accepte plusieurs entrĂ©es — ce champ de sortie peut ĂȘtre alimentĂ© par plusieurs champs d’entrĂ©e. Lorsque vous en mappez plusieurs, chaque valeur est prĂ©sentĂ©e sous un en-tĂȘte portant le nom de son champ d’entrĂ©e (voir Champs Ă  sĂ©lection multiple).
Champ de sortieRequisAccepte plusieurs entréesDescription
Title✅Brùve description de la faille.
Severity✅Le niveau de sĂ©vĂ©ritĂ© de cette faille (Critical, High, Medium, Low, Info). Par dĂ©faut, « Info » si inconnu.
Description✅✅Informations plus longues et plus descriptives sur la faille.
DateLa date à laquelle la faille a été découverte.
CWELe numéro CWE associé à cette faille.
CVSS v3 VectorLe vecteur Common Vulnerability Scoring System version 3 (CVSSv3) associé à cette faille.
CVSS v4 VectorLe vecteur Common Vulnerability Scoring System version 4 (CVSSv4) associé à cette faille.
Mitigation✅Texte dĂ©crivant la meilleure façon de corriger la faille.
Impact✅Texte dĂ©crivant l’impact de cette faille sur les systĂšmes, produits, l’entreprise, etc.
References✅La documentation externe disponible pour cette faille.
Severity Justification✅Texte expliquant pourquoi une certaine sĂ©vĂ©ritĂ© a Ă©tĂ© associĂ©e Ă  cette faille.
Steps to Reproduce✅Texte dĂ©crivant les Ă©tapes Ă  suivre pour reproduire la faille / le bug.
Component NameNom du composant affectĂ© (nom de bibliothĂšque, partie d’un systĂšme, …).
Component VersionVersion du composant affecté.
File PathFichier(s) identifié(s) contenant la faille.
Line NumberNumĂ©ro de ligne source du vecteur d’attaque.
ActiveIndique si cette faille est active ou non. Par défaut : true.
VerifiedIndique si cette faille a été vérifiée manuellement par le testeur. Par défaut : false.
False PositiveIndique si cette faille a été jugée faux positif par le testeur. Par défaut : false.
DuplicateIndique si cette faille est un doublon d’autres failles signalĂ©es. Par dĂ©faut : false.
EPSS ScoreScore EPSS pour le CVE — la probabilitĂ© que la vulnĂ©rabilitĂ© soit exploitĂ©e dans les 30 prochains jours. La valeur doit ĂȘtre comprise entre 0,0 et 1,0.
EPSS PercentilePercentile EPSS pour le CVE — combien de CVE sont notĂ©s au mĂȘme niveau ou en dessous de celui-ci. La valeur doit ĂȘtre comprise entre 0,0 et 1,0.
Unique ID From ToolID technique de la vulnĂ©rabilitĂ© issu de l’outil source. Permet le suivi des vulnĂ©rabilitĂ©s uniques.
Vuln ID from ToolID technique non unique issu de l’outil source, associĂ© au type de vulnĂ©rabilitĂ©.
TagsÉtiquettes textuelles dĂ©crivant cette constatation.
EndpointsLes hÎtes/URL du produit exposés à cette faille.
Vulnerability IDsUn ou plusieurs identifiants d’avis de vulnĂ©rabilitĂ© associĂ©s Ă  cette constatation (le plus souvent, des CVE).

Remarque : dans l’exemple ci-dessus, un champ d’entrĂ©e CVE serait mappĂ© au champ de sortie Vulnerability IDs — DefectDojo ne possĂšde pas de champ de constatation littĂ©ralement nommĂ© « CVE ».

Champs requis

Les champs de sortie suivants nĂ©cessitent un mappage de champ d’entrĂ©e :

  • Title
  • Severity
  • Description

À propos des sĂ©vĂ©ritĂ©s

Un Universal Parser accepte toute variation de casse des sĂ©vĂ©ritĂ©s DefectDojo - « CRITICAL », « Critical », « cRiTiCaL », etc. - et l’applique Ă  vos constatations. Toute valeur qui ne correspond Ă  aucune sĂ©vĂ©ritĂ© DefectDojo sera remplacĂ©e par « Info ». Cela reflĂšte le fonctionnement actuel des parseurs et des Connectors : les valeurs inconnues sont gĂ©nĂ©ralement mappĂ©es sur « Info ».

Champs à sélection multiple

Certains champs de sortie acceptent plusieurs champs d’entrĂ©e. Si vous choisissez de sĂ©lectionner plusieurs champs d’entrĂ©e, nous fournirons la valeur de ce champ sous un en-tĂȘte portant le nom de ce champ d’entrĂ©e.

Exemple

description

Ceci a Ă©tĂ© extrait d’un champ appelĂ© « description » dans le fichier d’entrĂ©e

detailed_description

Ceci a Ă©tĂ© extrait d’un champ appelĂ© « detailed_description » dans le fichier d’entrĂ©e

Étape 3 : PrĂ©visualiser vos Constatations

Une fois que vous avez sĂ©lectionnĂ© vos mappages entre champs d’entrĂ©e et champs de sortie, vous pouvez cliquer sur le bouton « Next » pour voir un aperçu de ce Ă  quoi ressembleront les Constatations de votre fichier d’entrĂ©e une fois importĂ©es dans DefectDojo avec la configuration choisie. Certains champs disposent d’un bouton « expand » Ă  cĂŽtĂ© d’eux, qui permet de voir le rendu complet en MarkDown de ce Ă  quoi ce champ ressemblera. Nous n’affichons un aperçu que des 25 premiĂšres Constatations de votre fichier d’entrĂ©e, mais vous pouvez Ă©galement voir combien de constatations ont Ă©tĂ© dĂ©tectĂ©es dans l’ensemble du fichier d’analyse.

Si les aperçus ne correspondent pas Ă  ce que vous attendiez, vous pouvez cliquer sur le bouton « Back » pour ajuster les mappages. Une fois satisfait de votre configuration, cliquez sur le bouton « Submit » pour crĂ©er votre nouvel Universal Parser. Cette action n’effectue pas d’import automatiquement.

Une fois votre Universal Parser créé, vous serez redirigĂ© vers la page « Add Findings », oĂč vous pourrez tĂ©lĂ©verser et importer un fichier d’analyse correspondant Ă  la structure du fichier d’exemple fourni Ă  l’Ă©tape 1.

Remarques supplĂ©mentaires sur la configuration d’Universal Parser

Choisir les bons champs d’entrĂ©e

Chaque Ă©diteur peut produire des formats de rapport d’analyse trĂšs diffĂ©rents, dont certains se rapprochent davantage du modĂšle de constatation de DefectDojo que d’autres. Nous offrons une flexibilitĂ© importante quant Ă  ce que nous acceptons, mais nous devons imposer une certaine structure pour garantir que les constatations ne soient pas altĂ©rĂ©es lors de la conversion de l’entrĂ©e vers la sortie. Bien que nous puissions prendre en charge des champs d’entrĂ©e facultatifs, nous n’acceptons pas les champs « globaux », ni les champs qui apparaissent un nombre de fois diffĂ©rent du nombre d’objets de constatation.

Exemple

{
    "scan_type": "MyToolScan", // <- There is only one instance of this field, which doesn't match the number of findings
    "findings": [
        {
            "title": "Finding 1 Title",
            "description": "Finding 1 Description",
            "severity": "CRITICAL",
            "CVE": "CVE-2025-12345", // <- This optional field only appears in Finding 1 - that's okay!
            ...
        },
        {
            "title": "Finding 2 Title",
            "description": "Finding 2 Description",
            "severity": "CRITICAL",
            ...  // <- While there is no "CVE" field here, we can still query for it and simply default to a null value
        },
        ... 5 more findings ...
    ],
    "global_details": [
        {
            "nested_detail": "Global detail 1"
        },
        {
            "nested_detail": "Global detail 2" // <- The number of "global_details" objects (2) does not match the number of individual finding objects (7)
        }

    ]
}

AprÚs avoir enregistré un Universal Parser

Vous pouvez modifier le Test_Type associé à votre Universal Parser afin de modifier :

  • S’il est « actif » ou non. S’il ne l’est pas, il n’apparaĂźtra pas comme option dans la liste dĂ©roulante « Scan Type » de la page « Add Findings »
  • Si ses constatations doivent ĂȘtre marquĂ©es « static » ou « dynamic »
  • Vous pouvez ajuster les codes de hachage de dĂ©duplication mĂȘme outil et inter-outils, ainsi que les codes de hachage de rĂ©import, pour votre Universal Parser dans « Enterprise Settings ». Par dĂ©faut, seuls les codes de hachage de dĂ©duplication mĂȘme outil et de rĂ©import sont renseignĂ©s, avec les valeurs requises Title, Severity et Description.

Cycle de vie : création, désactivation, réactivation

Le cycle de vie d’un Universal Parser est crĂ©ation uniquement, sans modification ni suppression possible depuis l’interface. Une fois un parseur créé, la configuration de mappage des champs ne peut plus ĂȘtre modifiĂ©e, et le parseur lui-mĂȘme ne peut pas ĂȘtre supprimĂ© depuis l’interface — il s’agit d’un choix de conception, car les configurations d’Universal Parser sont liĂ©es Ă  des enregistrements Test_Type susceptibles d’ĂȘtre rĂ©fĂ©rencĂ©s par des Constatations, des Tests et un historique d’import existants.

Ce que vous pouvez faire depuis l’interface :

  • DĂ©sactiver un parseur pour le masquer de la liste dĂ©roulante « Scan Type » lors de l’import. Ouvrez Import → Universal Parser dans la barre latĂ©rale pour voir tous vos Universal Parsers, puis dĂ©sactivez « Active ». (Vous pouvez Ă©galement modifier le Test_Type sous-jacent et dĂ©cocher « active ».) Les parseurs dĂ©sactivĂ©s n’apparaissent plus comme option de type d’analyse sur la page Add Findings, mais les Tests dĂ©jĂ  importĂ©s avec ce parseur ne sont pas affectĂ©s et continuent de fonctionner.
  • RĂ©activer un parseur depuis le mĂȘme Ă©cran en rĂ©activant « Active ».
  • Modifier les champs du Test_Type dĂ©crits dans la section ci-dessus (actif/inactif, static/dynamic, codes de hachage de dĂ©duplication).

Flux de travail recommandĂ© lorsque le format de rapport d’un scanner change

Étant donnĂ© que la configuration de mappage des champs est verrouillĂ©e une fois le parseur créé, le flux de travail standard pour gĂ©rer un changement de format dans le scanner sous-jacent consiste Ă  passer Ă  un nouveau parseur plutĂŽt que d’essayer de modifier l’ancien :

  1. CrĂ©ez un nouvel Universal Parser Ă  l’aide d’un Ă©chantillon du nouveau format de rapport (voir l’Ă©tape 1). Donnez-lui un nom distinct — par exemple en ajoutant v2 ou une date au nom d’origine.
  2. Basculez les nouveaux imports de votre pipeline CI/CD ou de votre flux de travail dans l’interface pour utiliser le type d’analyse du nouveau parseur.
  3. DĂ©sactivez l’ancien parseur une fois que vous avez confirmĂ© que le nouveau produit les constatations attendues. Les Tests dĂ©jĂ  importĂ©s avec l’ancien parseur restent dans DefectDojo et peuvent toujours ĂȘtre triĂ©s ; seuls les nouveaux imports sont dirigĂ©s vers le nouveau parseur.

Si vous avez besoin qu’une configuration de parseur soit dĂ©finitivement supprimĂ©e (par exemple parce qu’elle contient des noms de champs sensibles), contactez le .

Remarque sur le mappage des sévérités

Universal Parser ne dispose pas d’un champ de mappage de sĂ©vĂ©ritĂ© configurable. La sĂ©vĂ©ritĂ© est mappĂ©e automatiquement selon les rĂšgles suivantes :

  • Toute variation de casse d’une sĂ©vĂ©ritĂ© DefectDojo est acceptĂ©e — CRITICAL, Critical, cRiTiCaL, critical sont toutes mappĂ©es sur Critical. Il en va de mĂȘme pour High, Medium, Low et Info.
  • Toute valeur qui ne correspond Ă  aucune des cinq sĂ©vĂ©ritĂ©s de DefectDojo est mappĂ©e sur Info.

Ce comportement est identique pour tous les parseurs de DefectDojo (parseurs intégrés, Connectors et Universal Parsers).

Si un scanner que vous essayez d’ingĂ©rer utilise des libellĂ©s de sĂ©vĂ©ritĂ© qui ne correspondent pas Ă  ceux de DefectDojo (par exemple « warning », « note », ou des scores CVSS numĂ©riques), Universal Parser mappera toutes ces valeurs non correspondantes sur Info. Si vous avez besoin d’un mappage diffĂ©rent, la meilleure solution de contournement actuelle consiste Ă  transformer les valeurs de sĂ©vĂ©ritĂ© en amont — par exemple dans votre pipeline CI, avant le tĂ©lĂ©versement — afin que les valeurs reçues par DefectDojo correspondent dĂ©jĂ  Ă  l’un des cinq noms de sĂ©vĂ©ritĂ© DefectDojo.