Wiz Scanner Parser

The Wiz parser for DefectDojo supports imports from both Wiz Scanner Standard and SCA (Software Composition Analysis) .csv output from Wiz.io. This document details the parsing of both formats into DefectDojo field mappings, unmapped fields, and location of each field’s parsing code for easier troubleshooting and analysis.

โš ๏ธ DefectDojo Pro Users can also automatically create Findings directly from Wiz using the Wiz Connector. See our Connectors documentation for more details.

Supported File Types

The Wiz parser accepts CSV file format. There are two primary formats supported:

  1. Standard Format - Issues exports with “Title” field (processed by WizParserByTitle class)
  2. SCA Format - Vulnerability exports with “Name” and “DetailedName” fields (processed by WizParserByDetailedName class)

To generate these files, export the findings from the Wiz platform by:

  • Standard Format: Select “Export to CSV” option from the Issues view in the Wiz.io platform
  • SCA Format: Select “Export to CSV” option from the Vulnerability view in the Wiz.io platform

Sample Scan Data

Sample Wiz Scanner scans can be found in the sample scan data folder.

Default Deduplication Hashcode Fields

By default, DefectDojo identifies duplicate Findings using these hashcode fields:

  • title
  • description
  • severity

Mapped Fields Dictionary

Standard Format CSV

This format applies the WizParserByTitle parser class.

Total Fields in Standard Format CSV

  • Total data fields: 32
  • Total data fields parsed: 32
  • Total data fields NOT parsed: 0

Standard Format Field Mapping Details

CSV FieldFinding FieldParser Line #Notes
Created Atdate68Parsed using the parse_wiz_datetime function to convert to datetime object
Titletitle67Direct mapping to Finding title
Severityseverity69Converted to lowercase then capitalized to match DefectDojo’s severity format
Statusactive, is_mitigated, mitigated65Converted through WizcliParsers.convert_status function to determine active status and mitigation status
Descriptiondescription (partial)79-81Added to description with “Description:” prefix
Resource Typedescription (partial)79-81Added to description with “Resource Type:” prefix
Resource external IDdescription (partial)79-81Added to description with “Resource external ID:” prefix
Subscription IDdescription (partial)79-81Added to description with “Subscription ID:” prefix
Project IDsdescription (partial)79-81Added to description with “Project IDs:” prefix
Project Namesdescription (partial)79-81Added to description with “Project Names:” prefix
Resolved Timemitigated71-74Used to set mitigated timestamp if finding is marked as mitigated
Resolutionmitigation (partial)62-63Added to mitigation text with “Resolution:” prefix
Control IDdescription (partial)79-81Added to description with “Control ID:” prefix
Resource Namedescription (partial)79-81Added to description with “Resource Name:” prefix
Resource Regiondescription (partial)79-81Added to description with “Resource Region:” prefix
Resource Statusdescription (partial)79-81Added to description with “Resource Status:” prefix
Resource Platformdescription (partial)79-81Added to description with “Resource Platform:” prefix
Resource OSdescription (partial)79-81Added to description with “Resource OS:” prefix
Resource original JSONdescription (partial)79-81Added to description with “Resource original JSON:” prefix
Issue IDunique_id_from_tool85Used as unique identifier for the finding
Resource vertex IDdescription (partial)79-81Added to description with “Resource vertex ID:” prefix
Ticket URLsdescription (partial)79-81Added to description with “Ticket URLs:” prefix
Notedescription (partial)79-81Added to description with “Note:” prefix
Due Atdescription (partial)79-81Added to description with “Due At:” prefix
Remediation Recommendationmitigation61Direct mapping to mitigation field
Subscription Namedescription (partial)79-81Added to description with “Subscription Name:” prefix
Wiz URLdescription (partial)79-81Added to description with “Wiz URL:” prefix
Cloud Provider URLdescription (partial)79-81Added to description with “Cloud Provider URL:” prefix
Resource Tagsdescription (partial)79-81Added to description with “Resource Tags:” prefix
Kubernetes Clusterdescription (partial)79-81Added to description with “Kubernetes Cluster:” prefix
Kubernetes Namespacedescription (partial)79-81Added to description with “Kubernetes Namespace:” prefix
Container Servicedescription (partial)79-81Added to description with “Container Service:” prefix

Additional Finding Field Settings (Standard Format)

Finding FieldDefault ValueParser Line #Notes
static_findingFalse84Set to False for all findings
dynamic_findingTrue84Set to True for all findings

SCA Format

This format applies the WizParserByDetailedName parser class.

Total Fields in SCA CSV

  • Total data fields: 41
  • Total data fields parsed: 36
  • Total data fields NOT parsed: 5

