feat(qualys): new Qualys VMDR vulnerability integration

Qualys API v2 (XML), 6 commands: host list, host detections, knowledge-base
vulnerability details, scan list, launch scan. HTTP Basic auth, stdlib-only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Guillaume BOURGEOIS
2026-07-11 23:59:38 +02:00
parent 847d18f79b
commit fcf30da5fc
7 changed files with 611 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
id: qualys
name: Qualys VMDR
version: 1.0.0
description: "Qualys Vulnerability Management (API v2) — asset and vulnerability context: list hosts, list host vulnerability detections, look up vulnerability (QID) knowledge-base details, and list/launch VM scans. HTTP Basic authentication; stdlib-only, no extra Python dependencies."
changelog: "1.0.0 — Initial release: host list, host detections, knowledge-base vulnerability details, scan list, launch scan."
category: vulnerability
# Per-instance configuration. HTTP Basic auth against the Qualys API server
# (regional, e.g. https://qualysapi.qg2.apps.qualys.com). All requests send the
# required 'X-Requested-With' header. Responses are XML.
config_schema:
properties:
base_url:
type: string
description: "Qualys API server URL (e.g. https://qualysapi.qualys.com)"
username:
type: string
description: "Qualys username"
password:
type: string
description: "Qualys password"
x-soar-sensitive: true
required:
- base_url
- username
- password
commands:
- id: host_list
name: qualys-host-list
description: "List scanned hosts (optionally filtered by IP range)."
risk: read
inputs_schema:
properties:
ips: { type: string, description: "Optional IP/range filter (e.g. 10.0.0.1-10.0.0.50)" }
truncation_limit: { type: number, description: "Max hosts (default 100)" }
required: []
outputs_schema: { properties: {} }
- id: host_detections
name: qualys-host-detections
description: "List vulnerability detections on hosts (optionally filtered by IP and severity)."
risk: read
inputs_schema:
properties:
ips: { type: string, description: "Optional IP/range filter" }
severities: { type: string, description: "Optional severity filter (e.g. 4,5)" }
truncation_limit: { type: number, description: "Max hosts (default 100)" }
required: []
outputs_schema: { properties: {} }
- id: vuln_details
name: qualys-vuln-details
description: "Get knowledge-base details for one or more vulnerabilities by QID."
risk: read
inputs_schema:
properties:
qids: { type: string, description: "Comma-separated QIDs" }
required: [qids]
outputs_schema: { properties: {} }
- id: list_scans
name: qualys-list-scans
description: "List VM scans."
risk: read
inputs_schema:
properties:
state: { type: string, description: "Optional state filter (Running, Finished, Canceled, ...)" }
required: []
outputs_schema: { properties: {} }
- id: launch_scan
name: qualys-launch-scan
description: "Launch a VM scan against a set of IPs."
inputs_schema:
properties:
scan_title: { type: string, description: "Title for the scan" }
ip: { type: string, description: "Comma-separated target IPs/ranges" }
option_title: { type: string, description: "Option profile title (provide this or option_id)" }
option_id: { type: string, description: "Option profile ID (provide this or option_title)" }
iscanner_name: { type: string, description: "Scanner appliance name (optional)" }
required: [ip]
outputs_schema: { properties: {} }
- id: test_connection
name: qualys-test-connection
description: "Verify connectivity and credentials (used by the Test button)."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }