Files
riposte-marketplace/integrations/sekoia-xdr/manifest.yaml
T
Guillaume BOURGEOIS ef215daa88 feat(sekoia): Sekoia XDR + SEKOIA Intelligence Center integrations
Sekoia XDR (siem): alert ingestion (list_alerts) with an exhaustive OCSF mapper
and a bundled 'Sekoia XDR Alert' default type, plus 20 commands across alerts
(list/get/search, status workflow, comments), event search jobs (create/status/
results + one-shot search_events), cases, asset management, users, kill chains
and a generic authenticated HTTP passthrough. Bearer-token auth, EU host default.

SEKOIA Intelligence Center (enrichment): observable/indicator/indicator-context
CTI queries plus ip/url/domain/file/email reputation lookups (STIX type resolved
automatically). No fetch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 15:04:22 +02:00

280 lines
12 KiB
YAML

id: sekoia_xdr
name: Sekoia XDR
version: 1.0.0
description: "Sekoia Defend (XDR) REST API — alert ingestion and lifecycle (list/get/search, status workflow, comments), event search jobs (create/status/results + one-shot search), cases, asset management (get/list, attributes/keys add/remove), users, kill chains and a generic authenticated HTTP passthrough."
changelog: "1.0.0 — Initial release: alert ingestion (list_alerts) with an exhaustive OCSF mapper, 20 commands across alerts, event search, cases, assets, users and kill chains."
category: siem
# Per-instance configuration. The API host defaults to the EU region; an
# Organization API key is sent as a Bearer token.
config_schema:
properties:
url:
type: string
description: "Sekoia API base URL, e.g. https://api.sekoia.io"
default: https://api.sekoia.io
api_key:
type: string
description: "Sekoia API key (Bearer token)"
x-soar-sensitive: true
required:
- url
- api_key
auth:
- id: bearer
type: api_key
in: header
name: Authorization
value_template: "Bearer {{secret}}"
secret_field: api_key
commands:
# ── Ingestion ───────────────────────────────────────────────────────────────
- id: list_alerts
name: sekoia-xdr-list-alerts
description: "List alerts, sorted by created_at. Used for ingestion: results path = items. Alerts aggregate the matching events and are tied to rules and a kill chain."
risk: read
inputs_schema:
properties:
limit: { type: number, description: "Number of alerts to return (1-100, default 20)" }
status: { type: string, description: "Comma-separated statuses to include (Pending, Acknowledged, Ongoing, Rejected, Closed)" }
created_at: { type: string, description: "Filter by creation date. A bare date is treated as the lower bound ('<date>,now'); a range '<start>,<end>' is passed through. Incremental fetch watermark." }
updated_at: { type: string, description: "Filter by update date, same format as created_at" }
urgency: { type: string, description: "Urgency range 'MIN,MAX' (e.g. 80,100)" }
alerts_type: { type: string, description: "Comma-separated alert categories (e.g. malware,phishing)" }
sort_by: { type: string, description: "Field to sort by (created_at, updated_at, target, urgency, status). Default created_at." }
direction: { type: string, description: "Sort direction (asc, desc). Default asc." }
offset: { type: number, description: "Result offset for paging" }
required: []
outputs_schema: { properties: {} }
ingest:
results_path: items
dedup_key: uuid
incremental_field: created_at
- id: get_alert
name: sekoia-xdr-get-alert
description: "Retrieve a single alert by UUID or short_id."
risk: read
inputs_schema:
properties:
id: { type: string, description: "Alert UUID or short_id (e.g. ALUnyZCYZ9Ga)" }
required: [id]
outputs_schema: { properties: {} }
- id: search_events
name: sekoia-xdr-search-events
description: "Search events for an alert in one call: creates an event search job, waits for it to finish and returns the events. Falls back to returning the job UUID if it is still running."
risk: read
inputs_schema:
properties:
earliest_time: { type: string, description: "Lower time bound (e.g. -3d, -2w, or ISO 8601 2023-01-15T00:00:00Z)" }
latest_time: { type: string, description: "Upper time bound (e.g. now, +1d, or ISO 8601)" }
query: { type: string, description: "Event query, e.g. alert_short_ids:ALUnyZCYZ9Ga" }
max_last_events: { type: string, description: "Maximum number of events to return" }
required: [earliest_time, latest_time]
outputs_schema: { properties: {} }
- id: events_execute_query
name: sekoia-xdr-events-execute-query
description: "Create an event search job. Use events_status_query then events_results_query to poll and retrieve, or use search_events for a one-shot."
risk: read
inputs_schema:
properties:
earliest_time: { type: string, description: "Lower time bound (e.g. -3d or ISO 8601)" }
latest_time: { type: string, description: "Upper time bound (e.g. now or ISO 8601)" }
query: { type: string, description: "Event query, e.g. alert_short_ids:ALUnyZCYZ9Ga" }
max_last_events: { type: string, description: "Maximum number of events to return" }
required: [earliest_time, latest_time]
outputs_schema: { properties: {} }
- id: events_status_query
name: sekoia-xdr-events-status-query
description: "Get the status of a previously created event search job."
risk: read
inputs_schema:
properties:
uuid: { type: string, description: "Event search job UUID" }
required: [uuid]
outputs_schema: { properties: {} }
- id: events_results_query
name: sekoia-xdr-events-results-query
description: "Retrieve the events of a finished event search job."
risk: read
inputs_schema:
properties:
uuid: { type: string, description: "Event search job UUID" }
required: [uuid]
outputs_schema: { properties: {} }
- id: update_status_alert
name: sekoia-xdr-update-status-alert
description: "Change the status of an alert by applying the matching workflow transition (Acknowledged, Rejected, Ongoing, Closed)."
risk: safe_write
inputs_schema:
properties:
id: { type: string, description: "Alert UUID or short_id" }
status: { type: string, description: "New status: Acknowledged, Rejected, Ongoing or Closed" }
comment: { type: string, description: "Optional comment describing the status change" }
required: [id, status]
outputs_schema: { properties: {} }
- id: post_comment_alert
name: sekoia-xdr-post-comment-alert
description: "Post a comment on an alert."
risk: safe_write
inputs_schema:
properties:
id: { type: string, description: "Alert UUID or short_id" }
comment: { type: string, description: "Comment content" }
author: { type: string, description: "Optional comment author" }
required: [id, comment]
outputs_schema: { properties: {} }
- id: get_comments
name: sekoia-xdr-get-comments
description: "Get all comments of an alert."
risk: read
inputs_schema:
properties:
id: { type: string, description: "Alert UUID or short_id" }
required: [id]
outputs_schema: { properties: {} }
- id: get_workflow_alert
name: sekoia-xdr-get-workflow-alert
description: "Get the available status transitions for an alert."
risk: read
inputs_schema:
properties:
id: { type: string, description: "Alert UUID or short_id" }
required: [id]
outputs_schema: { properties: {} }
- id: get_cases_alert
name: sekoia-xdr-get-cases-alert
description: "Retrieve the cases related to an alert. If case_id is given, only that case is returned."
risk: read
inputs_schema:
properties:
alert_id: { type: string, description: "Alert UUID or short_id" }
case_id: { type: string, description: "Optional case short_id (e.g. CAQNurTJM8q2)" }
required: [alert_id]
outputs_schema: { properties: {} }
- id: get_asset
name: sekoia-xdr-get-asset
description: "Get an asset by its UUID."
risk: read
inputs_schema:
properties:
asset_uuid: { type: string, description: "Asset UUID" }
required: [asset_uuid]
outputs_schema: { properties: {} }
- id: list_assets
name: sekoia-xdr-list-assets
description: "List assets, optionally filtered by type."
risk: read
inputs_schema:
properties:
limit: { type: number, description: "Number of assets to return (default 10)" }
assets_type: { type: string, description: "Filter by asset type name (e.g. computer, network)" }
required: []
outputs_schema: { properties: {} }
- id: get_user
name: sekoia-xdr-get-user
description: "Get information about a user by UUID (e.g. a comment author)."
risk: read
inputs_schema:
properties:
user_uuid: { type: string, description: "User UUID" }
required: [user_uuid]
outputs_schema: { properties: {} }
- id: add_attributes_asset
name: sekoia-xdr-add-attributes-asset
description: "Add an attribute (name/value) to an asset."
risk: safe_write
inputs_schema:
properties:
asset_uuid: { type: string, description: "Asset UUID" }
name: { type: string, description: "Attribute name" }
value: { type: string, description: "Attribute value" }
required: [asset_uuid, name, value]
outputs_schema: { properties: {} }
- id: add_keys_asset
name: sekoia-xdr-add-keys-asset
description: "Add a key (name/value) to an asset."
risk: safe_write
inputs_schema:
properties:
asset_uuid: { type: string, description: "Asset UUID" }
name: { type: string, description: "Key name" }
value: { type: string, description: "Key value" }
required: [asset_uuid, name, value]
outputs_schema: { properties: {} }
- id: remove_attribute_asset
name: sekoia-xdr-remove-attribute-asset
description: "Remove an attribute from an asset. Use get_asset to find the attribute UUID."
risk: destructive
inputs_schema:
properties:
asset_uuid: { type: string, description: "Asset UUID" }
attribute_uuid: { type: string, description: "UUID of the attribute to remove" }
required: [asset_uuid, attribute_uuid]
outputs_schema: { properties: {} }
- id: remove_key_asset
name: sekoia-xdr-remove-key-asset
description: "Remove a key from an asset. Use get_asset to find the key UUID."
risk: destructive
inputs_schema:
properties:
asset_uuid: { type: string, description: "Asset UUID" }
key_uuid: { type: string, description: "UUID of the key to remove" }
required: [asset_uuid, key_uuid]
outputs_schema: { properties: {} }
- id: get_kill_chain
name: sekoia-xdr-get-kill-chain
description: "Retrieve the definition of a Cyber Kill Chain step by UUID or short_id."
risk: read
inputs_schema:
properties:
kill_chain_uuid: { type: string, description: "Kill chain UUID or short_id" }
required: [kill_chain_uuid]
outputs_schema: { properties: {} }
- id: http_request
name: sekoia-xdr-http-request
description: "Perform an authenticated HTTP request to the Sekoia API. Advanced escape hatch for endpoints without a dedicated command."
inputs_schema:
properties:
method: { type: string, description: "HTTP method (GET, POST, PUT, PATCH, DELETE). Default GET." }
url_suffix: { type: string, description: "Path after the base URL, e.g. /v1/sic/alerts/ or /v1/asset-management/assets/" }
parameters: { type: string, description: "Query parameters as a JSON object string, e.g. {\"limit\": 10}" }
data: { type: string, description: "Request body as a JSON object string (for POST/PUT/PATCH)" }
required: [url_suffix]
outputs_schema: { properties: {} }
# ── Connectivity test ─────────────────────────────────────────────────────
- id: test_connection
name: sekoia-xdr-test-connection
description: "Verify connectivity and credentials (used by the Test button)."
risk: read
inputs_schema:
properties: {}
required: []
outputs_schema: { properties: {} }
ingestion:
command: list_alerts
mapper: list_alerts
default_incident_type: "Sekoia XDR Alert"