Import security vulnerabilities

Note: This endpoint is in preview and is subject to change. If you have any feedback, contact Datadog support.

POST https://api.ap1.datadoghq.com/api/v2/security/vulnerabilitieshttps://api.ap2.datadoghq.com/api/v2/security/vulnerabilitieshttps://api.datadoghq.eu/api/v2/security/vulnerabilitieshttps://api.ddog-gov.com/api/v2/security/vulnerabilitieshttps://api.us2.ddog-gov.com/api/v2/security/vulnerabilitieshttps://api.uk1.datadoghq.com/api/v2/security/vulnerabilitieshttps://api.datadoghq.com/api/v2/security/vulnerabilitieshttps://api.us3.datadoghq.com/api/v2/security/vulnerabilitieshttps://api.us5.datadoghq.com/api/v2/security/vulnerabilities

Overview

Import security vulnerabilities from an external scanner in CycloneDX 1.5 format.

The payload is validated against the CycloneDX 1.5 JSON schema and the following additional constraints:

  • metadata, metadata.component, and metadata.component.name are required.
  • metadata.tools.components must contain exactly one element with a name field.
  • components cannot be empty. Each component requires bom-ref, type, name, and version.
  • When type is library, purl is required and must be a valid PURL.
  • When type is operating-system, name must be one of the supported OS values: alma, alpine, amazon, azurelinux, bottlerocket, cbl-mariner, chainguard, centos, debian, fedora, opensuse, opensuse-leap, opensuse-tumbleweed, oracle, photon, redhat, rocky, slem, sles, ubuntu, wolfi, windows, macos.
  • vulnerabilities cannot be empty. Each vulnerability requires id, exactly one ratings entry, and at least one affects entry.
  • Each affects[].ref must match a bom-ref value in components.
This endpoint requires the security_monitoring_findings_write permission.

OAuth apps require the security_monitoring_findings_write authorization scope to access this endpoint.

Request

Body Data (required)

Expand All

Field

Type

Description

bomFormat [required]

string

The BOM format identifier. Must be CycloneDX.

components [required]

[object]

The list of scanned software components. Cannot be empty.

bom-ref [required]

string

A unique reference identifier used to link vulnerabilities to this component.

name [required]

string

The name of the component.

purl

string

The Package URL (PURL) of the component. Required when type is library.

type [required]

enum

The type of the scanned component. Allowed enum values: library,application,operating-system

version [required]

string

The version of the component.

metadata [required]

object

Metadata about the BOM, including the scanned asset and the scanner tool.

component [required]

object

The asset that was scanned (for example, a host or container image).

bom-ref

string

A unique reference identifier for this metadata component. If set, must match a bom-ref in components.

name [required]

string

The name or identifier of the scanned asset (for example, an instance ID or hostname).

type

string

The type of the scanned asset.

tools [required]

object

Information about the scanner tool that produced this BOM.

components [required]

[object]

The scanner tool components. Must contain exactly one element.

name [required]

string

The name of the scanner tool.

type

string

The type of the tool component.

specVersion [required]

string

The CycloneDX specification version. Must be 1.5.

version

int64

The version number of the BOM document.

vulnerabilities [required]

[object]

The list of detected vulnerabilities. Cannot be empty.

advisories

[object]

External advisory references for the vulnerability.

url

string

The URL of the advisory.

affects [required]

[object]

The components affected by this vulnerability. Must be non-empty. Each ref must match a bom-ref in components.

ref [required]

string

The bom-ref of the affected component.

analysis

object

The exploitability analysis for the vulnerability. When state is set to resolved or resolved_with_pedigree, the vulnerability is closed in Datadog. Other state values are accepted but have no effect on the vulnerability status.

state

string

The vulnerability analysis state.

cwes

[integer]

CWE identifiers associated with the vulnerability.

description

string

A short description of the vulnerability.

detail

string

Detailed information about the vulnerability.

id [required]

string

The vulnerability identifier (for example, a CVE ID).

ratings [required]

[object]

The severity ratings for the vulnerability. Must contain exactly one element.

score

double

The CVSS score.

severity

string

The severity level.

vector

string

The CVSS vector string.

references

[object]

External reference identifiers for the vulnerability.

id

string

The identifier of the external reference (for example, a GHSA ID).

