Proposing ASBOM (Agentic-System Bill of Materials) — new CycloneDX BOM type +
principal field
#940
Replies: 2 comments
|
Love this, thanks for proposing |
|
A useful way to frame the boundary is that an ASBOM (card) can describe a principal (robot) and its security posture without becoming the authorization decision itself. The card can say who the robot is, where it keeps its key, how long the key lasts, and whether it normally needs permission before doing something. But the card is not the permission itself. For example:
is useful descriptive, but it does not mean:
The exact action still needs to be authorized when it happens. A useful separation is: The four-axis One semantic boundary may be worth making explicit:
For example, an ASBOM could accurately declare: That is valuable security and incident-response information. But it should not imply that a runtime request is currently authorized merely because the BOM says A useful interoperability test would keep the BOM constant while varying only the runtime authorization result: The BOM remains valid in both cases. The authorization decision is separate, action-specific state. This distinction also matters for freshness. Credential lifetime and consent mode are useful declarations, but the actual credential may have expired, been revoked, or been narrowed, and the relevant policy state may have changed since the BOM was produced. There may also be an opportunity to align the identity portion of
Conceptually: Keeping those layers distinct would make ASBOM useful as a stable transparency and attestation artifact without accidentally turning it into a reusable authorization token. |
Uh oh!
There was an error while loading. Please reload this page.
Proposing a new CycloneDX BOM type — Agentic-System Bill of Materials (ASBOM) — alongside SBOM, ML-BOM, SaaSBOM, CBOM, HBOM, OBOM, and MBOM. ASBOM inventories the runtime composition of an agentic AI deployment: model + harness + skills + MCP servers + runtime + the identities under which each part executes. The schema addition this requires is one new field (
principal).Why a new BOM type, not just a profile
The agentic-AI ecosystem has rapidly moved to a place where capabilities (SKILL.md packages, MCP servers, plugins) are installable artifacts, hosts (Claude Code, Cursor, Gemini CLI, GitHub CLI) load them dynamically, and operating systems (Windows 11 Agent Workspace) now expose dedicated agent principals. The running composition of these parts — which model, in which harness, with which skills, in which runtime, under which credentials — is what determines an agentic system's effective authority and blast radius. It is the unit operators must audit, sign, and respond to in an incident.
None of the existing BOM types capture it:
ASBOM is that BOM type. It is expressible entirely in CycloneDX 1.7 primitives (
compositions,formulation.runtimeTopology,declarations,services.trustZone,components.type=machine-learning-model/platform/application) with one schema addition — theprincipalblock proposed below.The
principalfield (the one schema addition)Today
services.authenticated: bool+services.trustZone: stringcollapses four orthogonal axes into a single boolean. The proposedprincipalblock separates them:none,delegated-ambient(skill uses host'sghauth),delegated-obo(RFC 8693 token exchange),pat(long-lived bearer),service-principal,agent-account-os(e.g., Win11 Agent Workspace). Determines who the downstream audit log records as actor.none/in-memory/env-var/file/os-keychain/hardware-bound/broker. Determines exfiltration and off-device replay risk.session/short-lived-oauth/long-lived-pat/perpetual. Determines duration of compromise.none/per-grant/per-session/per-action. Determines whether a prompt-injected agent action is also a consented action.Real systems mix these axes — e.g., an MCP server can run as a service principal (axis 1) holding short-lived OAuth tokens (axis 3) stored in OS keychain (axis 2) with per-action consent (axis 4). Conflating them loses the information operators need.
Worked diff in the draft shows two MCP servers that look identical today (
authenticated: true, trustZone: internal) but resolve to wildly different governance postures onceprincipalis populated — one is delegated-OBO with DPoP-bound short-lived tokens in OS keychain; the other holds a perpetual PAT in an env var.The
principalfield is the motivation for ASBOM, but is itself generally useful for any composed system where components execute under distinct identities (CI pipelines with secrets, serverless function chains, multi-tenant SaaS). The primitive is not AI-specific; the motivating domain is.Why this is the right moment
CycloneDX 1.7's extension of
formulationto "any referenceable object … including the BOM itself" (description updated in commitf315e00) gives the right structural primitive for describing how an agentic system was assembled.declarations(with first-classassessors[].thirdParty) gives the third-party attestation surface.compositionswith JSF signature gives the unit-of-governance. The pieces are in place; ASBOM is the opinionated capability that ties them to the agentic-AI domain.Drafts
principalfield — JSON Schema fragment, backwards-compat analysis, full four-axis decomposition, non-repudiation framing, worked diff examplesRelated work
Asks
principalthe right grain, or are some of these axes better collapsed / expanded?principalattach —componentonly,serviceonly, both, or viadefinitionsfor reuse?Happy to split this into smaller proposals (
principalfield alone, ASBOM capability brand alone, axes as separate enums) if that's easier to land incrementally.All reactions