Shodan · Arazzo Workflow

Shodan CVEDB Product Vulnerability Enrichment

Version 1.0.0

Resolve a product to a CPE, search its CVEs, then pull full CVE details.

1 workflow 1 source API 1 provider
View Spec View on GitHub SecuritySearchInternetDevicesIoTVulnerabilitiesCVEAttack SurfaceThreat IntelligenceReconnaissanceNetworkDNSScanningPublic APIsArazzoWorkflows

Provider

shodan

Workflows

cve-enrichment
Enumerate CPEs and CVEs for a product and detail the top CVE.
Searches the CPE dictionary for a product, searches the CVE catalog for that product ordered by EPSS, and retrieves the full details for the top CVE.
3 steps inputs: cveId, isKev, product outputs: cpes, cvss, kev, topCveId
1
searchCpes
searchCpes
Retrieve the CPE 2.3 dictionary entries matching the product.
2
searchCves
searchCves
Search the CVE catalog for vulnerabilities affecting the product, ordered by EPSS so the most likely to be exploited surface first.
3
cveDetails
getCve
Retrieve the full record for the chosen CVE, including CVSS, EPSS, KEV status, references, and impacted CPEs.

Source API Descriptions

Arazzo Workflow Specification

shodan-cve-enrichment-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Shodan CVEDB Product Vulnerability Enrichment
  summary: Resolve a product to a CPE, search its CVEs, then pull full CVE details.
  description: >-
    A vulnerability research pattern over the free CVEDB. The workflow looks up
    the CPE 2.3 dictionary entries for a product, searches the CVE catalog for
    vulnerabilities affecting that product ordered by exploitation likelihood,
    and then retrieves the full record for the top CVE. CVEDB is unauthenticated
    so no API key is required. Every step spells out its request inline so the
    flow can be read and executed without opening the underlying OpenAPI
    description.
  version: 1.0.0
sourceDescriptions:
- name: shodanCvedb
  url: ../openapi/shodan-cvedb-openapi.yml
  type: openapi
workflows:
- workflowId: cve-enrichment
  summary: Enumerate CPEs and CVEs for a product and detail the top CVE.
  description: >-
    Searches the CPE dictionary for a product, searches the CVE catalog for that
    product ordered by EPSS, and retrieves the full details for the top CVE.
  inputs:
    type: object
    required:
    - product
    properties:
      product:
        type: string
        description: The product name to research (e.g. "nginx").
      isKev:
        type: boolean
        description: Restrict CVE results to CISA Known Exploited Vulnerabilities.
        default: false
      cveId:
        type: string
        description: >-
          The CVE identifier to detail. CVEDB search returns a list keyed by
          position, so the chosen CVE id is carried forward through this input
          for the detail lookup.
  steps:
  - stepId: searchCpes
    description: >-
      Retrieve the CPE 2.3 dictionary entries matching the product.
    operationId: searchCpes
    parameters:
    - name: product
      in: query
      value: $inputs.product
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      cpes: $response.body#/cpes
  - stepId: searchCves
    description: >-
      Search the CVE catalog for vulnerabilities affecting the product, ordered
      by EPSS so the most likely to be exploited surface first.
    operationId: searchCves
    parameters:
    - name: product
      in: query
      value: $inputs.product
    - name: is_kev
      in: query
      value: $inputs.isKev
    - name: sort_by_epss
      in: query
      value: true
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      cves: $response.body#/cves
      topCveId: $response.body#/cves/0/cve_id
  - stepId: cveDetails
    description: >-
      Retrieve the full record for the chosen CVE, including CVSS, EPSS, KEV
      status, references, and impacted CPEs.
    operationId: getCve
    parameters:
    - name: cveId
      in: path
      value: $inputs.cveId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      summary: $response.body#/summary
      cvss: $response.body#/cvss
      epss: $response.body#/epss
      kev: $response.body#/kev
  outputs:
    cpes: $steps.searchCpes.outputs.cpes
    topCveId: $steps.searchCves.outputs.topCveId
    cvss: $steps.cveDetails.outputs.cvss
    kev: $steps.cveDetails.outputs.kev