source

object

The source of an external vulnerability reference.

url

string

The URL of the reference source.

{
  "bomFormat": "CycloneDX",
  "components": [
    {
      "bom-ref": "a3390fca-c315-41ae-ae05-af5e7859cdee",
      "name": "lodash",
      "purl": "pkg:npm/lodash@4.17.21",
      "type": "library",
      "version": "4.17.21"
    }
  ],
  "metadata": {
    "component": {
      "bom-ref": "host-ref-abc123",
      "name": "i-12345",
      "type": "operating-system"
    },
    "tools": {
      "components": [
        {
          "name": "my-scanner",
          "type": "application"
        }
      ]
    }
  },
  "specVersion": "1.5",
  "version": 1,
  "vulnerabilities": [
    {
      "advisories": [
        {
          "url": "https://example.com/advisory/CVE-2021-1234"
        }
      ],
      "affects": [
        {
          "ref": "a3390fca-c315-41ae-ae05-af5e7859cdee"
        }
      ],
      "analysis": {
        "state": "resolved"
      },
      "cwes": [
        123,
        345
      ],
      "description": "Sample vulnerability detected in the application.",
      "detail": "Details about the vulnerability.",
      "id": "CVE-2021-1234",
      "ratings": [
        {
          "score": 9,
          "severity": "high",
          "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N"
        }
      ],
      "references": [
        {
          "id": "GHSA-35m5-8cvj-8783",
          "source": {
            "url": "https://example.com"
          }
        }
      ]
    }
  ]
}

Response

Vulnerabilities accepted successfully.

Bad Request

API error response.

Expand All

Field

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Forbidden

API error response.

Expand All

Field

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Too many requests

API error response.

Expand All

Field

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Internal Server Error

API error response.

Expand All

Field

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Code Example

                  ## default
# 

# Curl command
curl -X POST "https://api.ap1.datadoghq.com"https://api.ap2.datadoghq.com"https://api.datadoghq.eu"https://api.ddog-gov.com"https://api.us2.ddog-gov.com"https://api.uk1.datadoghq.com"https://api.datadoghq.com"https://api.us3.datadoghq.com"https://api.us5.datadoghq.com/api/v2/security/vulnerabilities" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \ -d @- << EOF { "bomFormat": "CycloneDX", "components": [ { "bom-ref": "a3390fca-c315-41ae-ae05-af5e7859cdee", "name": "lodash", "purl": "pkg:npm/lodash@4.17.21", "type": "library", "version": "4.17.21" } ], "metadata": { "component": { "name": "i-12345", "type": "operating-system" }, "tools": { "components": [ { "name": "my-scanner", "type": "application" } ] } }, "specVersion": "1.5", "version": 1, "vulnerabilities": [ { "affects": [ { "ref": "a3390fca-c315-41ae-ae05-af5e7859cdee" } ], "description": "Sample vulnerability detected in the application.", "id": "CVE-2021-1234", "ratings": [ { "score": 9, "severity": "high", "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N" } ] } ] } EOF
"""
Import security vulnerabilities returns "Vulnerabilities accepted successfully." response
"""

from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi
from datadog_api_client.v2.model.cyclone_dx_bom import CycloneDXBom
from datadog_api_client.v2.model.cyclone_dx_component import CycloneDXComponent
from datadog_api_client.v2.model.cyclone_dx_component_type import CycloneDXComponentType
from datadog_api_client.v2.model.cyclone_dx_metadata import CycloneDXMetadata
from datadog_api_client.v2.model.cyclone_dx_metadata_component import CycloneDXMetadataComponent
from datadog_api_client.v2.model.cyclone_dx_metadata_tools import CycloneDXMetadataTools
from datadog_api_client.v2.model.cyclone_dx_tool_component import CycloneDXToolComponent
from datadog_api_client.v2.model.cyclone_dx_vulnerability import CycloneDXVulnerability
from datadog_api_client.v2.model.cyclone_dx_vulnerability_advisory import CycloneDXVulnerabilityAdvisory
from datadog_api_client.v2.model.cyclone_dx_vulnerability_affects import CycloneDXVulnerabilityAffects
from datadog_api_client.v2.model.cyclone_dx_vulnerability_analysis import CycloneDXVulnerabilityAnalysis
from datadog_api_client.v2.model.cyclone_dx_vulnerability_rating import CycloneDXVulnerabilityRating
from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference import CycloneDXVulnerabilityReference
from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference_source import CycloneDXVulnerabilityReferenceSource