SCA Format Field Mapping Details

CSV FieldFinding FieldParser Line #Notes
IDunique_id_from_tool182Used as unique identifier for the finding
WizURLdescription150-154Added to description with “Wiz URL” prefix
Nametitle, vulnerability_ids169, 182-184Used in title format as vulnerability ID and added to vulnerability_ids list
CVSSSeverityNot parsed-Not used in mapping
HasExploitdescription150-154Added to description with “Has Exploit” prefix
HasCisaKevExploitdescription150-154Added to description with “Has Cisa Kev Exploit” prefix
FindingStatusactive, is_mitigated180Mapped through convert_status function to determine active state
VendorSeverityseverity181Mapped through _validate_severities to convert to DefectDojo severity format
FirstDetecteddate185Parsed into date object using date_parser
LastDetectedNot parsed-Not used in mapping
ResolvedAtNot parsed-Not used in mapping
ResolutionReasonNot parsed-Not used in mapping
Remediationmitigation155-159Added to mitigation with “Remediation” prefix
LocationPathdescription, mitigation150-159Added to both description and mitigation with “Location Path” prefix
DetailedNametitle, component_name169, 183Used in title format and mapped to component_name
Versiondescription, component_version150-154, 184Added to description with “Version” prefix and mapped to component_version
FixedVersionmitigation155-159Added to mitigation with “Fixed Version” prefix
DetectionMethoddescription150-154Added to description with “Detection Method” prefix
Linkdescription150-154Added to description with “Link” prefix
Projectsdescription150-154Added to description with “Projects” prefix
AssetIDdescription150-154Added to description with “Asset ID” prefix
AssetNamedescription150-154Added to description with “Asset Name” prefix
AssetRegiondescription150-154Added to description with “Asset Region” prefix
ProviderUniqueIddescription150-154Added to description with “Provider Unique Id” prefix
CloudProviderURLdescription150-154Added to description with “Cloud Provider URL” prefix
CloudPlatformdescription150-154Added to description with “Cloud Platform” prefix
StatusNot parsed-Not directly used (FindingStatus is used instead)
SubscriptionExternalIddescription150-154Added to description with “Subscription External Id” prefix
SubscriptionIddescription150-154Added to description with “Subscription Id” prefix
SubscriptionNamedescription150-154Added to description with “Subscription Name” prefix
Tagsunsaved_tags186Parsed into tags list using _parse_tags function
ExecutionControllersdescription150-154Added to description with “Execution Controllers” prefix
ExecutionControllersSubscriptionExternalIdsdescription150-154Added to description with “Execution Controllers Subscription External Ids” prefix
ExecutionControllersSubscriptionNamesdescription150-154Added to description with “Execution Controllers Subscription Names” prefix
CriticalRelatedIssuesCountNot parsed-Not used in mapping
HighRelatedIssuesCountNot parsed-Not used in mapping
MediumRelatedIssuesCountNot parsed-Not used in mapping
LowRelatedIssuesCountNot parsed-Not used in mapping
InfoRelatedIssuesCountNot parsed-Not used in mapping
OperatingSystemdescription150-154Added to description with “Operating System” prefix
IpAddressesdescription150-154Added to description with “Ip Addresses” prefix

Additional Finding Field Settings (SCA Format)

Finding FieldDefault ValueParser Line #Notes
static_findingTrue182Set to True for SCA format findings
Severity“Info”210Default if not a valid severity

Special Processing Notes

Date Processing

  • Parser uses function parse_wiz_datetime() (lines 207-246) to handle different date formats from Wiz
  • Handles both ISO8601 and custom Wiz timestamp formats

Status Conversion

  • Both parser formats use WizcliParsers.convert_status() function to determine finding status (active, mitigated, etc.)
  • Standard format - if a finding is mitigated, the Resolved Time is used as the mitigated timestamp

Description Construction

  • Most CSV fields maintain field name as a prefix when added to the Finding description
  • Description generated by iterating through predefined list of fields and adding data if present

Title Format

  • Standard format: Used directly from the “Title” field
  • SCA format: Combines package name (DetailedName) and vulnerability ID (Name) in format “{package_name}: {vulnerability_id}”

Mitigation Construction

  • Standard format: Primary source is “Remediation Recommendation” field with optional “Resolution” field
  • SCA format: Combines “Remediation”, “LocationPath”, and “FixedVersion” fields

Deduplication

  • Both formats use the respective ID field as the unique_id_from_tool for deduplication

Tags Handling (SCA Format)

  • “Tags” field is parsed from a JSON string format into a list of tag strings in format “key: value” (lines 186, 193-201)

Source Code

Source code for the Wiz parser can be found on GitHub.