Repository navigation
v2.3.15 — parity review, Cloud Security surface, multi-tenant hardening
Full audit of every MCP tool against the current API gateway, Go SDK and CLI, plus the Cloud Security (CNAPP) surface and a multi-tenant isolation review.
Tool count: 278 → 339, across 13 profiles (two new: cloud_security, cloud_security_readonly).
Security
ai_agent.operatebypass closed. In UID mode, omitting theoidargument while an OID was pinned on the auth context skipped the check entirely. Now enforced against the effective OID on all three dispatch paths.- Profiles are now an authorization boundary, not a display filter.
tools/callpreviously never consulted the profile, so a narrow endpoint such as/mcp/cloud_security_readonlycould invoke any registered tool including writes.lc_call_toolis bounded by the same set;api_accessis exempt by construction. X-LC-OIDis checked against the bearer JWT's own org claims (failing open for thin tokens), and the credential headers are validated at the boundary.cloudsec_get_fleet_overviewfilters rows per org againstai_agent.operate, withholding rollups when any row is dropped.PermissionCacheandOrgCachenow sweep and cap; previously they never deleted entries while keying on the JWT, so every token rotation retained that credential's permission map.
A three-part isolation audit (credential/cache keying, shared mutable state, dispatch boundaries) found no cross-tenant leak.
Broken tools fixed
Tools that never worked or returned wrong data: all four yara_scan_* (rule passed as a flag where the parser wants a positional), find_strings, get_registry_keys, is_isolated / get_sensor_info (read a field the platform never sends), query_lookup (wrong nesting level), set_rule with a ttl (seconds where hive wants milliseconds), expand_investigation (form body to a JSON-only route), list_artifacts (both filters dead), create_case with a detection, get_sku_definitions (nonexistent route), add_output with JSON booleans/numbers, and batch_search_iocs (required info_type ignored). Sensor command values are now shell-quoted for the platform's tokenizer, so paths with spaces survive.
Systemic: every hive set_* tool used to wipe usr_mtd (tags, comment, expiry, ui_actions) and force-enable the record on content updates. Content writes now preserve metadata unless explicitly overridden.
New
The internal/tools/cloudsec package (49 tools): findings and triage writes, CIEM, inventory, DSPM, compliance, CAASM, topology, attack paths, policy simulation, graph query, CSV export, sensor↔asset resolution, fleet overview. Plus the ai_skill hive family, org description support, brief document-hive listings, IOC search options, get_org_delete_confirmation, and an SDK bump.
Breaking
- Callers using a narrow profile endpoint to reach tools outside it now get an error.
- Response shapes:
get_historic_events,get_detection_rules,list_yara_rules,export_sensors,get_online_sensors. - Params:
find_strings.stringsis an array;list_artifactsrenamedsid→source,artifact_type→hint,start/endrequired.