body = CycloneDXBom(
    bom_format="CycloneDX",
    components=[
        CycloneDXComponent(
            bom_ref="a3390fca-c315-41ae-ae05-af5e7859cdee",
            name="lodash",
            purl="pkg:npm/lodash@4.17.21",
            type=CycloneDXComponentType.LIBRARY,
            version="4.17.21",
        ),
    ],
    metadata=CycloneDXMetadata(
        component=CycloneDXMetadataComponent(
            bom_ref="host-ref-abc123",
            name="i-12345",
            type="operating-system",
        ),
        tools=CycloneDXMetadataTools(
            components=[
                CycloneDXToolComponent(
                    name="my-scanner",
                    type="application",
                ),
            ],
        ),
    ),
    spec_version="1.5",
    version=1,
    vulnerabilities=[
        CycloneDXVulnerability(
            advisories=[
                CycloneDXVulnerabilityAdvisory(
                    url="https://example.com/advisory/CVE-2021-1234",
                ),
            ],
            affects=[
                CycloneDXVulnerabilityAffects(
                    ref="a3390fca-c315-41ae-ae05-af5e7859cdee",
                ),
            ],
            analysis=CycloneDXVulnerabilityAnalysis(
                state="resolved",
            ),
            cwes=[
                123,
                345,
            ],
            description="Sample vulnerability detected in the application.",
            detail="Details about the vulnerability.",
            id="CVE-2021-1234",
            ratings=[
                CycloneDXVulnerabilityRating(
                    score=9.0,
                    severity="high",
                    vector="CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N",
                ),
            ],
            references=[
                CycloneDXVulnerabilityReference(
                    id="GHSA-35m5-8cvj-8783",
                    source=CycloneDXVulnerabilityReferenceSource(
                        url="https://example.com",
                    ),
                ),
            ],
        ),
    ],
)

configuration = Configuration()
configuration.unstable_operations["import_security_vulnerabilities"] = True
with ApiClient(configuration) as api_client:
    api_instance = SecurityMonitoringApi(api_client)
    api_instance.import_security_vulnerabilities(body=body)

Instructions

First install the library and its dependencies and then save the example to example.py and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" python3 "example.py"
# Import security vulnerabilities returns "Vulnerabilities accepted successfully." response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.unstable_operations["v2.import_security_vulnerabilities".to_sym] = true
end
api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new

body = DatadogAPIClient::V2::CycloneDXBom.new({
  bom_format: "CycloneDX",
  components: [
    DatadogAPIClient::V2::CycloneDXComponent.new({
      bom_ref: "a3390fca-c315-41ae-ae05-af5e7859cdee",
      name: "lodash",
      purl: "pkg:npm/lodash@4.17.21",
      type: DatadogAPIClient::V2::CycloneDXComponentType::LIBRARY,
      version: "4.17.21",
    }),
  ],
  metadata: DatadogAPIClient::V2::CycloneDXMetadata.new({
    component: DatadogAPIClient::V2::CycloneDXMetadataComponent.new({
      bom_ref: "host-ref-abc123",
      name: "i-12345",
      type: "operating-system",
    }),
    tools: DatadogAPIClient::V2::CycloneDXMetadataTools.new({
      components: [
        DatadogAPIClient::V2::CycloneDXToolComponent.new({
          name: "my-scanner",
          type: "application",
        }),
      ],
    }),
  }),
  spec_version: "1.5",
  version: 1,
  vulnerabilities: [
    DatadogAPIClient::V2::CycloneDXVulnerability.new({
      advisories: [
        DatadogAPIClient::V2::CycloneDXVulnerabilityAdvisory.new({
          url: "https://example.com/advisory/CVE-2021-1234",
        }),
      ],
      affects: [
        DatadogAPIClient::V2::CycloneDXVulnerabilityAffects.new({
          ref: "a3390fca-c315-41ae-ae05-af5e7859cdee",
        }),
      ],
      analysis: DatadogAPIClient::V2::CycloneDXVulnerabilityAnalysis.new({
        state: "resolved",
      }),
      cwes: [
        123,
        345,
      ],
      description: "Sample vulnerability detected in the application.",
      detail: "Details about the vulnerability.",
      id: "CVE-2021-1234",
      ratings: [
        DatadogAPIClient::V2::CycloneDXVulnerabilityRating.new({
          score: 9.0,
          severity: "high",
          vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N",
        }),
      ],
      references: [
        DatadogAPIClient::V2::CycloneDXVulnerabilityReference.new({
          id: "GHSA-35m5-8cvj-8783",
          source: DatadogAPIClient::V2::CycloneDXVulnerabilityReferenceSource.new({
            url: "https://example.com",
          }),
        }),
      ],
    }),
  ],
})
p api_instance.import_security_vulnerabilities(body)

