From bb036843fedd1e82d0fef3f7f69c7ee65b830d4c Mon Sep 17 00:00:00 2001 From: Tyler Diderich Date: Wed, 7 Jan 2026 16:08:56 -0600 Subject: [PATCH 1/5] scan assets found in passive scanning --- README.md | 4 +- docs/integrations.json | 198 +++++++++--------- scan-passive-assets/README.md | 55 +++++ scan-passive-assets/config.json | 1 + ...stom-integrastion-scan-passive-assets.star | 116 ++++++++++ scripts/generate_integration_json.py | 28 ++- vulnerability-workflow/config.json | 2 +- 7 files changed, 302 insertions(+), 102 deletions(-) create mode 100644 scan-passive-assets/README.md create mode 100644 scan-passive-assets/config.json create mode 100644 scan-passive-assets/custom-integrastion-scan-passive-assets.star diff --git a/README.md b/README.md index d1f1f5a..23a30be 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,10 @@ If you need help setting up a custom integration, you can create an [issue](http - [Ubiquiti Unifi Network](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/) ## Export from runZero - [Audit Log to Webhook](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/) -- [runZero Vunerability Workflow](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/) - [Sumo Logic](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/) +## Internal Integrations +- [Scan Passive Assets](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/) +- [Vunerability Workflow](https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/) ## The boilerplate folder has examples to follow 1. Sample [README.md](./boilerplate/README.md) for contributing diff --git a/docs/integrations.json b/docs/integrations.json index abab71b..9552db2 100644 --- a/docs/integrations.json +++ b/docs/integrations.json @@ -1,108 +1,120 @@ { - "lastUpdated": "2025-12-15T22:06:49.938502Z", - "totalIntegrations": 30, + "lastUpdated": "2026-01-07T22:04:39.036697Z", + "totalIntegrations": 31, "integrationDetails": [ { - "name": "Moysle", + "name": "Tanium", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/custom-integration-moysle.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/custom-integration-tanium.star" }, { - "name": "Lima Charlie", - "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/custom-integration-lima-charlie.star" + "name": "Scan Passive Assets", + "type": "internal", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/custom-integrastion-scan-passive-assets.star" }, { - "name": "Sumo Logic", - "type": "outbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/custom-integration-sumo.star" + "name": "Snipe-IT", + "type": "inbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/snipeit.star" }, { - "name": "Cyberint", + "name": "runZero Task Sync", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/custom-integration-cyberint.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/custom-integration-task-sync.star" }, { - "name": "Manage Engine Endpoint Central", + "name": "Cisco-ISE", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/custom-integration-endpoint-central.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/custom_integration_cisco-ise.star" }, { - "name": "Tanium", + "name": "Scale Computing", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/custom-integration-tanium.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/custom-integration-scale-computing.star" }, { - "name": "runZero Vunerability Workflow", - "type": "outbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/custom-integration-vulnerability-workflow.star" + "name": "Cortex XDR", + "type": "inbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/custom-integration-cortex-xdr.star" }, { - "name": "Ghost Security", + "name": "Drata", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/custom-integration-ghost.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/custom-integration-drata.star" }, { - "name": "Carbon Black", + "name": "Akamai Guardicore Centra", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/custom-integration-carbon-black.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/custom-integration-centra-v4-api.star" }, { - "name": "Cortex XDR", + "name": "Extreme Networks CloudIQ", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/custom-integration-cortex-xdr.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/custom-integrations-extreme-cloud-iq.star" }, { - "name": "Ubiquiti Unifi Network", + "name": "Proxmox", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/custom-integration-ubiquiti-unifi-network.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/custom-integration-proxmox.star" }, { - "name": "Tailscale", + "name": "Vunerability Workflow", + "type": "internal", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/custom-integration-vulnerability-workflow.star" + }, + { + "name": "JAMF", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/custom-integration-tailscale.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/custom-integration-jamf.star" }, { - "name": "Snow License Manager", + "name": "Audit Log to Webhook", + "type": "outbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/custom-integration-audit-events.star" + }, + { + "name": "Stairwell", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/custom-integration-snow.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/custom-integration-stairwell.star" }, { - "name": "Automox", + "name": "Manage Engine Endpoint Central", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/custom-integration-automox.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/custom-integration-endpoint-central.star" }, { - "name": "runZero Task Sync", + "name": "Cyberint", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/custom-integration-task-sync.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/custom-integration-cyberint.star" }, { - "name": "Digital Ocean", + "name": "Lima Charlie", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/custom-integration-digital-ocean.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/custom-integration-lima-charlie.star" }, { - "name": "Akamai Guardicore Centra", + "name": "Automox", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/custom-integration-centra-v3-api.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/custom-integration-automox.star" }, { "name": "Device42", @@ -111,76 +123,70 @@ "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/device42/custom-integration-device42.star" }, { - "name": "Audit Log to Webhook", - "type": "outbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/custom-integration-audit-events.star" - }, - { - "name": "NinjaOne", + "name": "Ubiquiti Unifi Network", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/custom-integration-ninjaone.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/custom-integration-ubiquiti-unifi-network.star" }, { - "name": "JAMF", + "name": "Ghost Security", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/custom-integration-jamf.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/custom-integration-ghost.star" }, { - "name": "Scale Computing", + "name": "Carbon Black", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/custom-integration-scale-computing.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/custom-integration-carbon-black.star" }, { - "name": "Extreme Networks CloudIQ", + "name": "Snow License Manager", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/custom-integrations-extreme-cloud-iq.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/custom-integration-snow.star" }, { - "name": "Netskope", + "name": "Tailscale", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/custom-integration-netskope.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/custom-integration-tailscale.star" }, { - "name": "Stairwell", + "name": "Kandji", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/custom-integration-stairwell.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/custom-integration-kandji.star" }, { - "name": "Cisco-ISE", + "name": "Digital Ocean", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/custom_integration_cisco-ise.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/custom-integration-digital-ocean.star" }, { - "name": "Drata", - "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/custom-integration-drata.star" + "name": "Sumo Logic", + "type": "outbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/custom-integration-sumo.star" }, { - "name": "Kandji", + "name": "Moysle", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/custom-integration-kandji.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/custom-integration-moysle.star" }, { - "name": "Snipe-IT", + "name": "NinjaOne", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/snipeit.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/custom-integration-ninjaone.star" }, { - "name": "Proxmox", + "name": "Netskope", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/custom-integration-proxmox.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/custom-integration-netskope.star" } ] } \ No newline at end of file diff --git a/scan-passive-assets/README.md b/scan-passive-assets/README.md new file mode 100644 index 0000000..cff6169 --- /dev/null +++ b/scan-passive-assets/README.md @@ -0,0 +1,55 @@ +# Custom Integration: Scan Passive Assets + +This custom integration finds assets discovered only by passive sources, creates targeted scans from the last-seen agent, and can optionally delete the original passive assets after the scans are scheduled. + +## runZero requirements + +- Superuser access to the [Custom Integrations configuration](https://console.runzero.com/custom-integrations) in runZero. +- A runZero Organization API token. + +## Scan Passive Assets requirements + +- A runZero **Site ID** to target for scans (set in `SITE_ID`). +- A CIDR allow list to scope targets (set in `ALLOW_LIST`). +- A decision on whether to delete passive assets after scan creation (set in `DELETE_ASSETS`). + +## Steps + +### Script configuration + +1. Open `scan-passive-assets/custom-integrastion-scan-passive-assets.star`. +2. Update the global configuration values: + - `SITE_ID`: runZero site ID where scans should run. + - `ALLOW_LIST`: list of allowed IPv4 CIDR ranges. + - `DELETE_ASSETS`: set to `False` to keep passive assets after scans are created. +3. (Optional) Adjust the search filter in the export request if you want to include more than `source:sample source_count:1`. + +### runZero configuration + +1. [Create the Credential for the Custom Integration](https://console.runzero.com/credentials). + - Select the type `Custom Integration Script Secrets`. + - Set `access_secret` to your runZero API token. + - Set `access_key` to a placeholder value like `foo` (unused). +2. [Create the Custom Integration](https://console.runzero.com/custom-integrations/new). + - Add a Name and Icon (e.g., `scan-passive-assets`). + - Toggle `Enable custom integration script` to input the finalized script. + - Click `Validate` to ensure it has valid syntax. + - Click `Save` to create the Custom Integration. +3. [Create the Custom Integration task](https://console.runzero.com/ingest/custom/). + - Select the Credential and Custom Integration created above. + - Update the task schedule to recur at the desired timeframes. + - Select the Explorer you'd like the Custom Integration to run from. + - Click `Save` to kick off the first task. + +### What's next? + +- The task exports passive assets matching the search filter and groups allowed IPv4 addresses by `last_agent_id`. +- The script creates one scan per agent with the matching targets. +- If `DELETE_ASSETS` is enabled, the matching passive assets are removed after scan creation. +- You can review task activity on the [tasks](https://console.runzero.com/tasks) page. + +### Notes + +- Only IPv4 addresses are considered; IPv6 addresses are skipped. +- The allow list applies before scans are created, so verify `ALLOW_LIST` matches your internal ranges. +- Disabling `DELETE_ASSETS` is recommended for initial testing. diff --git a/scan-passive-assets/config.json b/scan-passive-assets/config.json new file mode 100644 index 0000000..3261451 --- /dev/null +++ b/scan-passive-assets/config.json @@ -0,0 +1 @@ +{ "name": "Scan Passive Assets", "type": "internal" } \ No newline at end of file diff --git a/scan-passive-assets/custom-integrastion-scan-passive-assets.star b/scan-passive-assets/custom-integrastion-scan-passive-assets.star new file mode 100644 index 0000000..d2fec19 --- /dev/null +++ b/scan-passive-assets/custom-integrastion-scan-passive-assets.star @@ -0,0 +1,116 @@ +load('requests', 'Session') +load('json', json_encode='encode', json_decode='decode') +load('net', 'ip_address') +load('http', 'url_encode') + +# ------------------------- +# Global Configuration +# ------------------------- +SITE_ID = "UPDATE_ME" +DELETE_ASSETS = True +ALLOW_LIST = ["10.0.0.0/8", "192.168.0.0/16"] + +# ------------------------- +# IP Filtering Functions +# ------------------------- +def ip_to_int(ip): + parts = ip.split('.') + return (int(parts[0]) << 24) + (int(parts[1]) << 16) + (int(parts[2]) << 8) + int(parts[3]) + +def cidr_to_netmask(bits): + return ~((1 << (32 - bits)) - 1) & 0xFFFFFFFF + +def ip_in_cidr(ip_str, cidr): + ip_int = ip_to_int(ip_str) + base, mask_bits = cidr.split('/') + base_int = ip_to_int(base) + mask = cidr_to_netmask(int(mask_bits)) + return (ip_int & mask) == (base_int & mask) + +def is_ip_allowed(ip_str, allow_list): + ip_obj = ip_address(ip_str) + if ip_obj.version != 4: + return False + for cidr in allow_list: + if ip_in_cidr(ip_str, cidr): + return True + return False + +# ------------------------- +# Entrypoint +# ------------------------- +def main(*args, **kwargs): + org_token = kwargs["access_secret"] + + session = Session() + session.headers.set("Authorization", "Bearer {}".format(org_token)) + session.headers.set("Content-Type", "application/json") + + # Step 1: Export assets + params = {"search": "source:sample source_count:1", "fields": "id,addresses,last_agent_id"} + asset_url = "https://console.runzero.com/api/v1.0/export/org/assets.json?{}".format(url_encode(params)) + response = session.get(asset_url, timeout=3600) + + if not response or response.status_code != 200: + print("Failed to fetch assets") + return [] + + data = json_decode(response.body) + + # Step 2: Filter assets and group IPs by agent + agent_ip_map = {} # {agent_id: [ip, ip, ...]} + asset_ids = [] + + for asset in data: + agent_id = asset.get("last_agent_id") + if not agent_id: + continue + for ip in asset.get("addresses", []): + print("Evaluating IP: {}".format(ip)) + if is_ip_allowed(ip, ALLOW_LIST): + if not agent_ip_map.get(agent_id): + agent_ip_map[agent_id] = [] + agent_ip_map[agent_id].append(ip) + if asset["id"] not in asset_ids: + asset_ids.append(asset["id"]) + + + # Step 3: Create scan task per explorer/agent + for agent_id, ips in agent_ip_map.items(): + scan_url = "https://console.runzero.com/api/v1.0/org/sites/{}/scan".format(SITE_ID) + scan_payload = { + "targets": "\n".join(ips), + "scan-name": "Auto Scan Sample Only Assets", + "scan-description": "This scan was automatically created to scan assets discovered by the 'sample' source only.", + "scan-frequency": "once", + "scan-start": "0", + "scan-tags": "type=AUTOMATED", + "scan-grace-period": "0", + "agent": agent_id, + "rate": "1000", + "max-host-rate": "20", + "passes": "3", + "max-attempts": "3", + "max-sockets": "500", + "max-group-size": "4096", + "max-ttl": "255", + "screenshots": "true", + } + print(scan_payload) + post = session.put(scan_url, body=bytes(json_encode(scan_payload))) + if post and post.status_code == 200: + print("Scan created for agent {}".format(agent_id)) + else: + print("Scan failed for agent {}".format(agent_id)) + + # Step 4: Optional asset deletion + if DELETE_ASSETS and len(asset_ids) > 0: + delete_url = "https://console.runzero.com/api/v1.0/org/assets/bulk/delete" + delete_payload = {"asset_ids": asset_ids} + del_resp = session.post(delete_url, body=bytes(json_encode(delete_payload))) + if del_resp and del_resp.status_code == 204: + print("Deleted {} assets".format(len(asset_ids))) + else: + print("Asset deletion {} failed".format(del_resp.body)) + + return [] diff --git a/scripts/generate_integration_json.py b/scripts/generate_integration_json.py index f128b46..0095e82 100644 --- a/scripts/generate_integration_json.py +++ b/scripts/generate_integration_json.py @@ -41,6 +41,16 @@ except Exception as e: print(f"⚠️ Failed to read config.json in {entry}: {e}") + if not integration_type: + integration_type = "inbound" + integration_type = str(integration_type).lower() + + if integration_type not in {"inbound", "outbound", "internal"}: + print( + f"⚠️ Unknown integration type '{integration_type}' in {entry}, defaulting to inbound." + ) + integration_type = "inbound" + integration_details.append( { "name": friendly_name, @@ -75,11 +85,12 @@ new_lines = [] in_inbound_section = False in_outbound_section = False -in_section = None +in_internal_section = False # Prepare the new sections inbound_links = [] outbound_links = [] +internal_links = [] for integration in sorted(integration_details, key=lambda x: x["name"].lower()): link = ( @@ -87,6 +98,8 @@ ) if integration["type"] == "outbound": outbound_links.append(link) + elif integration["type"] == "internal": + internal_links.append(link) else: inbound_links.append(link) @@ -103,10 +116,17 @@ new_lines.extend([f"{link}\n" for link in outbound_links]) in_outbound_section = True continue - elif stripped.startswith("## ") and (in_inbound_section or in_outbound_section): - in_inbound_section = in_outbound_section = False + elif stripped == "## Internal Integrations": + new_lines.append(line) + new_lines.extend([f"{link}\n" for link in internal_links]) + in_internal_section = True + continue + elif stripped.startswith("## ") and ( + in_inbound_section or in_outbound_section or in_internal_section + ): + in_inbound_section = in_outbound_section = in_internal_section = False - if not in_inbound_section and not in_outbound_section: + if not in_inbound_section and not in_outbound_section and not in_internal_section: new_lines.append(line) with open(readme_path, "w") as f: diff --git a/vulnerability-workflow/config.json b/vulnerability-workflow/config.json index 423c073..5157950 100644 --- a/vulnerability-workflow/config.json +++ b/vulnerability-workflow/config.json @@ -1 +1 @@ -{ "name": "runZero Vunerability Workflow", "type": "outbound" } +{ "name": "Vunerability Workflow", "type": "internal" } From f1dde9a94d37529ccd1fa4eae387fa4e281cd695 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 7 Jan 2026 22:10:57 +0000 Subject: [PATCH 2/5] Auto: update integrations JSON and README --- docs/integrations.json | 202 ++++++++++++++++++++--------------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/docs/integrations.json b/docs/integrations.json index 9552db2..aa05dde 100644 --- a/docs/integrations.json +++ b/docs/integrations.json @@ -1,120 +1,108 @@ { - "lastUpdated": "2026-01-07T22:04:39.036697Z", + "lastUpdated": "2026-01-07T22:10:57.592250Z", "totalIntegrations": 31, "integrationDetails": [ { - "name": "Tanium", + "name": "Moysle", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/custom-integration-tanium.star" - }, - { - "name": "Scan Passive Assets", - "type": "internal", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/custom-integrastion-scan-passive-assets.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/custom-integration-moysle.star" }, { - "name": "Snipe-IT", + "name": "Lima Charlie", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/snipeit.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/custom-integration-lima-charlie.star" }, { - "name": "runZero Task Sync", - "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/custom-integration-task-sync.star" + "name": "Sumo Logic", + "type": "outbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/custom-integration-sumo.star" }, { - "name": "Cisco-ISE", + "name": "Cyberint", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/custom_integration_cisco-ise.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/custom-integration-cyberint.star" }, { - "name": "Scale Computing", + "name": "Manage Engine Endpoint Central", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/custom-integration-scale-computing.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/custom-integration-endpoint-central.star" }, { - "name": "Cortex XDR", + "name": "Tanium", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/custom-integration-cortex-xdr.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tanium/custom-integration-tanium.star" }, { - "name": "Drata", - "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/custom-integration-drata.star" + "name": "Vunerability Workflow", + "type": "internal", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/custom-integration-vulnerability-workflow.star" }, { - "name": "Akamai Guardicore Centra", + "name": "Ghost Security", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/custom-integration-centra-v4-api.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/custom-integration-ghost.star" }, { - "name": "Extreme Networks CloudIQ", + "name": "Carbon Black", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/custom-integrations-extreme-cloud-iq.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/custom-integration-carbon-black.star" }, { - "name": "Proxmox", + "name": "Cortex XDR", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/custom-integration-proxmox.star" - }, - { - "name": "Vunerability Workflow", - "type": "internal", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/vulnerability-workflow/custom-integration-vulnerability-workflow.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cortex-xdr/custom-integration-cortex-xdr.star" }, { - "name": "JAMF", + "name": "Ubiquiti Unifi Network", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/custom-integration-jamf.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/custom-integration-ubiquiti-unifi-network.star" }, { - "name": "Audit Log to Webhook", - "type": "outbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/custom-integration-audit-events.star" + "name": "Tailscale", + "type": "inbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/custom-integration-tailscale.star" }, { - "name": "Stairwell", + "name": "Snow License Manager", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/custom-integration-stairwell.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/custom-integration-snow.star" }, { - "name": "Manage Engine Endpoint Central", + "name": "Automox", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/manage-engine-endpoint-central/custom-integration-endpoint-central.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/custom-integration-automox.star" }, { - "name": "Cyberint", + "name": "runZero Task Sync", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cyberint/custom-integration-cyberint.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/task-sync/custom-integration-task-sync.star" }, { - "name": "Lima Charlie", + "name": "Digital Ocean", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/lima-charlie/custom-integration-lima-charlie.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/custom-integration-digital-ocean.star" }, { - "name": "Automox", + "name": "Akamai Guardicore Centra", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/automox/custom-integration-automox.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/akamai-guardicore-centra/custom-integration-centra-v3-api.star" }, { "name": "Device42", @@ -123,70 +111,82 @@ "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/device42/custom-integration-device42.star" }, { - "name": "Ubiquiti Unifi Network", + "name": "Audit Log to Webhook", + "type": "outbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/audit-events-to-webhook/custom-integration-audit-events.star" + }, + { + "name": "Scan Passive Assets", + "type": "internal", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/custom-integrastion-scan-passive-assets.star" + }, + { + "name": "NinjaOne", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ubiquiti-unifi-network/custom-integration-ubiquiti-unifi-network.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/custom-integration-ninjaone.star" }, { - "name": "Ghost Security", + "name": "JAMF", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ghost/custom-integration-ghost.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/jamf/custom-integration-jamf.star" }, { - "name": "Carbon Black", + "name": "Scale Computing", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/carbon-black/custom-integration-carbon-black.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scale-computing/custom-integration-scale-computing.star" }, { - "name": "Snow License Manager", + "name": "Extreme Networks CloudIQ", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snow-license-manager/custom-integration-snow.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/extreme-cloud-iq/custom-integrations-extreme-cloud-iq.star" }, { - "name": "Tailscale", + "name": "Netskope", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/tailscale/custom-integration-tailscale.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/custom-integration-netskope.star" }, { - "name": "Kandji", + "name": "Stairwell", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/custom-integration-kandji.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/stairwell/custom-integration-stairwell.star" }, { - "name": "Digital Ocean", + "name": "Cisco-ISE", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/digital-ocean/custom-integration-digital-ocean.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/cisco-ise/custom_integration_cisco-ise.star" }, { - "name": "Sumo Logic", - "type": "outbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/sumo-logic/custom-integration-sumo.star" + "name": "Drata", + "type": "inbound", + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/drata/custom-integration-drata.star" }, { - "name": "Moysle", + "name": "Kandji", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/moysle/custom-integration-moysle.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/kandji/custom-integration-kandji.star" }, { - "name": "NinjaOne", + "name": "Snipe-IT", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/ninjaone/custom-integration-ninjaone.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/snipe-it/snipeit.star" }, { - "name": "Netskope", + "name": "Proxmox", "type": "inbound", - "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/netskope/custom-integration-netskope.star" + "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/README.md", + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/proxmox/custom-integration-proxmox.star" } ] } \ No newline at end of file From 2e3b76b6791fd0cad8768f8fca8e91ecdca3bbc3 Mon Sep 17 00:00:00 2001 From: Tyler Diderich Date: Thu, 8 Jan 2026 14:47:35 -0600 Subject: [PATCH 3/5] typo --- ...ve-assets.star => custom-integration-scan-passive-assets.star} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scan-passive-assets/{custom-integrastion-scan-passive-assets.star => custom-integration-scan-passive-assets.star} (100%) diff --git a/scan-passive-assets/custom-integrastion-scan-passive-assets.star b/scan-passive-assets/custom-integration-scan-passive-assets.star similarity index 100% rename from scan-passive-assets/custom-integrastion-scan-passive-assets.star rename to scan-passive-assets/custom-integration-scan-passive-assets.star From 2a2cb99b8751a2b1301c6aae620ca7d659b31255 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 8 Jan 2026 20:48:01 +0000 Subject: [PATCH 4/5] Auto: update integrations JSON and README --- docs/integrations.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integrations.json b/docs/integrations.json index aa05dde..27177da 100644 --- a/docs/integrations.json +++ b/docs/integrations.json @@ -1,5 +1,5 @@ { - "lastUpdated": "2026-01-07T22:10:57.592250Z", + "lastUpdated": "2026-01-08T20:48:01.893869Z", "totalIntegrations": 31, "integrationDetails": [ { @@ -120,7 +120,7 @@ "name": "Scan Passive Assets", "type": "internal", "readme": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/README.md", - "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/custom-integrastion-scan-passive-assets.star" + "integration": "https://github.com/runZeroInc/runzero-custom-integrations/blob/main/scan-passive-assets/custom-integration-scan-passive-assets.star" }, { "name": "NinjaOne", From 70d68ebb33e2bb107adb0f64bda6be6efe901e91 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 15 Jan 2026 15:32:00 +0000 Subject: [PATCH 5/5] Auto: update integrations JSON and README --- docs/integrations.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integrations.json b/docs/integrations.json index 4c11bac..de88720 100644 --- a/docs/integrations.json +++ b/docs/integrations.json @@ -1,6 +1,6 @@ { - "lastUpdated": "2026-01-15T15:30:47.444549Z", - "totalIntegrations": 31, + "lastUpdated": "2026-01-15T15:32:00.895289Z", + "totalIntegrations": 32, "integrationDetails": [ { "name": "Moysle",