Instructions

First install the library and its dependencies and then save the example to example.rb and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" rb "example.rb"
// Import security vulnerabilities returns "Vulnerabilities accepted successfully." response

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
	"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)

func main() {
	body := datadogV2.CycloneDXBom{
		BomFormat: "CycloneDX",
		Components: []datadogV2.CycloneDXComponent{
			{
				BomRef:  "a3390fca-c315-41ae-ae05-af5e7859cdee",
				Name:    "lodash",
				Purl:    datadog.PtrString("pkg:npm/lodash@4.17.21"),
				Type:    datadogV2.CYCLONEDXCOMPONENTTYPE_LIBRARY,
				Version: "4.17.21",
			},
		},
		Metadata: datadogV2.CycloneDXMetadata{
			Component: datadogV2.CycloneDXMetadataComponent{
				BomRef: datadog.PtrString("host-ref-abc123"),
				Name:   "i-12345",
				Type:   datadog.PtrString("operating-system"),
			},
			Tools: datadogV2.CycloneDXMetadataTools{
				Components: []datadogV2.CycloneDXToolComponent{
					{
						Name: "my-scanner",
						Type: datadog.PtrString("application"),
					},
				},
			},
		},
		SpecVersion: "1.5",
		Version:     datadog.PtrInt64(1),
		Vulnerabilities: []datadogV2.CycloneDXVulnerability{
			{
				Advisories: []datadogV2.CycloneDXVulnerabilityAdvisory{
					{
						Url: datadog.PtrString("https://example.com/advisory/CVE-2021-1234"),
					},
				},
				Affects: []datadogV2.CycloneDXVulnerabilityAffects{
					{
						Ref: "a3390fca-c315-41ae-ae05-af5e7859cdee",
					},
				},
				Analysis: &datadogV2.CycloneDXVulnerabilityAnalysis{
					State: datadog.PtrString("resolved"),
				},
				Cwes: []int64{
					123,
					345,
				},
				Description: datadog.PtrString("Sample vulnerability detected in the application."),
				Detail:      datadog.PtrString("Details about the vulnerability."),
				Id:          "CVE-2021-1234",
				Ratings: []datadogV2.CycloneDXVulnerabilityRating{
					{
						Score:    datadog.PtrFloat64(9.0),
						Severity: datadog.PtrString("high"),
						Vector:   datadog.PtrString("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N"),
					},
				},
				References: []datadogV2.CycloneDXVulnerabilityReference{
					{
						Id: datadog.PtrString("GHSA-35m5-8cvj-8783"),
						Source: &datadogV2.CycloneDXVulnerabilityReferenceSource{
							Url: datadog.PtrString("https://example.com"),
						},
					},
				},
			},
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	configuration.SetUnstableOperationEnabled("v2.ImportSecurityVulnerabilities", true)
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewSecurityMonitoringApi(apiClient)
	r, err := api.ImportSecurityVulnerabilities(ctx, body)

	if err != nil {
		fmt.Fprintf(os.Stderr, "Error when calling `SecurityMonitoringApi.ImportSecurityVulnerabilities`: %v\n", err)
		fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
	}
}

Instructions

First install the library and its dependencies and then save the example to main.go and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" go run "main.go"
// Import security vulnerabilities returns "Vulnerabilities accepted successfully." response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.SecurityMonitoringApi;
import com.datadog.api.client.v2.model.CycloneDXBom;
import com.datadog.api.client.v2.model.CycloneDXComponent;
import com.datadog.api.client.v2.model.CycloneDXComponentType;
import com.datadog.api.client.v2.model.CycloneDXMetadata;
import com.datadog.api.client.v2.model.CycloneDXMetadataComponent;
import com.datadog.api.client.v2.model.CycloneDXMetadataTools;
import com.datadog.api.client.v2.model.CycloneDXToolComponent;
import com.datadog.api.client.v2.model.CycloneDXVulnerability;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityAdvisory;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityAffects;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityAnalysis;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityRating;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityReference;
import com.datadog.api.client.v2.model.CycloneDXVulnerabilityReferenceSource;
import java.util.Arrays;
import java.util.Collections;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setUnstableOperationEnabled("v2.importSecurityVulnerabilities", true);
    SecurityMonitoringApi apiInstance = new SecurityMonitoringApi(defaultClient);

    CycloneDXBom body =
        new CycloneDXBom()
            .bomFormat("CycloneDX")
            .components(
                Collections.singletonList(
                    new CycloneDXComponent()
                        .bomRef("a3390fca-c315-41ae-ae05-af5e7859cdee")
                        .name("lodash")
                        .purl("pkg:npm/lodash@4.17.21")
                        .type(CycloneDXComponentType.LIBRARY)
                        .version("4.17.21")))
            .metadata(
                new CycloneDXMetadata()
                    .component(
                        new CycloneDXMetadataComponent()
                            .bomRef("host-ref-abc123")
                            .name("i-12345")
                            .type("operating-system"))
                    .tools(
                        new CycloneDXMetadataTools()
                            .components(
                                Collections.singletonList(
                                    new CycloneDXToolComponent()
                                        .name("my-scanner")
                                        .type("application")))))
            .specVersion("1.5")
            .version(1L)
            .vulnerabilities(
                Collections.singletonList(
                    new CycloneDXVulnerability()
                        .advisories(
                            Collections.singletonList(
                                new CycloneDXVulnerabilityAdvisory()
                                    .url("https://example.com/advisory/CVE-2021-1234")))
                        .affects(
                            Collections.singletonList(
                                new CycloneDXVulnerabilityAffects()
                                    .ref("a3390fca-c315-41ae-ae05-af5e7859cdee")))
                        .analysis(new CycloneDXVulnerabilityAnalysis().state("resolved"))
                        .cwes(Arrays.asList(123L, 345L))
                        .description("Sample vulnerability detected in the application.")
                        .detail("Details about the vulnerability.")
                        .id("CVE-2021-1234")
                        .ratings(
                            Collections.singletonList(
                                new CycloneDXVulnerabilityRating()
                                    .score(9.0)
                                    .severity("high")
                                    .vector("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N")))
                        .references(
                            Collections.singletonList(
                                new CycloneDXVulnerabilityReference()
                                    .id("GHSA-35m5-8cvj-8783")
                                    .source(
                                        new CycloneDXVulnerabilityReferenceSource()
                                            .url("https://example.com"))))));

    try {
      apiInstance.importSecurityVulnerabilities(body);
    } catch (ApiException e) {
      System.err.println(
          "Exception when calling SecurityMonitoringApi#importSecurityVulnerabilities");
      System.err.println("Status code: " + e.getCode());
      System.err.println("Reason: " + e.getResponseBody());
      System.err.println("Response headers: " + e.getResponseHeaders());
      e.printStackTrace();
    }
  }
}

Instructions

First install the library and its dependencies and then save the example to Example.java and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" java "Example.java"
// Import security vulnerabilities returns "Vulnerabilities accepted
// successfully." response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_security_monitoring::SecurityMonitoringAPI;
use datadog_api_client::datadogV2::model::CycloneDXBom;
use datadog_api_client::datadogV2::model::CycloneDXComponent;
use datadog_api_client::datadogV2::model::CycloneDXComponentType;
use datadog_api_client::datadogV2::model::CycloneDXMetadata;
use datadog_api_client::datadogV2::model::CycloneDXMetadataComponent;
use datadog_api_client::datadogV2::model::CycloneDXMetadataTools;
use datadog_api_client::datadogV2::model::CycloneDXToolComponent;
use datadog_api_client::datadogV2::model::CycloneDXVulnerability;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityAdvisory;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityAffects;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityAnalysis;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityRating;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityReference;
use datadog_api_client::datadogV2::model::CycloneDXVulnerabilityReferenceSource;

#[tokio::main]
async fn main() {
    let body = CycloneDXBom::new(
        "CycloneDX".to_string(),
        vec![CycloneDXComponent::new(
            "a3390fca-c315-41ae-ae05-af5e7859cdee".to_string(),
            "lodash".to_string(),
            CycloneDXComponentType::LIBRARY,
            "4.17.21".to_string(),
        )
        .purl("pkg:npm/lodash@4.17.21".to_string())],
        CycloneDXMetadata::new(
            CycloneDXMetadataComponent::new("i-12345".to_string())
                .bom_ref("host-ref-abc123".to_string())
                .type_("operating-system".to_string()),
            CycloneDXMetadataTools::new(vec![CycloneDXToolComponent::new(
                "my-scanner".to_string(),
            )
            .type_("application".to_string())]),
        ),
        "1.5".to_string(),
        vec![CycloneDXVulnerability::new(
            vec![CycloneDXVulnerabilityAffects::new(
                "a3390fca-c315-41ae-ae05-af5e7859cdee".to_string(),
            )],
            "CVE-2021-1234".to_string(),
            vec![CycloneDXVulnerabilityRating::new()
                .score(9.0 as f64)
                .severity("high".to_string())
                .vector("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N".to_string())],
        )
        .advisories(vec![CycloneDXVulnerabilityAdvisory::new()
            .url("https://example.com/advisory/CVE-2021-1234".to_string())])
        .analysis(CycloneDXVulnerabilityAnalysis::new().state("resolved".to_string()))
        .cwes(vec![123, 345])
        .description("Sample vulnerability detected in the application.".to_string())
        .detail("Details about the vulnerability.".to_string())
        .references(vec![CycloneDXVulnerabilityReference::new()
            .id("GHSA-35m5-8cvj-8783".to_string())
            .source(
                CycloneDXVulnerabilityReferenceSource::new().url("https://example.com".to_string()),
            )])],
    )
    .version(1);
    let mut configuration = datadog::Configuration::new();
    configuration.set_unstable_operation_enabled("v2.ImportSecurityVulnerabilities", true);
    let api = SecurityMonitoringAPI::with_config(configuration);
    let resp = api.import_security_vulnerabilities(body).await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}

Instructions

First install the library and its dependencies and then save the example to src/main.rs and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" cargo run
/**
 * Import security vulnerabilities returns "Vulnerabilities accepted successfully." response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
configuration.unstableOperations["v2.importSecurityVulnerabilities"] = true;
const apiInstance = new v2.SecurityMonitoringApi(configuration);

const params: v2.SecurityMonitoringApiImportSecurityVulnerabilitiesRequest = {
  body: {
    bomFormat: "CycloneDX",
    components: [
      {
        bomRef: "a3390fca-c315-41ae-ae05-af5e7859cdee",
        name: "lodash",
        purl: "pkg:npm/lodash@4.17.21",
        type: "library",
        version: "4.17.21",
      },
    ],
    metadata: {
      component: {
        bomRef: "host-ref-abc123",
        name: "i-12345",
        type: "operating-system",
      },
      tools: {
        components: [
          {
            name: "my-scanner",
            type: "application",
          },
        ],
      },
    },
    specVersion: "1.5",
    version: 1,
    vulnerabilities: [
      {
        advisories: [
          {
            url: "https://example.com/advisory/CVE-2021-1234",
          },
        ],
        affects: [
          {
            ref: "a3390fca-c315-41ae-ae05-af5e7859cdee",
          },
        ],
        analysis: {
          state: "resolved",
        },
        cwes: [123, 345],
        description: "Sample vulnerability detected in the application.",
        detail: "Details about the vulnerability.",
        id: "CVE-2021-1234",
        ratings: [
          {
            score: 9.0,
            severity: "high",
            vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N",
          },
        ],
        references: [
          {
            id: "GHSA-35m5-8cvj-8783",
            source: {
              url: "https://example.com",
            },
          },
        ],
      },
    ],
  },
};

apiInstance
  .importSecurityVulnerabilities(params)
  .then((data: any) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"