cdx: Custom Properties

July 18, 2026 · View on GitHub

This page documents the current cdx: custom properties emitted by cdxgen, the ecosystems they map to, and practical supply-chain security/assurance use cases.

Scope

  • Source of truth: non-test source files under lib/** (including lib/helpers/utils.js and lib/helpers/ciParsers/*).
  • These are cdxgen-specific properties added to CycloneDX objects (components, workflows, tasks, metadata, and services).
  • They are intended to enrich analysis and policy decisions; they are not CycloneDX core fields.

Legacy compatibility properties

  • This page inventories the current namespaced cdx:* custom properties. It does not treat older unnamespaced compatibility properties as part of the preferred property surface.
  • Current legacy examples still seen in some outputs include SrcFile, ImportedModules, and LocalNodeModulesPath.
  • Prefer standard CycloneDX modeling first: use evidence.occurrences[].location and evidence.identity[].methods[].value for discovery/source evidence, and use BOM metadata properties such as cdx:bom:componentSrcFiles for aggregated manifest-origin signals.
  • Treat LocalNodeModulesPath as environment-specific and potentially sensitive; downstream policies should avoid depending on it.
  • Expect these legacy keys to remain compatibility-oriented and less stable than the namespaced cdx:* inventory below.

How to read these properties

Some CI/CD properties are derived from a workflow or job context but may also be duplicated onto related components/tasks to support policy engines that primarily scan input.components. In those cases, treat the Scope column as indicating the primary origin plus common duplicated locations used for policy consumption.

Value semantics and normalization

CycloneDX custom properties are emitted as name/value pairs, so consumers should assume that all values are serialized as strings even when they represent booleans, numbers, timestamps, or structured data.

ShapeTypical encodingExamplesPolicy note
Boolean"true", "false"cdx:github:workflow:hasWritePermissions, cdx:npm:hasInstallScript, cdx:maven:shadedCompare as strings in OPA/CEL unless your ingestion layer normalizes values first
Number-likedecimal stringcdx:github:job:timeoutMinutes, cdx:pixi:build_numberTreat as strings unless your policy engine performs numeric coercion
Listscomma-separated or newline-separated stringscdx:github:workflow:triggers, cdx:npm:risky_scripts, cdx:bom:componentSrcFilesComponent-level lists are typically comma-separated; BOM-level metadata lists are typically newline-separated. Split explicitly before matching multi-value logic
Paths / URLsplain stringcdx:github:workflow:file, cdx:swift:localCheckoutPath, cdx:pypi:registryUseful as provenance and source-of-truth signals
TimestampsISO 8601 stringcdx:go:creation_time, cdx:nix:last_modifiedSuitable for recency or reproducibility gates
Structured payloadsJSON-serialized stringcdx:pip:structuredMarkers, cdx:cargo:featuresParse the JSON string before field-level inspection; do not compare nested fields as raw text unless your policy engine lacks JSON parsing

Policy readiness shorthand

  • Hard deny: good primary candidate for blocking policies.
  • Warning / triage: useful for prioritization, human review, or score weighting.
  • Context only: useful for evidence, provenance, explainability, or enrichment, but usually weak as a standalone gate.

Property families, ecosystems, and assurance use cases

FamilyEcosystem / contextWhat it capturesSecurity & assurance use casesInventoryExample rules
cdx:github:*, cdx:actions:*GitHub Actions workflowsWorkflow/job/step metadata, action references, version pinning style, permission posture, triggers, runner contextDetect unpinned actions, flag workflows/jobs with write privileges, validate OIDC (id-token) usage boundaries, review exposure by trigger type and environmentCI/CD and workflow provenance1, 6
cdx:gitlab:*GitLab CIPipeline/job stage/image/environment/services/needs metadataReview pipeline trust boundaries, identify risky service/image usage, validate stage/order dependency intentCI/CD and workflow provenance1
cdx:azure:*Azure PipelinesPipeline file, pool image, trigger branches, stage/job dependencies and conditionsDetect privileged runner pools, verify deployment gating/conditions, ensure branch-scoped execution policyCI/CD and workflow provenance1
cdx:circleci:*CircleCIConfig/workflow/job relationships, branch filters, orb/executor referencesVerify job execution constraints (branch-only), inspect third-party orb use, map build graph for provenance reviewCI/CD and workflow provenance1
cdx:jenkins:*Jenkins declarative pipelinesJenkinsfile source, agent selection, stage metadata (when, parallel)Audit build agent trust model, identify conditional/parallel execution complexity and potential bypass pathsCI/CD and workflow provenance1
cdx:npm:*, cdx:pnpm:aliasNode.js (npm/pnpm)Binary/script execution surfaces, native addon signals, lock/runtime mismatches, local/path/workspace/alias detailsPrioritize packages with install-time execution risk, detect name/version spoofing indicators, identify non-registry or file-based dependenciesPackage manager and language ecosystems2
cdx:pypi:*, cdx:pip:*, cdx:pyproject:*, cdx:python:*, cdx:pixi:*, cdx:pylock:*Python (pip/requirements, pyproject, lock formats, pixi, PEP 751 pylock)Version constraints, extras, environment markers, registry origin, interpreter constraints, pixi/pylock lock metadataEnforce allowed index/registry policy, evaluate conditional dependency exposure by marker, retain pylock metadata not directly representable in CycloneDXPackage manager and language ecosystems3
cdx:gem:*RubyGems/BundlerGem platform/source/revision/tag/branch, ruby constraints, executable presence, prerelease/yanked statusDetect mutable VCS-sourced gems, platform-specific attack surface, and yanked/prerelease risk in resolved dependency setsPackage manager and language ecosystems3
cdx:cargo:*Rust crates.ioCrate metadata linkage (id/latest/rust version/features)Validate Rust toolchain compatibility, flag feature-driven attack surface changes, monitor lag from newest upstream versionPackage manager and language ecosystems4
cdx:go:*Go modulesToolchain, indirect/deprecated/local replacement timing metadataDetect local replacements/non-hermetic resolution, track deprecated modules, validate direct vs indirect risk posturePackage manager and language ecosystems4
cdx:golem:*Go Evinse evidenceSemantic Go usage scopes, occurrence kinds, call graph mode, build directives, native artifacts, security signals, vendoring, and module replacement contextPrioritize reachable Go dependency review, flag local replacements and private modules, audit generated/native build surfaces, and separate runtime from test-only usageGolem Go Evinse evidence4
cdx:rusi:*Rust Evinse evidenceSemantic Rust usage scopes, occurrence kinds, call graph mode, data-flow slices, crypto assets, and security signalsPrioritize reachable Rust dependency review, audit crypto reachability and data-flow provenance, flag security-sensitive API usage, and separate runtime from test-only usageRusi Rust Evinse evidence5
cdx:dotnet:*.NET / NuGet / assembliesTarget framework, project guid, assembly identity/version, hint path, Azure Functions versionVerify framework support policy, detect assembly/package identity mismatches, analyze implicit GAC/hint-path sourced dependenciesPackage manager and language ecosystems5
cdx:maven:*, cdx:gradle:*Java (Maven/Gradle)Effective component scope, shaded namespace evidence, Gradle root path contextIdentify shadowed/relocated classes (obfuscation or vendoring risk), enforce dependency-scope policy, track monorepo/root provenancePackage manager and language ecosystems5
cdx:nix:*Nix flakesInput source URLs, lock revision/ref/hash/time, flake directoryValidate immutable lock intent, detect unexpected source URL changes, support reproducibility/provenance checksPackage manager and language ecosystems4
cdx:swift:*Swift Package ManagerLogical package naming and local checkout pathsIdentify local checkout dependencies vs remote source dependencies; enforce source-origin controlsPackage manager and language ecosystems3
cdx:pods:*CocoaPodsPodspec location, project directory, pod/subspec mappingDistinguish local/path/git pod sourcing, trace subspec-enabled feature surface, improve provenance for iOS supply chainsPackage manager and language ecosystems3
cdx:pub:*Dart pubNon-default registry URLEnforce approved package registry policy and detect mirror/private feed usagePackage manager and language ecosystems3
cdx:ai:*, cdx:gguf:*, cdx:huggingface:*AI/ML inventory, local model artifacts, GGUF model files, and Hugging Face metadataModel/runtime/provider hints, deployment posture, explicit model IDs, context windows, quantization/encoding signals, GGUF artifact metadata, and Hugging Face popularity/runtime signalsFlag risky local AI rollouts, separate remote inference from local artifacts, audit very large context windows, track GGUF shards/sidecars, preserve model lineage context, and review remote-model governance/runtime postureAI / model artifact inventory5
cdx:bom:*BOM-level metadataComponent type set, discovered namespaces, source manifest filesMeasure BOM completeness, identify broad component diversity, and support attestable “evidence-of-origin” for manifest inputsCross-cutting BOM/service/build metadata5
cdx:build:versionSpecifiersBuild/manifest parsing (for example C/C++ build metadata)Non-exact version constraints captured from build descriptorsHighlight non-pinned dependency constraints and prioritize hardening toward deterministic buildsCross-cutting BOM/service/build metadata5
cdx:crypto:*Rootfs/host trust material enrichmentTrust domain, source type, fingerprint, key IDs, key strength, user IDs, and certificate lifecycle metadataAudit repository trust anchors, CA-store content, and filesystem trust drift; distinguish package-signing keyrings from CA bundlesCross-cutting BOM/service/build metadata5
cdx:dosai:*Dosai source-level crypto analysis (CBOM)Dosai asset/operation/material metadata: internal ID, strength, reachability, entry-point count, data-flow slice IDs, and storage kind (for example hardcoded)Identify hard-coded cryptographic material, audit crypto reachability from entry points, and review data-flow provenance for crypto operations detected by static analysisCross-cutting BOM/service/build metadata5
cdx:osquery:categoryHost/package discovery via osqueryQuery/source category for discovered packagesSeparate inventory confidence by collection method and tune host-level evidence policiesCross-cutting BOM/service/build metadata5
cdx:darwin:codesign:*, cdx:darwin:notarization:*, cdx:darwin:gatekeeper:*macOS host trust enrichmentCode-sign identifier/team ID/authority/runtime info, notarization assessment/source/origin, and Gatekeeper policy statusReview signed-software provenance, identify unsigned or weakly trusted apps, and correlate execution policy with launchd/software inventoryCross-cutting BOM/service/build metadata5
cdx:windows:authenticode:*, cdx:windows:wdac:*Windows host trust enrichmentAuthenticode validation/signer/timestamp metadata and WDAC active-policy inventoryConfirm signer trust, identify unsigned persistence binaries, and inventory WDAC enforcement stateCross-cutting BOM/service/build metadata5
cdx:lolbas:*Windows osquery / OBOM enrichmentLOLBAS-derived ATT&CK tactics/techniques, functions, contexts, and risk tags parsed from Windows host telemetryHighlight Windows proxy-execution helpers in run keys, tasks, WMI, services, and live process dataCross-cutting BOM/service/build metadata5
cdx:gtfobins:*Container executable enrichmentGTFOBins-derived functions, privileged contexts, ATT&CK techniques, and risk tags for collected executablesFlag container-escape helpers, privileged binaries, exfiltration tooling, and mutable-path attack kits in container SBOMsCross-cutting BOM/service/build metadata5
cdx:container:*Container executable enrichmentATT&CK-for-Containers tags, Peirates/CDK/DEEPCE playbook references, and seccomp-sensitive syscall contextDetect offensive toolkit binaries, map cluster-pivot helpers to ATT&CK, and review images that become riskier under permissive seccomp profilesCross-cutting BOM/service/build metadata5
cdx:vscode-extension:*VS Code / IDE extensions (.vsix and installed dirs)Activation events, extension kind, contributed features, lifecycle scripts, workspace trust postureDetect always-on extensions, flag install-time script execution, audit host/filesystem access, enforce workspace trust and virtual workspace policiesIDE and editor extensions7
cdx:chrome-extension:*Chromium browser extensions (-t chrome-extension, -t os)Browser/profile context, Chrome/Edge/Brave manifest metadata, capability signals from manifest + Babel source analysisFlag broad host permissions, web-request interception capability, file/device/network/bluetooth/accessibility/code-injection/fingerprinting exposureIDE and editor extensions7
cdx:asar:*Electron ASAR archives (-t asar)Archive file counts, entry metadata, declared/computed integrity, JS capability summaries, embedded manifest inventoryCatalog packaged release contents, review eval/dynamic fetch behavior, flag integrity mismatches, and audit embedded Node packages shipped inside desktop artifactsIDE and editor extensions7
cdx:mcp:*JavaScript / TypeScript MCP source plus config inventoryMCP SDK/config provenance, server transport/auth posture, registered tools/prompts/resources, explicit model/provider literalsDetect unauthenticated MCP HTTP exposure, review config-only MCP services, surface trust/credential posture, and inventory the server primitives exposed to modelsCross-cutting BOM/service/build metadata5
cdx:agent:*AI agent instruction / skill file discoveryHidden Unicode, inferred MCP endpoints, provider mentions, auth hints, tunnel exposure, hidden component indicatorsSurface agent-driven runtime dependencies that are not obvious from lockfiles alone and flag risky public/tunneled MCP references for compliance reviewCross-cutting BOM/service/build metadata5
cdx:ai:codegen:*AI-generated code and authorship provenance (-t ai-provenance, cdx-audit)Detection status, aggregate confidence/band, detected tools (Claude Code, Copilot, Cursor, Devin, etc.), development phases (dev/test/review/ci), per-tool evidence, and a signals JSON blobFlag AI/LLM/agent-authored code for copyright/licensing review (AI-authored code may lack copyright protection), require disclosure of AI usage, and drive ai-provenance audit rules (AIPROV-001/002)Cross-cutting BOM/service/build metadata5
cdx:ai:codegen:models, cdx:ai:codegen:agents (et al.)Git-ai note attribution details (-t ai-provenance, cdx-audit)Model names, agent tool names, session/prompt counts, and AI-attributed line+range entry counts from git-ai notesSurface precise AI model/agent attribution evidence from git-ai line-level notes for audit and policy reviewCross-cutting BOM/service/build metadata5
cdx:ai:oversight:*AI human-oversight & process-rigor (-t ai-provenance, cdx-audit)Rigor score/band, verification-debt/review-coverage/self-merge (forge-only, else unavailable), CI-weakening events, sign-off & CODEOWNERS coverage, AI line ratio, data sources, and an evidence JSON blobDetect rubber-stamping of AI-authored code, evidence meaningful human oversight (EU AI Act Art. 12/14, NIST AI RMF, ISO/IEC 42001), and drive ai-oversight audit rules (AIOVS-001..006)Cross-cutting BOM/service/build metadata5
cdx:service:httpMethodOpenAPI/service evidenceHTTP method associated with discovered service endpointsSupport API exposure reviews (method-level attack surface and access-control assurance)Cross-cutting BOM/service/build metadata5

Useful keys

These are the highest-leverage keys for first-pass policy authoring.

KeyWhy it mattersPolicy readiness
cdx:github:action:isShaPinnedDistinguishes immutable commit-pinned actions from mutable tag/branch referencesHard deny
cdx:github:workflow:hasWritePermissionsQuickly identifies workflows that can modify repository or packagesHard deny
cdx:github:workflow:hasIdTokenWriteFlags OIDC token issuance capabilityHard deny
cdx:npm:hasInstallScriptCaptures install-time execution surfaceHard deny
cdx:npm:binLists executable commands exposed by an npm packageWarning / triage
cdx:npm:has_binaryQuick boolean for npm packages that expose executable commandsWarning / triage
cdx:asar:hasIntegrityMismatchFlags ASAR entries whose declared integrity hash does not match the computed archive contentHard deny
cdx:npm:isRegistryDependencyDetects git/file/local sources vs standard registry resolutionHard deny
cdx:mcp:transportDistinguishes stdio-only MCP servers from network-exposed Streamable HTTP serversHard deny
cdx:mcp:officialSdkSeparates official MCP SDK usage from non-official wrappers and forksWarning / triage
cdx:mcp:toolCountHighlights servers exposing model-controlled toolsHard deny
cdx:mcp:serviceTypeDistinguishes MCP server, client, and gateway roles inferred from sourceWarning / triage
cdx:mcp:outboundHostsCaptures remote hosts reached by MCP-adjacent source usageHard deny
cdx:mcp:authPostureNormalizes bearer/OAuth/protected-resource/no-auth postureHard deny
cdx:mcp:trustProfileSummarizes official-vs-networked-vs-authenticated trust stanceWarning / triage
cdx:mcp:credentialExposureFlags inline secrets in MCP configs or discovered service metadataHard deny
cdx:mcp:security:confusedDeputyRiskHighlights DCR + static-client authorization risk in MCP configHard deny
cdx:mcp:security:tokenPassthroughRiskFlags config-driven bearer/access-token forwardingHard deny
cdx:agent:hasPublicMcpEndpointFlags public MCP endpoints referenced in agent instructionsHard deny
cdx:agent:hasTunnelReferenceFlags ngrok/Cloudflare-tunnel style exposure in agent instructionsHard deny
cdx:agent:frameworkIdentifies community agent/tooling ecosystems such as OpenCode, Nanocoder, LangGraph, or CrewAIWarning / triage
cdx:tool:descriptionCaptures discovered custom tool or command intentWarning / triage
cdx:tool:tagsCaptures command/tool tags or routing hintsWarning / triage
cdx:skill:nameIdentifies discovered SKILL.md definitionsWarning / triage
cdx:langgraph:graphEntryPointCarries the configured graph entrypoint from langgraph.jsonWarning / triage
cdx:crewai:toolsCaptures configured CrewAI tool lists or referencesWarning / triage
cdx:agent:credentialExposureFlags inline secret patterns in AI agent instructionsHard deny
cdx:agent:reviewNeededOne-bit reviewer cue for hidden Unicode, undeclared MCP refs, or risky exposureWarning / triage
cdx:ai:codegen:detectedBoolean cue that AI/LLM/agent authorship signals were found in the projectWarning / triage
cdx:ai:codegen:confidenceAggregate noisy-OR confidence (0.00-0.99) that AI authored or reviewed the codeWarning / triage
cdx:ai:codegen:confidence:bandCoarse low/medium/high confidence band for policy thresholdsWarning / triage
cdx:ai:codegen:toolsDetected AI tools (Claude Code, Copilot, Cursor, Devin, etc.) for attribution and licensing reviewWarning / triage
cdx:ai:codegen:phasesDevelopment phases (dev/test/review/ci) where AI usage was observedWarning / triage
cdx:ai:codegen:tool:<tool>Per-tool confidence, phases, channels, and evidence for auditabilityWarning / triage
cdx:ai:codegen:evidence:jsonStructured JSON of every AI signal (channel/tool/phase/evidence/confidence)Warning / triage
cdx:ai:oversight:scoreAggregate 0.00-1.00 human-oversight/process-rigor score for AI-authored codeWarning / triage
cdx:ai:oversight:bandCoarse strong/moderate/weak rigor band for policy thresholdsWarning / triage
cdx:ai:oversight:verificationDebtRatioFraction of AI commits/PRs with no independent human review (unavailable without forge data)Warning / triage
cdx:ai:oversight:reviewCoverageFraction of AI commits/PRs with a verified independent approval (unavailable without forge data)Warning / triage
cdx:ai:oversight:reviewLatencyVsSizeMedian review time ÷ diff size; rubber-stamp indicator (unavailable without forge data)Warning / triage
cdx:ai:oversight:selfMergeRateFraction of AI PRs merged/approved by their own author (unavailable without forge data)Warning / triage
cdx:ai:oversight:ciWeakeningEventsCount of AI commits that delete tests or add quality-gate suppressions (--no-verify, || true)Warning / triage
cdx:ai:oversight:signoffCoverageFraction of AI commits carrying a DCO Signed-off-by and/or verified signatureWarning / triage
cdx:ai:oversight:codeownersCoverageFraction of AI-touched paths covered by CODEOWNERS (unavailable when no CODEOWNERS file)Warning / triage
cdx:ai:oversight:revertHotfixRateRate of reverts/hotfixes touching AI-authored workWarning / triage
cdx:ai:oversight:batchSizeMedianMedian lines changed per AI commit (review-compression context)Context only
cdx:ai:oversight:aiLineRatioAI-authored lines ÷ total (precise from git-ai notes, else heuristic)Context only
cdx:ai:oversight:dataSourcesChannels that populated the score (git, git-ai-notes, github-api, gitlab-api)Context only
cdx:ai:oversight:evidence:jsonStructured per-signal oversight evidence (sanitized JSON) for an auditable scoreWarning / triage
cdx:ai:codegen:modelsUnique model names (e.g., claude-sonnet-4-20250514,gpt-4o) from git-ai notesWarning / triage
cdx:ai:codegen:agentsUnique agent tool names (e.g., claude-code,cursor) from git-ai notesWarning / triage
cdx:ai:codegen:noteCountNumber of git-ai notes with AI attribution entriesContext only
cdx:ai:codegen:sessionCountTotal AI sessions referenced across git-ai notesContext only
cdx:ai:codegen:attributionCountTotal AI-attributed line+range entries across all git-ai notesContext only
cdx:pypi:registryIndicates non-default Python package index usageHard deny
cdx:gem:remoteRevisionLets policies distinguish immutable git revisions from mutable branch/tag sourcingWarning / triage
cdx:nix:nar_hashImportant reproducibility and content-integrity signal for flakesHard deny
cdx:go:local_dirDetects local module replacements and non-hermetic resolutionHard deny
cdx:golem:securitySignalSeverityHighlights Go modules touched by security-sensitive semantic signalsHard deny
cdx:golem:localReplacementCaptures local Go replacement evidence from Golem's analyzed module graphHard deny
cdx:golem:privateModuleCandidateIdentifies private/internal module candidates that need internal provenance controlsWarning / triage
cdx:golem:usageScopesSeparates runtime dependency use from test, benchmark, fuzz, and example-only useWarning / triage
cdx:golem:occurrenceEvidenceKindsExplains whether evidence came from imports, symbol calls, or symbol referencesContext only
cdx:golem:callGraphModeShows whether Go Evinse used none, static, CHA, RTA, or VTA call graph analysisWarning / triage
cdx:golem:dataFlowModeShows whether Go Evinse collected Golem data-flow slices (security, crypto, or all)Warning / triage
cdx:golem:cryptoDataFlowFlags a Go module with a crypto-related source-to-sink data-flow sliceHard deny
cdx:golem:cryptoDataFlowCountCounts crypto-related Golem data-flow slicesWarning / triage
cdx:golem:cryptoAlgorithmsSummarizes source-detected Go cryptographic algorithmsWarning / triage
cdx:rusi:securitySignalSeverityHighlights Rust modules touched by security-sensitive semantic signalsHard deny
cdx:rusi:cryptoFindingSeverityFlags cryptographic findings and weaknesses in Rust dependenciesWarning / triage
cdx:rusi:dataFlowCategoriesSummarizes source-to-sink data-flow categories for Rust componentsWarning / triage
cdx:bom:componentSrcFilesUseful gate for BOM completeness and downstream attestabilityWarning / triage
cdx:ai:artifactFormatDistinguishes GGUF, Modelfile, and other AI artifact/config discovery pathsWarning / triage
cdx:ai:quantizationCaptures local-model weight encoding such as Q5_K_M or BF16Warning / triage
cdx:ai:contextWindowExposes model context limits useful for performance and governance reviewWarning / triage
cdx:huggingface:downloadsAllTimeCaptures long-run Hugging Face adoption volume for a remote model or datasetWarning / triage
cdx:huggingface:inferenceProviderLists provider backends advertising hosted inference support for a modelWarning / triage
cdx:huggingface:runtimeStageShows whether a Hugging Face Space is RUNNING, BUILDING, PAUSED, or failedWarning / triage
cdx:gguf:sizeLabelPreserves GGUF size-class metadata such as 7B or 8x7BContext only
cdx:gguf:shardIdentifies sharded GGUF artifacts such as 00001-of-00002Context only
cdx:gguf:tokenizerModelIdentifies the embedded GGUF tokenizer family such as llama or gpt2Warning / triage
cdx:gguf:tokenizerTokenCountCaptures the embedded tokenizer vocabulary sizeContext only
cdx:gguf:chatTemplateDetectedFlags GGUF artifacts that embed a chat-template contractWarning / triage
cdx:crypto:trustDomainDistinguishes package-signing keyrings (apt/rpm/apk) from CA-store trust materialWarning / triage
cdx:crypto:keyIdStable repository-key identity pivot for trust-anchor review and allowlistsWarning / triage
cdx:darwin:notarization:assessmentSeparates accepted vs rejected/unknown notarization assessments for macOS appsHard deny
cdx:darwin:codesign:teamIdentifierUseful allowlist key for approved Apple Developer teamsWarning / triage
cdx:windows:authenticode:statusFast unsigned/invalid-signature gate for Windows executable inventoryHard deny
cdx:windows:wdac:activePolicyCountIndicates whether WDAC active policy material is present on the hostWarning / triage
cdx:lolbas:namesMaps Windows startup/process telemetry to known LOLBAS binariesWarning / triage
cdx:lolbas:attackTechniquesCarries ATT&CK techniques for matched Windows LOLBAS helpersWarning / triage
cdx:gtfobins:functionsEncodes GTFOBins execution, file, network, and library-load primitivesWarning / triage
cdx:gtfobins:privilegedContextsHighlights sudo/SUID/capability-backed abuse pathsHard deny
cdx:gtfobins:riskTagsSummarizes container-escape, exfiltration, persistence, and lateral-movement riskWarning / triage
cdx:container:offenseToolsLinks executables to Peirates/CDK/DEEPCE-style intrusion playbooksWarning / triage
cdx:container:seccompBlockedSyscallsShows which escape-relevant syscalls rely on relaxed seccompWarning / triage
cdx:vscode-extension:lifecycleScriptsCaptures install-time execution surface from extension lifecycle hooksHard deny
cdx:vscode-extension:activationEventsWildcard (*) activation means always-on; broad trigger surface is higher riskWarning / triage
cdx:vscode-extension:untrustedWorkspacesControls whether the extension operates in untrusted workspace contextsWarning / triage
cdx:vscode-extension:contributesReveals contributed features such as terminal access, debuggers, auth providersWarning / triage
cdx:vscode-extension:executesCodeExplicit declaration that the extension executes code; always-true is higher riskWarning / triage
cdx:vscode-extension:vscodeEngineMinimum VS Code version required; older engines may lack security featuresContext only
cdx:chrome-extension:permissionsCaptures primary Chrome extension API permission requestsHard deny
cdx:chrome-extension:hostPermissionsCaptures effective site scope from host permissions and content-script matchesHard deny
cdx:chrome-extension:contentScriptsRunAtCaptures content script injection timing such as document_startWarning / triage
cdx:chrome-extension:contentScriptsMatchesCaptures URL match patterns declared under content_scripts[*].matchesHard deny
cdx:chrome-extension:hasAutofillSignals autofill-related capability detected from manifest contentWarning / triage
cdx:chrome-extension:capability:codeInjectionSignals explicit code-injection capability from manifest/source analysisHard deny
cdx:chrome-extension:capability:fingerprintingSignals fingerprinting-relevant APIs/permissions from manifest/source analysisWarning / triage

Current key inventory (grouped)

The grouped lists below remain the authoritative inventory. The compact tables, decision categories, and combinations that follow are intended to make those keys easier to operationalize.

CI/CD and workflow provenance

Authoritative grouped index

  • GitHub Actions: cdx:github:action:isShaPinned, cdx:github:action:uses, cdx:github:action:versionPinningType, cdx:github:cache:hasRestoreKeys, cdx:github:cache:key, cdx:github:cache:keyUsesHashFiles, cdx:github:cache:path, cdx:github:cache:restoreKeys, cdx:github:checkout:persistCredentials, cdx:github:job:environment, cdx:github:job:hasIdTokenWrite, cdx:github:job:hasWritePermissions, cdx:github:job:if, cdx:github:job:isReusableWorkflowCall, cdx:github:job:isSelfHosted, cdx:github:job:name, cdx:github:job:needs, cdx:github:job:runner, cdx:github:job:services, cdx:github:job:timeoutMinutes, cdx:github:job:uses, cdx:github:job:writeScopes, cdx:github:reusableWorkflow:isExternal, cdx:github:reusableWorkflow:isShaPinned, cdx:github:reusableWorkflow:ref, cdx:github:reusableWorkflow:secretsInherit, cdx:github:reusableWorkflow:uses, cdx:github:reusableWorkflow:versionPinningType, cdx:github:reusableWorkflow:withKeys, cdx:github:step:command, cdx:github:step:condition, cdx:github:step:continueOnError, cdx:github:step:dispatchesWorkflow, cdx:github:step:dispatchKinds, cdx:github:step:dispatchMechanisms, cdx:github:step:dispatchReceiverConfidence, cdx:github:step:dispatchReceiverMatchBasis, cdx:github:step:dispatchReceiverWorkflowFiles, cdx:github:step:dispatchReceiverWorkflowNames, cdx:github:step:dispatchTargets, cdx:github:step:dispatchUsesExplicitRepositoryTarget, cdx:github:step:forkContextRefs, cdx:github:step:hasLocalDispatchReceiver, cdx:github:step:hasOutboundNetworkCommand, cdx:github:step:hasUntrustedInterpolation, cdx:github:step:if, cdx:github:step:interpolatedVars, cdx:github:step:mutatesRunnerState, cdx:github:step:name, cdx:github:step:outboundNetworkTools, cdx:github:step:referencesForkContext, cdx:github:step:referencesSensitiveContext, cdx:github:step:runnerStateTargets, cdx:github:step:sensitiveContextRefs, cdx:github:step:timeout, cdx:github:step:type, cdx:github:workflow:concurrencyGroup, cdx:github:workflow:dispatchSenderMatchBasis, cdx:github:workflow:dispatchSenderWorkflowFiles, cdx:github:workflow:dispatchSenderWorkflowNames, cdx:github:workflow:file, cdx:github:workflow:hasHighRiskTrigger, cdx:github:workflow:hasIdTokenWrite, cdx:github:workflow:hasIssueCommentTrigger, cdx:github:workflow:hasLocalDispatchSender, cdx:github:workflow:hasPullRequestTargetTrigger, cdx:github:workflow:hasPullRequestTrigger, cdx:github:workflow:hasRepositoryDispatchTrigger, cdx:github:workflow:hasWorkflowCallTrigger, cdx:github:workflow:hasWorkflowDispatchInputs, cdx:github:workflow:hasWorkflowDispatchTrigger, cdx:github:workflow:hasWorkflowRunTrigger, cdx:github:workflow:hasWritePermissions, cdx:github:workflow:isWorkflowCallProducer, cdx:github:workflow:name, cdx:github:workflow:repositoryDispatchTypes, cdx:github:workflow:triggers, cdx:github:workflow:workflowCallInputs, cdx:github:workflow:workflowCallOutputs, cdx:github:workflow:workflowCallSecrets, cdx:github:workflow:workflowDispatchInputs, cdx:github:workflow:workflowDispatchReceiverAliases, cdx:github:workflow:writeScopes
  • GitHub action trust tags: cdx:actions:isOfficial, cdx:actions:isVerified
  • GitLab CI: cdx:gitlab:config, cdx:gitlab:job:environment, cdx:gitlab:job:image, cdx:gitlab:job:name, cdx:gitlab:job:needs, cdx:gitlab:job:services, cdx:gitlab:job:stage, cdx:gitlab:stages
  • Azure Pipelines: cdx:azure:config, cdx:azure:job:environment, cdx:azure:job:name, cdx:azure:job:pool:vmImage, cdx:azure:pool:vmImage, cdx:azure:stage:condition, cdx:azure:stage:dependsOn, cdx:azure:stage:name, cdx:azure:trigger:branches
  • CircleCI: cdx:circleci:config, cdx:circleci:executor:name, cdx:circleci:job:branch:only, cdx:circleci:job:name, cdx:circleci:job:requires, cdx:circleci:orb:alias, cdx:circleci:workflow:name
  • Jenkins: cdx:jenkins:agent, cdx:jenkins:agent:image, cdx:jenkins:file, cdx:jenkins:stage:name, cdx:jenkins:stage:parallel, cdx:jenkins:stage:when

Decision-oriented sub-groups

  • Privilege / trust: cdx:github:workflow:hasWritePermissions, cdx:github:job:hasWritePermissions, cdx:github:workflow:hasIdTokenWrite, cdx:actions:isOfficial, cdx:actions:isVerified
  • Execution surface: cdx:github:step:command, cdx:github:step:type, cdx:github:step:hasOutboundNetworkCommand, cdx:github:step:mutatesRunnerState, cdx:github:reusableWorkflow:uses, cdx:gitlab:job:image, cdx:gitlab:job:services, cdx:azure:job:pool:vmImage, cdx:circleci:orb:alias, cdx:jenkins:agent:image
  • Reproducibility / control flow: cdx:github:workflow:triggers, cdx:github:job:needs, cdx:azure:stage:dependsOn, cdx:azure:stage:condition, cdx:circleci:job:requires, cdx:jenkins:stage:when, cdx:jenkins:stage:parallel
  • Environment / targeting: cdx:github:job:environment, cdx:github:job:isSelfHosted, cdx:github:job:runner, cdx:github:workflow:workflowDispatchInputs, cdx:gitlab:job:environment, cdx:azure:job:environment, cdx:azure:trigger:branches, cdx:circleci:job:branch:only

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:github:action:isShaPinnedstepboolean string"true", "false"On uses: steps in GitHub Actions workflowsPrimary mutable-vs-immutable trust signal for third-party actionsHard deny
cdx:github:action:versionPinningTypestepenum stringsha, tag, branchOn uses: steps in GitHub Actions workflowsMore expressive companion to isShaPinned; lets policies distinguish branch and tag referencesWarning / triage
cdx:github:workflow:hasWritePermissionsworkflow + componentboolean string"true", "false"When workflow permissions are parsedPrivilege amplifier for other risky signalsHard deny
cdx:github:workflow:hasIdTokenWriteworkflow + componentboolean string"true", "false"When id-token: write is presentHigh-signal OIDC issuance capabilityHard deny
cdx:github:job:hasIdTokenWritejob + componentboolean string"true", "false"When a job grants id-token: writeCaptures narrower job-scoped OIDC issuance that would otherwise be missedHard deny
cdx:github:job:hasWritePermissionsjobboolean string"true", "false"When job-level permissions are parsedCaptures narrower but still powerful write scopeHard deny
cdx:github:job:isSelfHostedjob + componentboolean string"true", "false"When a job targets a self-hosted runner labelImportant trust-boundary signal for internal network access and runner persistenceHard deny
cdx:github:workflow:writeScopesworkflow + componentlist stringcontents,id-tokenWhen workflow or effective job permissions grant specific write scopesImproves explainability and allows scope-specific policy rulesWarning / triage
cdx:github:step:commandstepstringnpm ci && npm testOn run: stepsDirect execution surface useful for review and explainabilityContext only
cdx:github:workflow:triggersworkflow + componentlist stringpush,pull_requestWhen workflow triggers are presentHelps constrain where other risks are reachableWarning / triage
cdx:github:workflow:hasPullRequestTriggerworkflow + componentboolean string"true", "false"When the workflow includes the exact pull_request triggerLets policies avoid substring matches and distinguish exact untrusted trigger semanticsHard deny
cdx:github:workflow:hasPullRequestTargetTriggerworkflow + componentboolean string"true", "false"When the workflow includes the exact pull_request_target triggerStrong signal for privileged PR-driven executionHard deny
cdx:github:workflow:hasIssueCommentTriggerworkflow + componentboolean string"true", "false"When the workflow includes the exact issue_comment triggerUseful for trigger-gated rules and manual-approval requirementsHard deny
cdx:github:workflow:hasWorkflowRunTriggerworkflow + componentboolean string"true", "false"When the workflow includes the exact workflow_run triggerHelps distinguish follow-on workflow chaining from ordinary branch triggersHard deny
cdx:github:workflow:hasWorkflowCallTriggerworkflow + componentboolean string"true", "false"When the workflow is designed to be invoked as a reusable workflow producerSeparates producer-side reusable workflow definitions from normal push/PR pipelinesWarning / triage
cdx:github:workflow:hasWorkflowDispatchInputsworkflow + componentboolean string"true", "false"When workflow_dispatch.inputs are declaredHighlights user-controlled inputs that can become initial-access or execution primitivesWarning / triage
cdx:github:workflow:workflowDispatchInputsworkflow + componentlist stringtarget,versionWhen workflow_dispatch.inputs are declaredLets policies and triage quickly see which user-controlled inputs existContext only
cdx:github:checkout:persistCredentialsstepboolean string"true","false"When actions/checkout step lacks persist-credentials or sets the attribute to trueExposes GITHUB_TOKEN to subsequent stepsWarning / triage
cdx:github:cache:keystepstringnpm-${{ hashFiles('**/package-lock.json') }}Cache key used in actions/cacheContext only
cdx:github:cache:keyUsesHashFilesstepboolean string"true", "false"When the cache key is content-addressed with hashFiles(...)Helps distinguish safer content-addressed caches from broader or mutable cache key patternsWarning / triage
cdx:github:cache:pathstepstring~/.npm,node_modulesCache pathContext only
cdx:github:cache:restoreKeyssteplist stringnpm-,node-modules-Comma-separated restore-key fallback patterns from actions/cacheCache poisoning risk contextContext only
cdx:github:cache:hasRestoreKeysstepboolean string"true", "false"When restore-keys are configured on a cache actionMakes cache fallback behavior explicit and easy to consume in rulesWarning / triage
cdx:github:step:hasUntrustedInterpolationstepboolean string"true","false"Direct interpolation of github.event._ or inputs._ into run: blocks.Enables command injectionHard deny
cdx:github:step:interpolatedVarssteplist stringgithub.event.pull_request.titleWarning / triage
cdx:github:step:mutatesRunnerStatestepboolean string"true","false"When a step writes to GITHUB_ENV, GITHUB_PATH, or GITHUB_OUTPUTHighlights persistence and downstream execution tampering within a workflowHard deny
cdx:github:step:runnerStateTargetssteplist stringGITHUB_ENV,GITHUB_OUTPUTWhen runner-state mutation is detectedAdds precise evidence about which mutable workflow channels were touchedWarning / triage
cdx:github:step:dispatchesWorkflowstepboolean string"true","false"When a step triggers workflow_dispatch / repository_dispatch via CLI, API, helper action, or actions/github-scriptHigh-signal lateral-movement primitive across workflows and repositoriesHard deny
cdx:github:step:dispatchKindssteplist stringworkflow_dispatch,repository_dispatchWhen dispatch behavior is detectedDistinguishes manual workflow invocations from custom repository eventsWarning / triage
cdx:github:step:dispatchTargetssteplist stringrepo:org/repo,workflow:release.ymlWhen dispatch targets can be extracted from step configuration or script bodyPreserves concrete downstream blast-radius evidenceContext only
cdx:github:step:hasLocalDispatchReceiverstepboolean string"true","false"When the dispatch target can be matched to a unique local workflow receiver definitionConverts a generic dispatch into an explicit sender → receiver workflow edgeHard deny
cdx:github:step:dispatchReceiverWorkflowFilessteplist string.github/workflows/release.ymlWhen local receiver workflow files are matchedPreserves the exact downstream workflow files reached by the senderContext only
cdx:github:step:dispatchReceiverMatchBasissteplist stringworkflow:release.yml,repository_dispatch:promoteWhen sender-target correlation succeedsExplains exactly why a local receiver match was considered high-confidenceWarning / triage
cdx:github:step:referencesForkContextstepboolean string"true","false"When a step references fork/head-repository workflow contextStrong signal for fork-to-privileged workflow routingHard deny
cdx:github:step:hasOutboundNetworkCommandstepboolean string"true","false"When a step invokes tools such as curl, wget, scp, rsync, or Invoke-WebRequestUseful exfiltration and command-and-control precursor signalWarning / triage
cdx:github:step:outboundNetworkToolssteplist stringcurl,wgetWhen outbound network tools are detectedImproves explainability for exfiltration-oriented rulesContext only
cdx:github:step:referencesSensitiveContextstepboolean string"true","false"When a run command references secret-like env vars, secrets.*, or token/OIDC contextStrong exfiltration/credential-use indicator when combined with outbound commandsHard deny
cdx:github:step:sensitiveContextRefssteplist stringenv:API_TOKEN,context:secretsWhen sensitive context references are detectedRetains exactly which secret-bearing contexts were observedWarning / triage
cdx:github:workflow:hasHighRiskTriggerworkflow + componentboolean string"true","false"When workflow has these triggers: "pull_request_target","issue_comment","workflow_run"Enables privilege escalationHard deny
cdx:actions:isOfficialstepboolean string"true", "false"On GitHub action componentsDistinguishes first-party from third-party action sourcesWarning / triage
cdx:actions:isVerifiedstepboolean string"true", "false"On GitHub action componentsHelpful trust signal but not sufficient on its ownWarning / triage
cdx:github:reusableWorkflow:usesreusable workflowstringorg/repo/.github/workflows/release.yml@mainWhen a job invokes a reusable workflow via jobs.<id>.usesMakes reusable workflow trust boundaries visible to policy enginesHard deny
cdx:github:reusableWorkflow:isExternalreusable workflowboolean string"true","false"When the reusable workflow is sourced from another repositoryDistinguishes internal/local workflow composition from external trust edgesHard deny
cdx:github:reusableWorkflow:secretsInheritreusable workflowboolean string"true","false"When secrets: inherit is used on a reusable workflow callSignals credential propagation across workflow boundariesHard deny
cdx:github:reusableWorkflow:isShaPinnedreusable workflowboolean string"true","false"When a reusable workflow ref is pinned to a commit SHAImmutable pinning signal for reusable workflow supply-chain trustHard deny
cdx:github:workflow:isWorkflowCallProducerworkflow + componentboolean string"true","false"When the current workflow exposes a workflow_call interfaceImportant provenance signal for reusable workflow producers and their public trust surfaceWarning / triage
cdx:github:workflow:workflowCallInputsworkflow + componentlist stringtarget,release_tagWhen a reusable workflow producer declares workflow_call.inputsEnumerates caller-controlled producer inputs for review and policyContext only
cdx:github:workflow:workflowCallSecretsworkflow + componentlist stringrelease_tokenWhen a reusable workflow producer declares workflow_call.secretsReveals which secrets the producer expects from callersHard deny
cdx:github:workflow:workflowCallOutputsworkflow + componentlist stringimage_tagWhen a reusable workflow producer declares workflow_call.outputsExposes the interface surface exported back to callersContext only
cdx:github:workflow:repositoryDispatchTypesworkflowlist stringpromote,release-readyWhen a workflow declares repository_dispatch.typesMakes local repository_dispatch receivers explicit and matchableWarning / triage
cdx:github:workflow:workflowDispatchReceiverAliasesworkflowlist stringrelease.yml,release,Release workflowWhen workflow receiver aliases are derived from file/nameSupports high-confidence matching between sender steps and local workflow_dispatch receiversContext only
cdx:github:workflow:hasLocalDispatchSenderworkflowboolean string"true","false"When a local sender step was matched to this workflow as a receiverPreserves the reverse edge for receiver-focused triageWarning / triage
cdx:gitlab:job:imagejobstringnode:20-alpineWhen GitLab job images are definedExposes execution environment and provenanceWarning / triage
cdx:gitlab:job:servicesjoblist stringpostgres:14,redis:7When GitLab service sidecars are declaredHighlights additional runtime trust edgesWarning / triage
cdx:azure:pool:vmImageworkflowstringubuntu-latestWhen a workflow-level pool is setBaseline runner selection for all jobsWarning / triage
cdx:azure:job:pool:vmImagejobstringwindows-latestWhen a job overrides the workflow-level poolImportant job-level override; match both Azure pool keys in policyWarning / triage
cdx:circleci:orb:aliasstepstringnode/defaultWhen CircleCI orbs are usedThird-party execution surface and trust boundaryWarning / triage
cdx:jenkins:agent:imagestagestringmaven:3.9-eclipse-temurin-21When Jenkins stages use Docker agentsUseful for runtime provenance and image policy gatesWarning / triage

High-value combinations

  • cdx:github:action:isShaPinned=false + cdx:github:workflow:hasWritePermissions=true
  • cdx:github:action:isShaPinned=false + cdx:github:job:hasWritePermissions=true
  • cdx:github:workflow:hasIdTokenWrite=true + cdx:actions:isOfficial=false
  • cdx:github:step:type=run + cdx:github:job:hasWritePermissions=true
  • cdx:gitlab:job:image present + cdx:gitlab:job:services present for untrusted pipeline paths
  • cdx:azure:trigger:branches absent + self-hosted or privileged pool policy match
  • cdx:circleci:orb:alias present + cdx:circleci:job:branch:only absent
  • cdx:jenkins:agent:image present + cdx:jenkins:stage:when absent for deployment stages

Example payload fragment

{
  "name": "actions/setup-node",
  "type": "application",
  "purl": "pkg:github/actions/setup-node@v3",
  "properties": [
    { "name": "cdx:github:action:uses", "value": "actions/setup-node@v3" },
    { "name": "cdx:github:action:versionPinningType", "value": "tag" },
    { "name": "cdx:github:action:isShaPinned", "value": "false" },
    { "name": "cdx:github:workflow:hasWritePermissions", "value": "true" },
    { "name": "cdx:actions:isOfficial", "value": "true" }
  ]
}

Alias and overlap notes

  • Prefer matching both cdx:github:action:isShaPinned and cdx:github:action:versionPinningType when possible; the former is the convenience boolean and the latter carries more nuance.
  • Match both cdx:azure:pool:vmImage (workflow-level default) and cdx:azure:job:pool:vmImage (job-level override). Job-level settings take precedence when present.

Package manager and language ecosystems

Authoritative grouped index

  • npm/pnpm: cdx:npm:artifactIntegrity, cdx:npm:artifactShasum, cdx:npm:bin, cdx:npm:binPaths, cdx:npm:buildScripts, cdx:npm:compressedCadence, cdx:npm:cpu, cdx:npm:deprecated, cdx:npm:deprecation_notice, cdx:npm:gypfile, cdx:npm:hasInstallScript, cdx:npm:hasObfuscatedLifecycleScript, cdx:npm:hasSuspiciousLifecycleScript, cdx:npm:has_binary, cdx:npm:inBundle, cdx:npm:inDepBundle, cdx:npm:installLinks, cdx:npm:isLink, cdx:npm:isRegistryDependency, cdx:npm:isWorkspace, cdx:npm:is_workspace, cdx:npm:lastModifiedTime, cdx:npm:libc, cdx:npm:lifecycleExecutionIndicators, cdx:npm:lifecycleIndicatorMap, cdx:npm:lifecycleNetworkIndicators, cdx:npm:lifecycleObfuscationIndicators, cdx:npm:maintainerOverlapCount, cdx:npm:maintainerOverlapRatio, cdx:npm:maintainerSet, cdx:npm:maintainerSetCount, cdx:npm:maintainerSetDrift, cdx:npm:maintainerSetPartialDrift, cdx:npm:nameMismatchError, cdx:npm:native_addon, cdx:npm:native_deps, cdx:npm:obfuscatedLifecycleScripts, cdx:npm:os, cdx:npm:package:development, cdx:npm:package:optional, cdx:npm:package:peer, cdx:npm:package:type-only, cdx:npm:package_json, cdx:npm:packageCreatedTime, cdx:npm:priorMaintainerSet, cdx:npm:priorMaintainerSetCount, cdx:npm:priorPublishTime, cdx:npm:priorPublisher, cdx:npm:priorVersion, cdx:npm:provenanceDigest, cdx:npm:provenanceKeyId, cdx:npm:provenancePredicateType, cdx:npm:provenanceSignature, cdx:npm:provenanceUrl, cdx:npm:publishTime, cdx:npm:publisher, cdx:npm:publisherDrift, cdx:npm:publisherEmail, cdx:npm:releaseCadenceCompressionRatio, cdx:npm:releaseGapBaselineDays, cdx:npm:releaseGapDays, cdx:npm:releaseGapSampleSize, cdx:npm:resolvedPath, cdx:npm:risky_scripts, cdx:npm:scripts, cdx:npm:suspiciousLifecycleScripts, cdx:npm:trustedPublishing, cdx:npm:versionCount, cdx:npm:versionMismatchError, cdx:pnpm:alias
  • Python: cdx:pip:markers, cdx:pip:structuredMarkers, cdx:pypi:artifactDigestBlake2b256, cdx:pypi:artifactDigestMd5, cdx:pypi:artifactDigestSha256, cdx:pypi:compressedCadence, cdx:pypi:extras, cdx:pypi:latest_version, cdx:pypi:packageCreatedTime, cdx:pypi:priorPublishTime, cdx:pypi:priorPublisher, cdx:pypi:priorUploaderSet, cdx:pypi:priorUploaderSetCount, cdx:pypi:priorVersion, cdx:pypi:provenanceDigest, cdx:pypi:provenanceKeyId, cdx:pypi:provenancePredicateType, cdx:pypi:provenanceSignature, cdx:pypi:provenanceUrl, cdx:pypi:publishTime, cdx:pypi:publisher, cdx:pypi:publisherDrift, cdx:pypi:registry, cdx:pypi:releaseCadenceCompressionRatio, cdx:pypi:releaseGapBaselineDays, cdx:pypi:releaseGapDays, cdx:pypi:releaseGapSampleSize, cdx:pypi:requiresPython, cdx:pypi:resolved_from, cdx:pypi:trustedPublishing, cdx:pypi:uploaderOverlapCount, cdx:pypi:uploaderOverlapRatio, cdx:pypi:uploaderSet, cdx:pypi:uploaderSetCount, cdx:pypi:uploaderSetDrift, cdx:pypi:uploaderSetPartialDrift, cdx:pypi:uploaderVerified, cdx:pypi:versionCount, cdx:pypi:versionSpecifiers, cdx:pyproject:group, cdx:python:requires_python, cdx:pixi:build, cdx:pixi:build_number, cdx:pixi:operating_system, cdx:pylock:* (lock_version, environments, dependency_groups, default_groups, created_by, marker, index, dependencies, vcs, directory, archive, sdist, wheels, attestation_identities, tool, and cdx:pylock:file:*)
  • Ruby: cdx:gem:executables, cdx:gem:gemUri, cdx:gem:platform, cdx:gem:prerelease, cdx:gem:remote, cdx:gem:remoteBranch, cdx:gem:remoteRevision, cdx:gem:remoteTag, cdx:gem:rubyVersionSpecifiers, cdx:gem:versionSpecifiers, cdx:gem:yanked
  • Rust: cdx:cargo:artifactDigestSha256, cdx:cargo:binNames, cdx:cargo:buildDependencyNames, cdx:cargo:buildScript, cdx:cargo:buildScriptCapabilities, cdx:cargo:buildScriptIndicators, cdx:cargo:compressedCadence, cdx:cargo:crate_id, cdx:cargo:crateSize, cdx:cargo:defaultFeatures, cdx:cargo:dependencyFeatures, cdx:cargo:dependencyKind, cdx:cargo:edition, cdx:cargo:features, cdx:cargo:git, cdx:cargo:gitBranch, cdx:cargo:gitRev, cdx:cargo:gitTag, cdx:cargo:hasBuildDependencies, cdx:cargo:hasBuildScript, cdx:cargo:hasDevDependencies, cdx:cargo:hasLib, cdx:cargo:hasNativeBuild, cdx:cargo:hasTargetDependencies, cdx:cargo:latest_version, cdx:cargo:manifestMode, cdx:cargo:nativeBuildIndicators, cdx:cargo:optional, cdx:cargo:ownerSet, cdx:cargo:ownerSetCount, cdx:cargo:package, cdx:cargo:packageCreatedTime, cdx:cargo:path, cdx:cargo:priorPublishTime, cdx:cargo:priorPublisher, cdx:cargo:priorVersion, cdx:cargo:provenanceDigest, cdx:cargo:provenanceKeyId, cdx:cargo:provenancePredicateType, cdx:cargo:provenanceSignature, cdx:cargo:provenanceUrl, cdx:cargo:publishTime, cdx:cargo:publisher, cdx:cargo:publisherDrift, cdx:cargo:publisherOverlapCount, cdx:cargo:publisherOverlapRatio, cdx:cargo:publisherSet, cdx:cargo:publisherSetCount, cdx:cargo:registry, cdx:cargo:releaseCadenceCompressionRatio, cdx:cargo:releaseGapBaselineDays, cdx:cargo:releaseGapDays, cdx:cargo:releaseGapSampleSize, cdx:cargo:releaseProfiles, cdx:cargo:rust_version, cdx:cargo:rustVersion, cdx:cargo:scope, cdx:cargo:target, cdx:cargo:trustedPublishing, cdx:cargo:usesMaturin, cdx:cargo:versionCount, cdx:cargo:workspaceDependency, cdx:cargo:workspaceMembers, cdx:cargo:workspaceRoot, cdx:cargo:yanked, cdx:maturin:*, cdx:rust:buildTool
  • Rusi Rust Evinse: cdx:rusi:schemaVersion, cdx:rusi:toolVersion, cdx:rusi:rustcVersion, cdx:rusi:cargoVersion, cdx:rusi:host, cdx:rusi:backend, cdx:rusi:analysisScope, cdx:rusi:callGraphMode, cdx:rusi:dataFlowMode, cdx:rusi:packageCount, cdx:rusi:fileCount, cdx:rusi:importCount, cdx:rusi:declarationCount, cdx:rusi:usageCount, cdx:rusi:securitySignalCount, cdx:rusi:cryptoLibraryCount, cdx:rusi:cryptoComponentCount, cdx:rusi:cryptoFindingCount, cdx:rusi:callGraphNodeCount, cdx:rusi:callGraphEdgeCount, cdx:rusi:dataFlowNodeCount, cdx:rusi:dataFlowEdgeCount, cdx:rusi:dataFlowSliceCount, cdx:rusi:importPath, cdx:rusi:importAlias, cdx:rusi:usageKind, cdx:rusi:dataFlowCategories, cdx:rusi:dataFlowRuleName, cdx:rusi:securitySignalCategory, cdx:rusi:securitySignalSeverity, cdx:rusi:cryptoFindingCategory, cdx:rusi:cryptoFindingSeverity
  • Go: cdx:go:creation_time, cdx:go:deprecated, cdx:go:indirect, cdx:go:local_dir, cdx:go:toolchain
  • Golem Go Evinse: cdx:golem:toolVersion, cdx:golem:callGraphMode, cdx:golem:dataFlowMode, cdx:golem:dataFlowCallGraphMode, cdx:golem:noRecurse, cdx:golem:includeAllFlows, cdx:golem:packageCount, cdx:golem:moduleCount, cdx:golem:fileCount, cdx:golem:generatedFileCount, cdx:golem:importCount, cdx:golem:declarationCount, cdx:golem:usageCount, cdx:golem:runtimeUsageCount, cdx:golem:testUsageCount, cdx:golem:benchmarkUsageCount, cdx:golem:fuzzUsageCount, cdx:golem:exampleUsageCount, cdx:golem:buildDirectiveCount, cdx:golem:nativeArtifactCount, cdx:golem:securitySignalCount, cdx:golem:goModReplaceCount, cdx:golem:goModExcludeCount, cdx:golem:vendorModuleCount, cdx:golem:workspaceModuleCount, cdx:golem:privateModuleHintCount, cdx:golem:licenseFileModuleCount, cdx:golem:callGraphNodeCount, cdx:golem:callGraphEdgeCount, cdx:golem:buildDirectiveKinds, cdx:golem:nativeArtifactKinds, cdx:golem:securitySignalCategories, cdx:golem:securitySignalSeverities, cdx:golem:generatorKinds, cdx:golem:goDirectiveVersion, cdx:golem:toolchainDirective, cdx:golem:goWorkPresent, cdx:golem:vendorDirectoryPresent, cdx:golem:goGenerateCount, cdx:golem:goEmbedCount, cdx:golem:replaceModule, cdx:golem:replaceTargetPathKind, cdx:golem:localReplacementPresent, cdx:golem:excludeModule, cdx:golem:vendored, cdx:golem:privateModuleCandidate, cdx:golem:licenseFileCount, cdx:golem:licenseFiles, cdx:golem:replacementModule, cdx:golem:localReplacement, cdx:golem:modulePath, cdx:golem:goVersion, cdx:golem:mainModule, cdx:golem:securitySignalCategory, cdx:golem:securitySignalSeverity, cdx:golem:importDirect, cdx:golem:importAliasKind, cdx:golem:symbolKind, cdx:golem:usageKind, cdx:golem:usageScope, cdx:golem:usageScopes, cdx:golem:testOnly, cdx:golem:importOccurrenceCount, cdx:golem:symbolCallOccurrenceCount, cdx:golem:symbolReferenceOccurrenceCount, cdx:golem:occurrenceEvidenceKinds
  • Collider: cdx:collider:dependencyKind, cdx:collider:hasWrapHash, cdx:collider:origin, cdx:collider:originHost, cdx:collider:originSanitized, cdx:collider:originScheme, cdx:collider:wrapHash, cdx:collider:wrapHashInvalid
  • .NET: cdx:dotnet:assembly_name, cdx:dotnet:assembly_version, cdx:dotnet:azure_functions_version, cdx:dotnet:hint_path, cdx:dotnet:project_guid, cdx:dotnet:target_framework
  • Java: cdx:maven:shaded, cdx:maven:unshadedNamespaces, cdx:gradle:GradleRootPath
  • Nix: cdx:nix:flake_dir, cdx:nix:input_url, cdx:nix:last_modified, cdx:nix:nar_hash, cdx:nix:ref, cdx:nix:revision
  • Swift: cdx:swift:localCheckoutPath, cdx:swift:packageName
  • CocoaPods: cdx:pods:PodName, cdx:pods:Subspec, cdx:pods:podspecLocation, cdx:pods:projectDir
  • Dart pub: cdx:pub:registry
  • Deno: cdx:deno:source, cdx:deno:jsrKey, cdx:deno:integrity

Decision-oriented sub-groups

  • Provenance / source: cdx:npm:isRegistryDependency, cdx:npm:resolvedPath, cdx:pypi:registry, cdx:pypi:resolved_from, cdx:gem:remote, cdx:gem:remoteRevision, cdx:cargo:git, cdx:cargo:gitRev, cdx:cargo:path, cdx:cargo:registry, cdx:go:local_dir, cdx:golem:localReplacement, cdx:golem:replacementModule, cdx:golem:privateModuleCandidate, cdx:golem:vendored, cdx:nix:input_url, cdx:swift:localCheckoutPath, cdx:pods:projectDir, cdx:pub:registry, cdx:deno:source, cdx:collider:origin, cdx:collider:originScheme, cdx:collider:originHost, cdx:collider:originSanitized
  • Execution surface: cdx:npm:hasInstallScript, cdx:npm:risky_scripts, cdx:npm:native_addon, cdx:npm:native_deps, cdx:gem:executables, cdx:cargo:features, cdx:cargo:hasBuildScript, cdx:cargo:hasNativeBuild, cdx:cargo:nativeBuildIndicators, cdx:cargo:buildScriptCapabilities, cdx:cargo:buildScriptIndicators, cdx:rust:buildTool, cdx:maturin:*, cdx:golem:goGenerateCount, cdx:golem:goEmbedCount, cdx:golem:nativeArtifactCount, cdx:golem:securitySignalCategory, cdx:golem:securitySignalSeverity, cdx:rusi:usageKind, cdx:rusi:cryptoFindingCategory, cdx:rusi:cryptoFindingSeverity
  • Privilege / trust: cdx:npm:nameMismatchError, cdx:npm:versionMismatchError, cdx:gem:yanked, cdx:cargo:yanked, cdx:cargo:trustedPublishing, cdx:go:deprecated, cdx:golem:securitySignalSeverity, cdx:golem:localReplacement, cdx:maven:shaded, cdx:collider:originSanitized, cdx:rusi:securitySignalSeverity
  • Reproducibility / drift: cdx:pypi:latest_version, cdx:gem:remoteBranch, cdx:gem:remoteTag, cdx:cargo:priorVersion, cdx:cargo:publishTime, cdx:cargo:priorPublishTime, cdx:cargo:publisherDrift, cdx:cargo:releaseGapDays, cdx:cargo:releaseGapBaselineDays, cdx:cargo:releaseCadenceCompressionRatio, cdx:nix:nar_hash, cdx:nix:revision, cdx:nix:last_modified, cdx:go:creation_time, cdx:collider:hasWrapHash, cdx:collider:wrapHash, cdx:collider:wrapHashInvalid
  • Environment / targeting: cdx:npm:cpu, cdx:npm:os, cdx:npm:libc, cdx:pip:markers, cdx:python:requires_python, cdx:pypi:requiresPython, cdx:pixi:operating_system, cdx:dotnet:target_framework, cdx:dotnet:azure_functions_version, cdx:gem:platform, cdx:cargo:rust_version, cdx:cargo:rustVersion, cdx:cargo:target

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:npm:hasInstallScriptcomponentboolean string"true", "false"When risky npm lifecycle hooks are presentCaptures install-time code execution riskHard deny
cdx:npm:bincomponentlist stringlicense-report, ngWhen npm package metadata declares one or more executable bin commandsLets consumers identify CLI execution surface; cdxgen also uses it to match script-invoked commands to the owning package and keep such components requiredWarning / triage
cdx:npm:has_binarycomponentboolean string"true"When npm package metadata declares a bin entryQuick boolean for packages exposing executable commandsWarning / triage
cdx:npm:binPathscomponentlist stringnode_modules/.bin/ngWhen npm/arborist exposes installed binary link pathsProvides installed-path evidence for executable packages and supports command-to-package matchingContext only
cdx:npm:hasObfuscatedLifecycleScriptcomponentboolean string"true", "false"When install hooks combine encoded/obfuscated payload handling with execution or delivery primitivesHigh-confidence supply-chain abuse indicator for npm lifecycle hooksHard deny
cdx:npm:lifecycleObfuscationIndicatorscomponentlist stringast:buffer-base64,long-base64-literalWhen inline hook commands or referenced JS files contain encoded loader indicatorsMakes hidden payload techniques visible to policy and triageWarning / triage
cdx:npm:lifecycleExecutionIndicatorscomponentlist stringast:child-process,evalWhen install hooks or referenced JS files expose execution primitivesSeparates generic install hooks from active payload executionWarning / triage
cdx:npm:lifecycleIndicatorMapcomponentstringpostinstall:ast:buffer-base64+ast:child-processWhen lifecycle analysis can map indicators back to specific script namesPreserves script-level evidence without storing full payloadsContext only
cdx:npm:risky_scriptscomponentlist stringpreinstall,postinstallWhen risky lifecycle hooks are detectedHuman-readable explanation for why hasInstallScript was setWarning / triage
cdx:npm:buildScriptsmetadata componentlist stringbuild, compileWhen a package's scripts field contains build-related script names (matching build, compile, bundle, pack, dist, watch, or similar)Surfaces build toolchain invocation surface on the root component; useful for identifying which packages drive the build pipeline and for policy decisions about build-time riskContext only
cdx:npm:isRegistryDependencycomponentboolean string"true", "false"For npm components with resolvable source typeDistinguishes registry dependencies from git/file/local/workspace sourcesHard deny
cdx:npm:native_addoncomponentboolean string"true", "false"When a package builds native codeHighlights additional build and execution surfaceWarning / triage
cdx:npm:nameMismatchErrorcomponentstringExpected 'foo', found 'foo-esm'When name resolution mismatches are detectedUseful dependency-confusion and tampering signalHard deny
cdx:npm:versionMismatchErrorcomponentstringResolved 3.0.0, expected ^2.0When locked/resolved version diverges from expectationFlags drift, corruption, or surprising resolutionHard deny
cdx:npm:trustedPublishingcomponentboolean string"true"When npm registry metadata exposes attestation/provenance evidence for the resolved versionStrong positive signal that the published version includes registry-visible provenance evidenceWarning / triage
cdx:npm:provenanceUrlcomponentURL stringhttps://registry.npmjs.org/-/npm/v1/attestations/...When npm exposes an attestation or provenance URL for the resolved versionUseful provenance pivot for attestations, explainability, and downstream verificationContext only
cdx:npm:provenanceDigestcomponentlist stringsha256:abc...,sha512:def...When npm provenance metadata exposes subject or attestation digestsGives audit rules an exact immutable evidence token beyond the registry URLContext only
cdx:npm:provenanceKeyIdcomponentlist stringsigstore-npm-keyWhen npm provenance metadata exposes signature key identifiersSupports key-based allowlists, trust pinning, and explainabilityWarning / triage
cdx:npm:provenanceSignaturecomponentlist stringMEUCIQD...When npm provenance metadata exposes raw signature valuesRetains exact cryptographic evidence for downstream verificationContext only
cdx:npm:provenancePredicateTypecomponentlist stringhttps://slsa.dev/provenance/v1When npm provenance metadata exposes a predicate typeLets policies distinguish SLSA/in-toto style attestationsContext only
cdx:npm:artifactIntegritycomponentstringsha512-...When npm dist.integrity is presentExact package artifact integrity token useful for verification and incident responseWarning / triage
cdx:npm:artifactShasumcomponentstringdeadbeef...When npm dist.shasum is presentAdditional artifact fingerprint for audit evidence and correlationContext only
cdx:npm:publishercomponentstringocto-maintainerWhen npm version metadata exposes the publishing identityHelpful provenance and publisher-trust contextContext only
cdx:npm:publisherEmailcomponentstringmaintainer@example.comWhen npm version metadata exposes publisher emailAdditional provenance context; not strong enough as a standalone gateContext only
cdx:npm:publishTimecomponenttimestamp2026-04-01T10:00:00.000ZWhen npm registry timestamps the resolved versionUseful for recency, drift, and incident scopingWarning / triage
cdx:npm:packageCreatedTimecomponenttimestamp2024-01-01T10:00:00.000ZWhen npm registry exposes package creation timeDistinguishes mature packages from brand-new packages for drift heuristicsContext only
cdx:npm:lastModifiedTimecomponenttimestamp2026-04-01T10:00:00.000ZWhen npm registry exposes the latest modification timeUseful for release cadence and incident scopingContext only
cdx:npm:versionCountcomponentnumber string12Derived from npm registry release historyHelps recent-release and publisher-drift heuristics ignore tiny historiesContext only
cdx:npm:priorVersioncomponentstring1.2.2When a prior publish exists before the resolved versionUseful pivot for change review and comparisonContext only
cdx:npm:priorPublishTimecomponenttimestamp2026-03-01T10:00:00.000ZWhen a prior publish exists before the resolved versionSupports recency and release-gap analysisContext only
cdx:npm:priorPublishercomponentstringprevious-publisherWhen npm version history exposes the previous publisherUseful for publisher-change reviewWarning / triage
cdx:npm:publisherDriftcomponentboolean string"true"When the resolved version publisher differs from the prior release publisherConservative drift signal for mature packagesWarning / triage
cdx:npm:maintainerSetcomponentlist stringalice, alice@example.comWhen npm version metadata exposes maintainer identitiesUseful for maintainer continuity reviewContext only
cdx:npm:priorMaintainerSetcomponentlist stringbob, bob@example.comWhen a prior version exposes maintainer identitiesUseful comparison pivot for maintainer-set driftContext only
cdx:npm:maintainerSetDriftcomponentboolean string"true"When current and prior maintainer identity sets are fully disjointConservative maintainer drift signal for mature packagesWarning / triage
cdx:npm:maintainerSetPartialDriftcomponentboolean string"true"When current and prior maintainer identity sets partially overlap but still changeLow-severity maintainer churn signal for mature packagesWarning / triage
cdx:npm:maintainerOverlapCountcomponentnumber string1Derived from the shared identities between current and prior maintainer setsExplainability signal for maintainer continuityContext only
cdx:npm:maintainerOverlapRatiocomponentnumber string0.33Shared-identity overlap divided by the maintainer-set unionHelps distinguish partial churn from full continuity or full driftContext only
cdx:npm:releaseGapDayscomponentnumber string240.00Derived from the gap between the current and previous releaseUseful for dormant-package revival and cadence anomaly reviewWarning / triage
cdx:npm:releaseGapBaselineDayscomponentnumber string12.00Derived from older adjacent release gaps before the current releaseProvides cadence baseline for anomaly detectorsContext only
cdx:npm:releaseGapSampleSizecomponentnumber string4Count of prior release gaps used to compute the baselineHelps policies ignore thin release historiesContext only
cdx:npm:releaseCadenceCompressionRatiocomponentnumber string0.11Derived from current gap ÷ baseline gap when enough history existsExplainability signal for materially faster-than-usual releasesContext only
cdx:npm:compressedCadencecomponentboolean string"true"When the current release arrives materially faster than the established cadence baselineLow-severity cadence anomaly signal for mature packagesWarning / triage
cdx:npm:package:developmentcomponentboolean string"true"When an npm package is marked as dev: true or devOptional: true in package-lock metadataDistinguishes development-only npm packages from optional runtime packagesContext only
cdx:npm:package:optionalcomponentboolean string"true"When an npm package is marked as optional: true in package-lock metadataDistinguish optional packagesContext only
cdx:npm:package:peercomponentboolean string"true"When an npm package is marked as a peer dependency in package-lock metadataDistinguish peer dependenciesContext only
cdx:npm:package:type-onlycomponentboolean string"true"When an npm package is identified as a type-only package based on static analysisDistinguish type-only dependencies from required and optional dependenciesContext only
cdx:npm:isWorkspacecomponentboolean string"true", "false"For workspace membersPreferred workspace indicatorContext only
cdx:npm:is_workspacecomponentboolean string"true", "false"Legacy/alternate workspace spellingKeep in policy allowlists for compatibilityContext only
cdx:pypi:registrycomponentURL stringhttps://internal-pypi.example.com/simpleWhen a non-default Python registry is usedStrong allowlist / denylist input for dependency origin policyHard deny
cdx:pypi:trustedPublishingcomponentboolean string"true"When PyPI release metadata exposes attestation/provenance evidence for the resolved versionStrong positive provenance signal for trusted publishing or attestationsWarning / triage
cdx:pypi:provenanceUrlcomponentURL stringhttps://pypi.org/integrity/.../provenanceWhen PyPI exposes a provenance or integrity URL for a resolved artifactUseful provenance pivot for downstream verificationContext only
cdx:pypi:provenanceDigestcomponentlist stringsha256:abc...When PyPI provenance or attestation metadata exposes digestsGives audit rules exact immutable provenance evidenceContext only
cdx:pypi:provenanceKeyIdcomponentlist stringsigstore-pypi-keyWhen PyPI provenance or attestation metadata exposes signature key identifiersSupports key-based allowlists and trust explainabilityWarning / triage
cdx:pypi:provenanceSignaturecomponentlist stringc2lnbmF0dXJlWhen PyPI provenance or attestation metadata exposes raw signaturesRetains exact cryptographic evidence for downstream verificationContext only
cdx:pypi:provenancePredicateTypecomponentlist stringhttps://docs.pypi.org/attestations/publish/v1When PyPI provenance metadata exposes a predicate typeHelps policies distinguish attestation formatsContext only
cdx:pypi:artifactDigestSha256componentlist stringabcdef...When PyPI release file metadata exposes SHA-256 digestsExact release-file fingerprint useful for audit evidence and verificationWarning / triage
cdx:pypi:artifactDigestBlake2b256componentlist string012345...When PyPI release file metadata exposes BLAKE2b-256 digestsAdditional artifact fingerprint for correlation and verificationContext only
cdx:pypi:artifactDigestMd5componentlist stringdeadbeef...When PyPI release file metadata exposes MD5 digestsLegacy integrity context; weaker than SHA-256 but still useful for correlationContext only
cdx:pypi:publishercomponentstringtrusted-publisherWhen release metadata includes uploader identityHelpful provenance context for triage and publisher reviewsContext only
cdx:pypi:uploaderVerifiedcomponentboolean string"true"When PyPI release metadata marks the uploader as verifiedUseful trust signal, but weaker than signed provenanceWarning / triage
cdx:pypi:publishTimecomponenttimestamp2026-03-20T08:15:30.000ZWhen PyPI release metadata includes upload timestampsUseful for incident scoping, release recency, and drift analysisWarning / triage
cdx:pypi:packageCreatedTimecomponenttimestamp2025-12-20T08:15:30.000ZDerived from the earliest known release upload timeDistinguishes mature packages from brand-new packages for drift heuristicsContext only
cdx:pypi:versionCountcomponentnumber string8Derived from PyPI release historyHelps recent-release and drift heuristics avoid small-package false positivesContext only
cdx:pypi:priorVersioncomponentstring1.9.0When a prior release exists before the resolved versionUseful comparison pivot for audit and rollout reviewContext only
cdx:pypi:priorPublishTimecomponenttimestamp2025-12-20T08:15:30.000ZWhen a prior release exists before the resolved versionSupports recency and release-gap analysisContext only
cdx:pypi:priorPublishercomponentstringprevious-uploaderWhen prior-release uploader identity is availableUseful for uploader-change reviewWarning / triage
cdx:pypi:publisherDriftcomponentboolean string"true"When current uploader identities differ from the prior release uploader setConservative uploader-drift signal for mature packagesWarning / triage
cdx:pypi:uploaderSetcomponentlist stringtrusted-publisherWhen PyPI release metadata exposes uploader identitiesUseful for uploader continuity reviewContext only
cdx:pypi:priorUploaderSetcomponentlist stringprevious-uploaderWhen a prior release exposes uploader identitiesUseful comparison pivot for uploader-set driftContext only
cdx:pypi:uploaderSetDriftcomponentboolean string"true"When current and prior uploader identity sets are fully disjointConservative uploader-set drift signal for mature packagesWarning / triage
cdx:pypi:uploaderSetPartialDriftcomponentboolean string"true"When current and prior uploader identity sets partially overlap but still changeLow-severity uploader churn signal for mature packagesWarning / triage
cdx:pypi:uploaderOverlapCountcomponentnumber string1Derived from the shared identities between current and prior uploader setsExplainability signal for uploader continuityContext only
cdx:pypi:uploaderOverlapRatiocomponentnumber string0.33Shared-identity overlap divided by the uploader-set unionHelps distinguish partial churn from full continuity or full driftContext only
cdx:pypi:releaseGapDayscomponentnumber string240.00Derived from the gap between the current and previous releaseUseful for dormant-package revival and cadence anomaly reviewWarning / triage
cdx:pypi:releaseGapBaselineDayscomponentnumber string12.00Derived from older adjacent release gaps before the current releaseProvides cadence baseline for anomaly detectorsContext only
cdx:pypi:releaseGapSampleSizecomponentnumber string4Count of prior release gaps used to compute the baselineHelps policies ignore thin release historiesContext only
cdx:pypi:releaseCadenceCompressionRatiocomponentnumber string0.11Derived from current gap ÷ baseline gap when enough history existsExplainability signal for materially faster-than-usual releasesContext only
cdx:pypi:compressedCadencecomponentboolean string"true"When the current release arrives materially faster than the established cadence baselineLow-severity cadence anomaly signal for mature packagesWarning / triage
cdx:pylock:markercomponentstringpython_version >= "3.11"When parsed from PEP 751 pylock.toml package markersPreserves lock-file install-condition context not modeled by CycloneDXWarning / triage
cdx:pylock:dependenciescomponentJSON string[{"name":"attrs","version":"25.1.0"}]When dependency selectors are recorded in pylockRetains selector-level dependency metadata used for auditingContext only
cdx:pylock:file:urlcomponent(file)URL stringhttps://files.pythonhosted.org/...whlFor pylock archive/sdist/wheel file entriesCaptures artifact provenance details for reproducibility and verificationWarning / triage
cdx:pypi:versionSpecifierscomponentstring>=1.0,<2.0, ==2.31.0When Python constraints are parsedImportant for pinning strictness and drift analysisWarning / triage
cdx:pip:markerscomponentstringpython_version >= "3.11"When marker-based conditional deps are presentReveals conditional attack surface and environment sensitivityWarning / triage
cdx:pip:structuredMarkerscomponentJSON stringserialized marker ASTWhen structured markers are availableBetter machine-readable alternative to raw marker stringsWarning / triage
cdx:python:requires_pythoncomponent/metadatastring>=3.9When root interpreter constraints are knownLets policies detect unsupported or mismatched environmentsWarning / triage
cdx:gem:remoteRevisioncomponentstringgit commit SHAWhen a gem is pinned to a git revisionPreferred immutable Ruby VCS source signalWarning / triage
cdx:gem:remoteBranchcomponentstringmainWhen a gem tracks a git branchMutable source indicatorHard deny
cdx:gem:remoteTagcomponentstringv1.2.3When a gem tracks a git tagMutable source indicator unless combined with revisionWarning / triage
cdx:gem:yankedcomponentboolean string"true", "false"When registry metadata shows the gem was yankedUseful integrity and availability signalHard deny
cdx:cargo:featurescomponentJSON stringserialized feature mapWhen Cargo features are presentIndicates additional code paths and feature-based exposureWarning / triage
cdx:cargo:gitcomponentURL stringhttps://github.com/org/crateWhen Cargo dependency uses a git sourceMutable/non-registry provenance signal; combine with gitRev or gitTag to assess pinningHard deny
cdx:cargo:pathcomponentpath string../local-crateWhen Cargo dependency uses a local path sourceStrong non-hermetic local source signalHard deny
cdx:cargo:dependencyKindcomponentenum stringruntime, build, devWhen Cargo manifest dependency sections are parsedDistinguishes runtime from build/test-only surfacesWarning / triage
cdx:cargo:targetcomponenttarget selector stringcfg(target_os = "linux")When dependency is scoped to a Cargo target stanzaHelps separate platform-specific dependency exposureWarning / triage
cdx:cargo:yankedcomponentboolean string"true"When crates.io metadata shows the selected crate version was yankedHigh-signal registry integrity and lifecycle warningHard deny
cdx:cargo:trustedPublishingcomponentboolean string"true"When crates.io metadata exposes trusted publishing / provenance evidencePositive provenance signal for Cargo releasesWarning / triage
cdx:cargo:hasNativeBuildcomponent/formulationboolean string"true"When Cargo build.rs or native build helper crates are detectedFlags expanded execution surface in Rust build pipelinesWarning / triage
cdx:cargo:buildScriptCapabilitiesformulation componentlist stringprocess-execution, linker-directivesWhen Cargo build.rs content is available for heuristic inspectionMakes build-time execution, linker, file-generation, or network behavior visible to policyWarning / triage
cdx:cargo:workspaceRootcomponentpath string/repo/Cargo.tomlWhen a Cargo package inherits metadata or dependencies from a workspace rootHelps explain version/license/source inheritance and workspace-scoped dependency resolutionContext only
cdx:cargo:workspaceDependencycomponentboolean string"true"When a Cargo dependency entry is inherited via workspace = trueDistinguishes workspace-managed dependencies from standalone manifest entriesContext only
cdx:cargo:workspaceDependencyResolvedcomponentboolean string"true"When a workspace-managed Cargo dependency resolves to another workspace memberHelps distinguish build-only workspace helpers from runtime-facing member cratesWarning / triage
cdx:cargo:resolvedWorkspaceMembercomponentstringcoreWhen a workspace dependency resolves to a specific member crateUseful for member-to-member graph review and workspace triageContext only
cdx:cargo:resolvedMemberPathcomponentpath string/repo/crates/core/Cargo.tomlWhen a workspace dependency resolves to a specific member manifestMakes inherited/path-like workspace relationships explicitContext only
cdx:cargo:cacheSourcecomponentenum stringregistry-cacheWhen a component is cataloged from the Cargo cache project typeDifferentiates cached crate inventory from source-manifest or lockfile-derived inventoryContext only
cdx:rust:buildToolformulation componentenum stringcargo, maturinWhen formulation parsing detects Rust build/release toolingLets audit rules pivot on Cargo vs maturin build pathsContext only
cdx:github:action:ecosystemworkflow componentenum stringcargoWhen a GitHub Action is recognized as ecosystem-specific tooling such as Cargo setup/cache actionsLets BOM audit and cdx-audit correlate exact ecosystem tooling actions with build surfacesContext only
cdx:github:action:roleworkflow componentlist stringtoolchain, cache, tool-installWhen a GitHub Action is recognized as a toolchain/cache/install actionUseful for distinguishing setup steps from cache restores or installer helpersWarning / triage
cdx:github:step:usesCargoworkflow componentboolean string"true"When a workflow run: step executes one or more Cargo commandsLets rules correlate Cargo build/test/package/publish activity with native build surfacesWarning / triage
cdx:github:step:cargoSubcommandsworkflow componentlist stringbuild, testWhen a workflow run: step executes Cargo subcommandsPreserves the high-level Cargo operation mix seen in CI/CDWarning / triage
cdx:github:step:cargoWorkspaceScopeworkflow componentboolean string"true"When a workflow Cargo command operates across --workspace, --all, or --all-targetsHighlights workflow steps that exercise more of a workspace than a single crateWarning / triage
cdx:go:local_dircomponentpath string../local-moduleWhen Go replace points to a local pathStrong non-hermetic build signalHard deny
cdx:go:deprecatedcomponentstringdeprecation messageWhen Go module metadata is deprecatedGood triage and lifecycle signalWarning / triage
cdx:golem:securitySignalSeveritycomponentenum stringhighWhen Golem maps a security-sensitive Go API signal back to a modulePrioritizes semantic source review beyond manifest presenceHard deny
cdx:golem:securitySignalCategorycomponentenum/list stringweak-cryptoAlongside Golem security signal severityExplains what class of API usage or configuration triggered reviewWarning / triage
cdx:golem:usageScopescomponentlist stringruntime,testWhen imports or symbol usages map to a Go moduleSeparates production usage from test, benchmark, fuzz, or example-only evidenceWarning / triage
cdx:golem:occurrenceEvidenceKindscomponentlist stringimport,symbolCallWhen Golem can explain how a module was observedTells reviewers whether evidence came from import presence or symbol-level usageContext only
cdx:golem:localReplacementcomponentboolean string"true"When the analyzed Go module graph marks a dependency as locally replacedStrong non-hermetic build and provenance bypass signalHard deny
cdx:golem:privateModuleCandidatecomponentboolean string"true"When Golem identifies a module as likely private or internalRequires internal provenance, access-control, and license-review evidenceWarning / triage
cdx:golem:vendoredcomponentboolean string"true"When a module appears in the vendor treeUseful for redistribution and license-file completeness checksWarning / triage
cdx:golem:licenseFileCountcomponentnumber string1When Golem maps license files to a moduleSupports vendored module compliance and release evidence reviewWarning / triage
cdx:golem:callGraphModemetadata.componentenum stringnone, static, cha, rta, vtaOn the root metadata component after Go Evinse runs GolemExplains precision and performance trade-offs for the evidence runContext only
cdx:golem:nativeArtifactCountmetadata.componentnumber string3When Golem sees C, C++, Objective-C, assembly, native objects, cgo, or related sidecarsHighlights cross-platform, build-performance, and native review surfaceWarning / triage
cdx:collider:dependencyKindcomponentenum stringdirect, transitiveWhen parsing Collider lockfile entries from dependencies vs packagesDistinguishes root intent from lock-only transitive inventoryContext only
cdx:collider:origincomponentURL stringhttps://packages.example.com/collider/v2/When Collider lockfile origin metadata is present (sanitized before emission)Provenance signal for repository allowlists and mirror policyWarning / triage
cdx:collider:originSchemecomponentenum stringhttps, http, fileDerived from sanitized Collider origin URLUseful for blocking insecure HTTP origins or isolating local/offline mirrorsHard deny
cdx:collider:originHostcomponentstringpackages.example.comWhen the sanitized Collider origin has a network hostHandy for host-level allowlists and explainabilityContext only
cdx:collider:originSanitizedcomponentboolean string"true"When credentials, query strings, or fragments were stripped from Collider origin metadataSignals potentially secret-bearing or unstable signed URLs in the original lockfileWarning / triage
cdx:collider:hasWrapHashcomponentboolean string"true", "false"When Collider lockfile wrap hash metadata is present and validFast integrity gate for wrap-hash-pinned reproducibilityHard deny
cdx:collider:wrapHashcomponentstringsha256:abc123...When Collider lockfile records the wrap file digestExact immutable wrap fingerprint for verification and incident correlationWarning / triage
cdx:collider:wrapHashInvalidcomponentboolean string"true"When Collider lockfile contains a malformed wrap hashHigh-signal integrity issue indicating a stale, malformed, or tampered lock entryHard deny
cdx:dotnet:hint_pathcomponentpath string..\\..\\lib\\external.dllWhen .NET assembly references use HintPathUseful for local/GAC/side-loaded binary provenanceWarning / triage
cdx:maven:shadedcomponentboolean string"true", "false"When shaded/relocated bytecode is detectedCan signal vendoring, obfuscation, or namespace relocation riskWarning / triage
cdx:nix:revisioncomponentstringgit commit SHAWhen flake lock contains a revisionImportant reproducibility anchorHard deny
cdx:nix:nar_hashcomponentstringsha256-...When flake lock contains content hashImportant integrity and reproducibility anchorHard deny
cdx:nix:input_urlcomponentURL stringgithub:nixos/nixpkgs/nixos-24.05When flake input URLs are parsedProvenance signal for source origin policyWarning / triage
cdx:swift:localCheckoutPathcomponentpath stringcheckouts/MyDep-1.0.0When SwiftPM uses a local checkoutDetects local or developer-only dependency provenanceHard deny
cdx:pods:projectDircomponentpath string/path/to/projectWhen CocoaPods uses a local project directoryLocal provenance signal for pod sourcingWarning / triage
cdx:pub:registrycomponentURL stringhttps://pub.company.exampleWhen Dart pub uses a non-default registryUseful for registry allowlistsHard deny
cdx:deno:sourcecomponentstringjsr, npm, httpsOn every component parsed from a deno.lock, recording which Deno dependency channel it originated fromDistinguishes JSR, npm-registry, and remote https:// URL imports so registry/source allowlists can treat them differentlyHard deny
cdx:deno:jsrKeycomponentstring@std/assert@1.0.19On JSR components, whose purl is rewritten to the @jsr/<owner>__<name> npm-compat formPreserves the original JSR identity for traceability and to pivot back from the npm-compat purlContext only
cdx:deno:integritycomponentstringeaada96ee120... (raw sha256 hex)On JSR components that carry a Deno-provided integrity hashRecords the source-verbatim JSR integrity digest as published in deno.lock for reproducibility and verificationContext only
cdx:scala:compilerVersioncomponentstring3, 2.13The Scala compiler target binary version extracted from the artifact name suffixSupports downstream package matching and precise Scala version verificationContext only

High-value combinations

  • cdx:npm:hasInstallScript=true + cdx:npm:isRegistryDependency=false
  • cdx:npm:native_addon=true + platform constraints (cdx:npm:cpu, cdx:npm:os, cdx:npm:libc)
  • cdx:npm:isLink=true + cdx:npm:resolvedPath present + cdx:npm:isWorkspace=false
  • cdx:npm:nameMismatchError or cdx:npm:versionMismatchError present
  • cdx:pypi:registry non-allowlisted + unpinned cdx:pypi:versionSpecifiers
  • cdx:pip:markers present + incompatible cdx:python:requires_python
  • cdx:gem:remote=git + cdx:gem:remoteBranch without cdx:gem:remoteRevision
  • cdx:gem:yanked=true
  • cdx:cargo:git present + missing cdx:cargo:gitRev and cdx:cargo:gitTag
  • cdx:cargo:path present in release-oriented BOMs
  • cdx:cargo:yanked=true
  • cdx:rust:buildTool=cargo + cdx:cargo:hasNativeBuild=true
  • cdx:cargo:workspaceDependencyResolved=true + cdx:cargo:dependencyKind=build
  • cdx:rust:buildTool=cargo + cdx:cargo:hasNativeBuild=true + Cargo workflow setup action not SHA pinned
  • cdx:rust:buildTool=cargo + cdx:cargo:buildScriptCapabilities includes process-execution or network-access + workflow runs cargo build, cargo test, cargo package, or cargo publish
  • cdx:go:local_dir present + repository policy forbids local replacement
  • cdx:golem:securitySignalSeverity=high + cdx:golem:usageScopes contains runtime
  • cdx:golem:vendored=true + missing or zero cdx:golem:licenseFileCount
  • cdx:golem:localReplacement=true + release or CI build context
  • cdx:rusi:securitySignalSeverity=high + cdx:rusi:usageKind contains runtime usage
  • cdx:rusi:cryptoFindingSeverity=high + cdx:rusi:dataFlowCategories contains sensitive data flows
  • cdx:nix:ref present without cdx:nix:revision or cdx:nix:nar_hash
  • cdx:swift:localCheckoutPath present + production release profile
  • cdx:pods:projectDir present + remote podspec source mismatch
  • cdx:collider:originScheme=http
  • cdx:collider:originSanitized=true
  • cdx:collider:hasWrapHash=false or cdx:collider:wrapHashInvalid=true

Golem Go Evinse evidence

cdx:golem:* properties are emitted by evinse -l go when the golem helper is available. They are intentionally split between the root metadata component, the analyzed Go application component, dependency components, and rendered cryptographic-asset components.

Use metadata-level values to judge the evidence run: tool version, call graph/data-flow modes, file/module counts, generated file counts, native artifact counts, security signal totals, build directive kinds, Go directive version, toolchain directive, workspace/vendor presence, and data-flow performance counters.

Use component-level values to judge dependency posture: module path, Go version, usage scopes, occurrence evidence kinds, direct import status, symbol usage kind, local replacement status, vendoring, private module hints, license-file evidence, security signal category/severity, data-flow categories, crypto-flow flags, and call-stack/occurrence coverage.

Use crypto-asset values to judge CBOM pivots: source symbol, usage scope, strength, source location, algorithm OID, protocol type/version, or related crypto material type. cdxgen intentionally does not assign purls to cryptographic-asset components.

These properties are safe for policy because they are small values, counts, categories, source locations, and module facts. They do not copy Go generator commands, environment values, HTTP parameter values, raw key material, plaintext, ciphertext, embedded file contents, generated file contents, or secrets into the BOM. Source file names and private module paths can still reveal internal structure, so review an enriched BOM before sharing it outside the organization.

The built-in BOM audit categories golem-security, golem-performance, and golem-compliance use these properties directly. In cdxi, use .golemsummary, .golemhotspots, and .golemcoverage to inspect the same evidence interactively.

Golem metadata-level inventory
PropertyMeaning
cdx:golem:toolVersionGolem helper version.
cdx:golem:callGraphModeMain call graph mode (none, static, cha, rta, vta).
cdx:golem:dataFlowModeData-flow mode (none, security, crypto, all).
cdx:golem:dataFlowCallGraphModeCall graph mode used for data-flow dynamic summary replay.
cdx:golem:noRecurse, cdx:golem:includeAllFlowsEffective recursive child-module discovery and module-cache-only flow filtering defaults.
cdx:golem:dataFlowPacksData-flow pattern packs used for the run.
cdx:golem:packageCount, cdx:golem:moduleCount, cdx:golem:fileCountProject size counters.
cdx:golem:generatedFileCount, cdx:golem:generatorKindsGenerated source counters and safe generator categories.
cdx:golem:importCount, cdx:golem:declarationCount, cdx:golem:usageCountImport, declaration, and typed usage counters.
cdx:golem:runtimeUsageCount, cdx:golem:testUsageCount, cdx:golem:benchmarkUsageCount, cdx:golem:fuzzUsageCount, cdx:golem:exampleUsageCountUsage-scope counters.
cdx:golem:buildDirectiveCount, cdx:golem:buildDirectiveKinds, cdx:golem:goGenerateCount, cdx:golem:goEmbedCountBuild directive and safe directive-kind summaries.
cdx:golem:nativeArtifactCount, cdx:golem:nativeArtifactKindscgo, native source/object, assembly, and related sidecar summaries.
cdx:golem:securitySignalCount, cdx:golem:securitySignalCategories, cdx:golem:securitySignalSeveritiesSecurity-sensitive API signal summaries.
cdx:golem:diagnosticCountGolem diagnostic count.
cdx:golem:goDirectiveVersion, cdx:golem:toolchainDirective, cdx:golem:goWorkPresentGo module/workspace toolchain facts.
cdx:golem:goModReplaceCount, cdx:golem:goModExcludeCount, cdx:golem:replaceModule, cdx:golem:replaceTargetPathKind, cdx:golem:localReplacementPresent, cdx:golem:excludeModuleReplace/exclude directive summaries.
cdx:golem:vendorDirectoryPresent, cdx:golem:vendorModuleCount, cdx:golem:workspaceModuleCountVendor and workspace summaries.
cdx:golem:privateModuleHintCount, cdx:golem:licenseFileModuleCountPrivate-module and license-file evidence counters.
cdx:golem:callGraphNodeCount, cdx:golem:callGraphEdgeCountMain call graph size counters.
cdx:golem:dataFlowSourceCount, cdx:golem:dataFlowSinkCount, cdx:golem:dataFlowSliceCountData-flow source/sink/slice counters.
cdx:golem:dataFlowNodeCount, cdx:golem:dataFlowEdgeCount, cdx:golem:dataFlowSummaryCountData-flow graph and summary counters.
cdx:golem:dataFlowCandidateFunctionCount, cdx:golem:dataFlowFunctionCount, cdx:golem:dataFlowSkippedFunctionCount, cdx:golem:dataFlowInstructionCountSSA/function materialization counters.
cdx:golem:dataFlowWorkerCount, cdx:golem:dataFlowElapsedMillisPerformance counters for data-flow runs.
cdx:golem:dataFlowUniqueFlowCount, cdx:golem:dataFlowDuplicateSliceCount, cdx:golem:dataFlowDuplicateGroupCount, cdx:golem:dataFlowMaxPathLengthData-flow deduplication and trace-size counters.
cdx:golem:dataFlowSanitizedSliceCount, cdx:golem:dataFlowTruncated, cdx:golem:dataFlowTruncationReasonsSanitization and truncation summaries.
cdx:golem:cryptoLibraryCount, cdx:golem:cryptoAssetCount, cdx:golem:cryptoOperationCount, cdx:golem:cryptoMaterialCount, cdx:golem:cryptoProtocolCount, cdx:golem:cryptoFindingCountCrypto evidence counters.
cdx:golem:cryptoAlgorithms, cdx:golem:cryptoMaterialTypes, cdx:golem:cryptoProtocolsCrypto evidence summaries.
cdx:golem:cryptoDataFlowCountTotal crypto-related data-flow slices attached to components.
Golem component-level inventory
PropertyMeaning
cdx:golem:modulePath, cdx:golem:goVersion, cdx:golem:mainModuleGo module identity and toolchain facts.
cdx:golem:replacementModule, cdx:golem:localReplacementReplacement target and local replacement signal.
cdx:golem:vendored, cdx:golem:privateModuleCandidate, cdx:golem:licenseFileCount, cdx:golem:licenseFilesVendor/private/license evidence.
cdx:golem:usageScopes, cdx:golem:usageScope, cdx:golem:testOnlyRuntime/test/benchmark/fuzz/example usage posture.
cdx:golem:<scope>UsageCountPer-scope counters, where <scope> is runtime, test, benchmark, fuzz, or example.
cdx:golem:occurrenceEvidenceKindsSource of occurrence evidence, such as import, symbolCall, symbolReference, or dataFlowSlice.
cdx:golem:<kind>OccurrenceCountPer-kind occurrence counters, including importOccurrenceCount, symbolCallOccurrenceCount, symbolReferenceOccurrenceCount, and dataFlowSliceOccurrenceCount.
cdx:golem:importDirect, cdx:golem:importAliasKindImport evidence details.
cdx:golem:symbolKind, cdx:golem:usageKindTyped symbol usage details.
cdx:golem:securitySignalCategory, cdx:golem:securitySignalSeverityComponent-level security signal classification.
cdx:golem:dataFlowCategories, cdx:golem:dataFlowRuleId, cdx:golem:dataFlowSeverity, cdx:golem:dataFlowConfidence, cdx:golem:dataFlowTaintKinds, cdx:golem:dataFlowSliceCountComponent-level data-flow classification and count.
cdx:golem:cryptoDataFlow, cdx:golem:cryptoDataFlowCategories, cdx:golem:cryptoDataFlowRuleId, cdx:golem:cryptoDataFlowTaintKinds, cdx:golem:cryptoDataFlowCountCrypto-specific data-flow classification and count.
cdx:golem:cryptoOperationType, cdx:golem:cryptoAlgorithm, cdx:golem:cryptoFinding, cdx:golem:cryptoFindingSeverityCrypto operation and finding pivots attached to owning Go modules.
Golem crypto-asset inventory
PropertyMeaning
cdx:golem:crypto:sourceLocationSource file, line, and column where the crypto asset was detected.
cdx:golem:crypto:strengthConservative strength classification from Golem.
cdx:golem:crypto:symbolSafe symbol name associated with the crypto asset.
cdx:golem:crypto:usageScopeUsage scope associated with the crypto asset.

Rusi Rust Evinse evidence

cdx:rusi:* properties are emitted by evinse -l rust when the rusi helper is available. They are intentionally split between the root metadata component, the analyzed Rust application component, dependency components, and rendered cryptographic-asset components. Use metadata-level values to judge the evidence run: tool version, rustc/cargo versions, call graph/data-flow modes, package/file/import/usage counts, crypto library/finding counts, and data-flow graph sizes. Use component-level values to judge dependency posture: import paths/aliases, usage kinds, data-flow categories/rules/slice counts, security signal categories/severities, and crypto finding categories/severities. Use crypto-asset values to judge CBOM pivots: source symbol, provider, operation, function, confidence, and source location. cdxgen intentionally does not assign purls to cryptographic-asset components. These properties are safe for policy because they are small values, counts, categories, source locations, and module facts. They do not copy Rust generator commands, environment values, HTTP parameter values, raw key material, plaintext, ciphertext, embedded file contents, generated file contents, or secrets into the BOM. Source file names and private module paths can still reveal internal structure, so review an enriched BOM before sharing it outside the organization.

Rusi metadata-level inventory
PropertyMeaning
cdx:rusi:schemaVersionRusi report schema version.
cdx:rusi:toolVersionRusi helper version.
cdx:rusi:rustcVersion, cdx:rusi:cargoVersion, cdx:rusi:hostRust toolchain and host environment facts.
cdx:rusi:backend, cdx:rusi:analysisScopeAnalysis configuration facts.
cdx:rusi:callGraphMode, cdx:rusi:dataFlowModeCall graph and data-flow modes used.
cdx:rusi:packageCount, cdx:rusi:fileCount, cdx:rusi:importCount, cdx:rusi:declarationCount, cdx:rusi:usageCountProject size and usage counters.
cdx:rusi:securitySignalCountSecurity-sensitive API signal summary.
cdx:rusi:cryptoLibraryCount, cdx:rusi:cryptoComponentCount, cdx:rusi:cryptoFindingCountCrypto evidence counters.
cdx:rusi:callGraphNodeCount, cdx:rusi:callGraphEdgeCountCall graph size counters.
cdx:rusi:dataFlowNodeCount, cdx:rusi:dataFlowEdgeCount, cdx:rusi:dataFlowSliceCountData-flow graph and slice counters.
Rusi component-level inventory
PropertyMeaning
cdx:rusi:importPath, cdx:rusi:importAliasImport evidence details.
cdx:rusi:usageKindTyped symbol usage details.
cdx:rusi:dataFlowCategories, cdx:rusi:dataFlowRuleName, cdx:rusi:dataFlowSliceCountComponent-level data-flow classification and count.
cdx:rusi:securitySignalCategory, cdx:rusi:securitySignalSeverityComponent-level security signal classification.
cdx:rusi:cryptoFindingCategory, cdx:rusi:cryptoFindingSeverityCrypto finding pivots attached to owning Rust modules.
Rusi crypto-asset inventory
PropertyMeaning
cdx:rusi:crypto:sourceLocationSource file and line where the crypto asset was detected.
cdx:rusi:crypto:providerCrypto provider or library name.
cdx:rusi:crypto:operationCrypto operation type.
cdx:rusi:crypto:symbolSafe symbol name associated with the crypto asset.
cdx:rusi:crypto:functionFunction name for related crypto material.
cdx:rusi:crypto:confidenceConfidence level of the crypto material detection.

Example payload fragments

npm / pnpm execution risk

{
  "name": "example-pkg",
  "version": "1.0.0",
  "purl": "pkg:npm/example-pkg@1.0.0",
  "properties": [
    { "name": "cdx:npm:hasInstallScript", "value": "true" },
    { "name": "cdx:npm:risky_scripts", "value": "postinstall" },
    { "name": "cdx:npm:isRegistryDependency", "value": "false" },
    { "name": "cdx:npm:resolvedPath", "value": "file:../local-pkg" }
  ]
}

Nix reproducibility evidence

{
  "name": "nixpkgs",
  "purl": "pkg:nix/nixos/nixpkgs@24.05",
  "properties": [
    {
      "name": "cdx:nix:input_url",
      "value": "github:nixos/nixpkgs/nixos-24.05"
    },
    {
      "name": "cdx:nix:revision",
      "value": "1234567890abcdef1234567890abcdef12345678"
    },
    { "name": "cdx:nix:nar_hash", "value": "sha256-abc123..." },
    { "name": "cdx:nix:ref", "value": "nixos-24.05" }
  ]
}

Alias and overlap notes

  • Prefer cdx:npm:isWorkspace, but match both cdx:npm:isWorkspace and cdx:npm:is_workspace in policies for compatibility.
  • cdx:npm:bin/<command> keys are internal analyzer evidence labels, not emitted BOM component properties. They are produced when source/config analysis sees a package-manager wrapper invoke a command, such as npx license-report or pnpm dlx @angular/cli. During BOM construction, cdxgen matches those command labels against emitted package metadata such as cdx:npm:bin and cdx:npm:binPaths; when they match, the owning package is treated as used and can be marked scope: "required" without hardcoding a package-name allowlist.
  • cdx:pip:structuredMarkers is the more machine-friendly companion to cdx:pip:markers; when both exist, parse the JSON string and prefer the structured form for policy logic, while keeping the raw form for explainability.
  • cdx:gem:remoteBranch and cdx:gem:remoteTag are weaker, mutable source indicators than cdx:gem:remoteRevision.
  • cdx:nix:ref is descriptive context; use cdx:nix:revision and cdx:nix:nar_hash as the stronger reproducibility gates.

AI / model artifact inventory

Authoritative grouped index

  • AI model and service inventory: cdx:ai:artifactFormat, cdx:ai:confidence, cdx:ai:contextWindow, cdx:ai:deployment, cdx:ai:kind, cdx:ai:modelCount, cdx:ai:modelFamily, cdx:ai:modelId, cdx:ai:modelSelection, cdx:ai:modality, cdx:ai:parameterCount, cdx:ai:provider, cdx:ai:quantization, cdx:ai:reviewNeeded, cdx:ai:runtime, cdx:ai:source, cdx:ai:transportSecurity, cdx:ai:variant
  • Hugging Face remote/runtime metadata: cdx:huggingface:downloads, cdx:huggingface:downloadsAllTime, cdx:huggingface:likes, cdx:huggingface:likesRecent, cdx:huggingface:gated, cdx:huggingface:private, cdx:huggingface:disabled, cdx:huggingface:fileCount, cdx:huggingface:libraryName, cdx:huggingface:spaceCount, cdx:huggingface:inferenceProvider, cdx:huggingface:inferenceProviderCount, cdx:huggingface:inferenceStatus, cdx:huggingface:inferenceTask, cdx:huggingface:previewable, cdx:huggingface:viewer, cdx:huggingface:papersWithCodeId, cdx:huggingface:taskCategory, cdx:huggingface:taskId, cdx:huggingface:sdk, cdx:huggingface:subdomain, cdx:huggingface:runtimeStage, cdx:huggingface:sdkVersion, cdx:huggingface:runtimeHardwareCurrent, cdx:huggingface:runtimeHardwareRequested, cdx:huggingface:modelCount, cdx:huggingface:datasetCount
  • GGUF artifact metadata: cdx:gguf:alignment, cdx:gguf:basename, cdx:gguf:bosTokenId, cdx:gguf:chatTemplateDetected, cdx:gguf:chatTemplateLength, cdx:gguf:datasetCount, cdx:gguf:eosTokenId, cdx:gguf:finetune, cdx:gguf:formatVersion, cdx:gguf:huggingFaceTokenizer, cdx:gguf:language, cdx:gguf:metadataCount, cdx:gguf:paddingTokenId, cdx:gguf:quantizationVersion, cdx:gguf:quantizedBy, cdx:gguf:separatorTokenId, cdx:gguf:shard, cdx:gguf:shardCount, cdx:gguf:shardIndex, cdx:gguf:sidecar, cdx:gguf:sizeLabel, cdx:gguf:tensorCount, cdx:gguf:tokenizerAddedTokenCount, cdx:gguf:tokenizerMergeCount, cdx:gguf:tokenizerModel, cdx:gguf:tokenizerScoreCount, cdx:gguf:tokenizerTokenCount, cdx:gguf:tokenizerTokenTypeCount, cdx:gguf:type, cdx:gguf:unknownTokenId

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:ai:artifactFormatmodel componentenum stringgguf, modelfileWhen AI inventory finds a local model artifact or configSeparates direct local artifacts from source-only model referencesWarning / triage
cdx:ai:quantizationmodel componentenum stringQ5_K_M, Q4_K_M, BF16, F16When GGUF metadata or artifact naming reveals the weight encodingUseful for capacity planning, local-runtime fit, and AI-BOM performance rulesWarning / triage
cdx:ai:contextWindowmodel componentnumber string8192, 32768When a model artifact or config declares an explicit context lengthHigh-signal governance and performance pivot for overly large local modelsWarning / triage
cdx:ai:deploymentserviceenum stringremote, local, implicitWhen cdxgen observes inference endpoints or local runtimesSeparates SaaS-hosted inference from local-only deploymentsWarning / triage
cdx:ai:transportSecurityserviceenum stringhttps, insecure-http, local-onlyWhen service endpoints are presentUseful for blocking insecure remote AI integrationsHard deny
cdx:ai:reviewNeededmodel component/serviceboolean string"true"When local-only inference, Ollama discovery, or other human-review cues are presentOne-bit reviewer hint that an AI finding deserves manual inspectionWarning / triage
cdx:huggingface:downloadsAllTimeremote model/datasetnumber string67890, 12337416When remote Hugging Face resolution is enabled and the API returns long-run download totalsHelpful governance signal for distinguishing niche/internal experiments from widely consumed hub artifactsWarning / triage
cdx:huggingface:inferenceProvider, cdx:huggingface:inferenceStatus, cdx:huggingface:inferenceTaskremote modelrepeated stringhf-inference, live, text-generationWhen the Hub advertises hosted inference backends for the modelHighlights hosted-inference exposure and clarifies whether the same repo is intended for local-only or managed servingWarning / triage
cdx:huggingface:sdk, cdx:huggingface:runtimeStage, cdx:huggingface:sdkVersionremote spaceenum/stringgradio, RUNNING, 5.0.0When a Hugging Face Space is resolved remotelyMakes Space runtime posture and deployment health visible to AI-BOM reviewWarning / triage
cdx:huggingface:modelCount, cdx:huggingface:datasetCountremote spacenumber string1, 2When a Space declares linked models or datasetsUseful for spotting multi-asset Spaces that should also receive dependency or governance reviewWarning / triage
cdx:huggingface:gatedFieldCount, cdx:huggingface:gatedPromptCustomizedmodelCard propertiesnumber/boolean1, "true"When a model card customizes gated-access prompts or requested fieldsSignals that access is workflow- or compliance-mediated without copying the raw access form into the BOMWarning / triage
cdx:gguf:sizeLabelmodel + file componentstring7B, 8x7B, 3.8B-ContextLength4kWhen GGUF metadata or naming convention carries the size classPreserves model-class evidence that is often visible in filenames but not otherwise machine-readyContext only
cdx:gguf:sidecarmodel + file componentenum stringmmproj, mtpWhen a GGUF filename follows the sidecar naming conventionDistinguishes auxiliary projector / draft-model artifacts from standalone model weightsWarning / triage
cdx:gguf:typemodel + file componentenum stringLoRA, vocabWhen the GGUF naming convention declares a non-default artifact kindHelps reviewers separate adapters and vocab-only files from normal tensor artifactsWarning / triage
cdx:gguf:shardfile componentstring00001-of-00002When a GGUF artifact filename includes shard coordinatesMakes multi-file model layouts explicit and easier to verify during packaging and deploymentContext only
cdx:gguf:shardIndexfile componentnumber string1, 2When the shard marker is presentLets policies reason about shard completeness without parsing the combined stringContext only
cdx:gguf:shardCountfile componentnumber string2, 9When the shard marker is presentUseful for completeness checks on distributed/sharded local model assetsContext only
cdx:gguf:alignmentfile componentnumber string32, 64When general.alignment is present in GGUF metadataCaptures artifact-level GGUF layout details relevant to loader compatibilityContext only
cdx:gguf:formatVersionfile componentnumber string3For parsed GGUF artifactsPreserves the on-disk GGUF format version independently from the model's own versionContext only
cdx:gguf:quantizationVersionmodel + file componentnumber string2, 4When GGUF metadata declares quantization-format versioningComplements cdx:ai:quantization with the low-level GGUF quantization revisionContext only
cdx:gguf:tensorCountfile componentnumber string291, 842For parsed GGUF artifactsUseful artifact-shape evidence for forensic comparison and packaging sanity checksContext only
cdx:gguf:tokenizerModelmodel + file componentenum stringllama, gpt2, rwkvWhen GGUF metadata declares the embedded tokenizer familyHelps reviewers understand tokenizer/runtime compatibility assumptionsWarning / triage
cdx:gguf:tokenizerTokenCountmodel + file componentnumber string32000, 128256When GGUF metadata includes tokenizer.ggml.tokensUseful tokenizer-shape evidence without embedding the raw vocabularyContext only
cdx:gguf:tokenizerScoreCountmodel + file componentnumber string32000When GGUF metadata includes tokenizer score arraysSanity-checks tokenizer completeness without copying score payloadsContext only
cdx:gguf:tokenizerTokenTypeCountmodel + file componentnumber string32000When GGUF metadata includes tokenizer token-type arraysHighlights partial tokenizer exports or executor-compatibility mismatchesContext only
cdx:gguf:tokenizerMergeCountmodel + file componentnumber string50000When GGUF metadata includes BPE merge rulesPreserves tokenizer-shape evidence without exposing the merge listContext only
cdx:gguf:tokenizerAddedTokenCountmodel + file componentnumber string1, 12When GGUF metadata includes added tokensHighlights tool/chat/vendor tokenizer extensionsWarning / triage
cdx:gguf:huggingFaceTokenizermodel + file componentboolean string"true"When GGUF metadata embeds a Hugging Face tokenizer JSONDistinguishes GGML-only tokenization from artifacts carrying a higher-fidelity HF tokenizerWarning / triage
cdx:gguf:chatTemplateDetectedmodel + file componentboolean string"true"When GGUF metadata embeds tokenizer.chat_templateHigh-signal hint that the model expects chat-style prompt framingWarning / triage
cdx:gguf:chatTemplateLengthmodel + file componentnumber string128, 512When a GGUF chat template is presentPreserves a safe derivative of the prompt contract without copying the raw templateContext only
cdx:gguf:bosTokenId, cdx:gguf:eosTokenId, cdx:gguf:unknownTokenId, cdx:gguf:separatorTokenId, cdx:gguf:paddingTokenIdmodel + file componentnumber string0, 1, 2When GGUF metadata declares tokenizer special-token IDsUseful tokenizer compatibility pivots for runtimes and prompt-packaging workflowsContext only
cdx:gguf:languagemodel + file componentrepeated stringen, fr, jaWhen GGUF metadata declares supported languagesPreserves multilingual capability hints without overloading standard CycloneDX fieldsContext only
cdx:gguf:datasetCountmodel + file componentnumber string1, 3When GGUF metadata includes general.datasetsQuick governance signal that training/evaluation datasets were declared in the artifact metadataContext only

High-value combinations

  • cdx:ai:artifactFormat=gguf + cdx:ai:deployment=local
  • cdx:ai:contextWindow above internal review thresholds + cdx:ai:reviewNeeded=true
  • cdx:huggingface:gated=true + cdx:huggingface:gatedFieldCount present
  • cdx:huggingface:runtimeStage=RUNNING + cdx:huggingface:modelCount>0 on a Space component
  • cdx:huggingface:downloadsAllTime high + cdx:ai:quantization missing on a large local derivative
  • cdx:gguf:chatTemplateDetected=true + cdx:gguf:tokenizerAddedTokenCount>0
  • cdx:gguf:huggingFaceTokenizer=true + cdx:gguf:tokenizerModel=llama
  • cdx:gguf:sidecar=mmproj + missing corresponding base-model dependency or deployment documentation
  • cdx:gguf:type=LoRA + missing pedigree.ancestors[] on the corresponding model component
  • cdx:gguf:shardCount present + fewer observed GGUF file components than expected

Cross-cutting BOM/service/build metadata

Authoritative grouped index

  • cdx:bom:componentNamespaces
  • cdx:bom:componentSrcFiles
  • cdx:bom:componentTypes
  • cdx:build:versionSpecifiers
  • cdx:lolbas:attackTactics
  • cdx:lolbas:attackTechniques
  • cdx:lolbas:contexts
  • cdx:lolbas:functions
  • cdx:lolbas:matchFields
  • cdx:lolbas:matched
  • cdx:lolbas:names
  • cdx:lolbas:queryCategory
  • cdx:lolbas:references
  • cdx:lolbas:riskTags
  • cdx:lolbas:sourceRef
  • cdx:container:attackTactics
  • cdx:container:attackTechniques
  • cdx:container:knowledgeSourceRefs
  • cdx:container:knowledgeSources
  • cdx:container:matchSource
  • cdx:container:matched
  • cdx:container:name
  • cdx:container:offenseTools
  • cdx:container:riskTags
  • cdx:container:seccompBlockedSyscalls
  • cdx:container:seccompProfile
  • cdx:gtfobins:contexts
  • cdx:gtfobins:functions
  • cdx:gtfobins:matchSource
  • cdx:gtfobins:matched
  • cdx:gtfobins:mitreTechniques
  • cdx:gtfobins:name
  • cdx:gtfobins:privilegedContexts
  • cdx:gtfobins:reference
  • cdx:gtfobins:riskTags
  • cdx:gtfobins:sourceRef
  • cdx:osquery:category
  • cdx:service:httpMethod
  • cdx:dosai:crypto:id
  • cdx:dosai:crypto:strength
  • cdx:dosai:crypto:storage
  • cdx:dosai:crypto:reachableFromEntryPoint
  • cdx:dosai:crypto:entryPointCount
  • cdx:dosai:crypto:dataFlowSliceIds

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:bom:componentNamespacesmetadatalist stringpkg:npm, pkg:pypi, pkg:mavenAfter BOM post-processingShows ecosystem breadth and helps explain mixed-language outputsContext only
cdx:bom:componentSrcFilesmetadatalist stringpackage.json, requirements.txt, pom.xmlAfter BOM post-processingUseful for completeness gates and evidence-of-origin attestationsWarning / triage
cdx:bom:componentTypesmetadatalist stringlibrary, application, containerAfter BOM post-processingHelps identify unexpectedly narrow or broad BOM compositionWarning / triage
cdx:build:versionSpecifierscomponentstring>=1.0,<2.0When build metadata yields non-exact constraintsGood pinning strictness signal for build ecosystemsWarning / triage
cdx:lolbas:namescomponentlist stringpowershell.exe,regsvr32.exeWhen Windows osquery rows reference curated LOLBAS helpersUseful pivot for startup persistence, WMI, or process triageWarning / triage
cdx:lolbas:attackTechniquescomponentlist stringT1059.001,T1218.010When LOLBAS helpers map to ATT&CK techniquesAligns Windows host telemetry with ATT&CK-aware policy pipelinesWarning / triage
cdx:lolbas:riskTagscomponentlist stringproxy-execution,network-transfer,uac-bypassWhen LOLBAS helpers imply higher-level abuse categoriesHelps prioritize Windows persistence or proxy-execution reviewWarning / triage
cdx:container:attackTechniquescomponentlist stringT1611,T1613,T1552.007When executables match curated container tradecraft knowledgeMaps binaries to ATT&CK for Containers or related ATT&CK techniquesWarning / triage
cdx:container:offenseToolscomponentlist stringpeirates,cdk,deepceWhen executables overlap known container intrusion playbooksHigh-signal context for cluster-pivot or offensive toolkit reviewWarning / triage
cdx:container:seccompBlockedSyscallscomponentlist stringsetns,unshare,open_by_handle_atWhen helper abuse depends on syscalls blocked by Docker seccompHelps prevent breakouts caused by permissive or disabled seccompWarning / triage
cdx:gtfobins:functionscomponentlist stringshell,upload,file-readWhen collected container executables match GTFOBins-derived dataEncodes post-exploit primitives available inside the imageWarning / triage
cdx:gtfobins:privilegedContextscomponentlist stringsudo,suid,capabilitiesWhen GTFOBins metadata exposes privileged execution contextsHigh-value hardening signal for breakout and privilege reviewHard deny
cdx:gtfobins:riskTagscomponentlist stringcontainer-escape,privilege-escalationWhen GTFOBins functions imply higher-level container risk tagsGood summary field for audit rules and triageWarning / triage
cdx:osquery:categorycomponentstringpackages, systemWhen packages are discovered through osqueryIndicates evidence source and confidence contextContext only
cdx:service:httpMethodservicestringGET, POST, DELETEWhen OpenAPI/service endpoints are capturedUseful for API exposure reviews and method-specific policyContext only
cdx:dosai:crypto:idcomponentstringasset-uuid, op-uuidWhen dosai reports an asset/operation/material with an IDStable identity pivot for deduplication and cross-referenceContext only
cdx:dosai:crypto:strengthcomponentstring128, 256When dosai reports an asset/operation with key strength infoIdentifies weak cryptographic key sizes for algorithm reviewWarning / triage
cdx:dosai:crypto:storagecomponentstringhardcoded, environment, configWhen dosai detects a material with a known storage typeFlags hardcoded crypto material as high-risk supply-chain exposureHard deny
cdx:dosai:crypto:reachableFromEntryPointcomponentboolean string"true", "false"For every dosai asset/operation/materialSeparates actively reachable crypto from dead codeWarning / triage
cdx:dosai:crypto:entryPointCountcomponentnumber string1, 5When dosai reports one or more entry-point IDsHigher counts indicate broader reachability surfaceWarning / triage
cdx:dosai:crypto:dataFlowSliceIdscomponentlist stringdfs1,dfs2When dosai reports data-flow slice IDs for an asset or materialEnables correlation with dosai data-flow slice output for triageContext only

High-value combinations

  • cdx:bom:componentTypes present + cdx:bom:componentSrcFiles present before allowing downstream signing
  • Missing cdx:bom:componentSrcFiles for a BOM that otherwise claims broad language coverage
  • cdx:build:versionSpecifiers present + policy requires exact pinning in build metadata
  • cdx:lolbas:names present + cdx:osquery:category in windows_run_keys, scheduled_tasks, services_snapshot, or WMI tables
  • cdx:lolbas:attackTechniques contains T1218 or T1548.002 on Windows persistence surfaces
  • cdx:gtfobins:riskTags=container-escape + cdx:gtfobins:privilegedContexts present in runtime container images
  • cdx:container:offenseTools present + cdx:container:riskTags=offensive-toolkit in any runtime image
  • cdx:container:seccompBlockedSyscalls present + container deployed with unconfined or custom seccomp profiles
  • cdx:service:httpMethod=DELETE or PATCH + public service exposure policy outside this document

Example payload fragment

{
  "metadata": {
    "properties": [
      {
        "name": "cdx:bom:componentNamespaces",
        "value": "pkg:npm\npkg:pypi\npkg:maven"
      },
      { "name": "cdx:bom:componentTypes", "value": "library\napplication" },
      {
        "name": "cdx:bom:componentSrcFiles",
        "value": "package.json\nrequirements.txt\npom.xml"
      }
    ]
  }
}

IDE and editor extensions

Authoritative grouped index

  • VS Code extensions: cdx:vscode-extension:activationEvents, cdx:vscode-extension:browser, cdx:vscode-extension:contributes, cdx:vscode-extension:executesCode, cdx:vscode-extension:extensionDependencies, cdx:vscode-extension:extensionKind, cdx:vscode-extension:extensionPack, cdx:vscode-extension:ide, cdx:vscode-extension:lifecycleScripts, cdx:vscode-extension:main, cdx:vscode-extension:untrustedWorkspaces, cdx:vscode-extension:virtualWorkspaces, cdx:vscode-extension:vscodeEngine
  • Chromium browser extensions: cdx:chrome-extension:browser, cdx:chrome-extension:channel, cdx:chrome-extension:profile, cdx:chrome-extension:profilePath, cdx:chrome-extension:manifestVersion, cdx:chrome-extension:updateUrl, cdx:chrome-extension:minimumChromeVersion, cdx:chrome-extension:versionName, cdx:chrome-extension:incognito, cdx:chrome-extension:offlineEnabled, cdx:chrome-extension:permissions, cdx:chrome-extension:optionalPermissions, cdx:chrome-extension:hostPermissions, cdx:chrome-extension:optionalHostPermissions, cdx:chrome-extension:commands, cdx:chrome-extension:contentScriptsRunAt, cdx:chrome-extension:contentScriptsMatches, cdx:chrome-extension:contentSecurityPolicy, cdx:chrome-extension:storageManagedSchema, cdx:chrome-extension:webAccessibleResourceMatches, cdx:chrome-extension:externallyConnectableMatches, cdx:chrome-extension:capabilities, cdx:chrome-extension:capability:fileAccess, cdx:chrome-extension:capability:deviceAccess, cdx:chrome-extension:capability:network, cdx:chrome-extension:capability:bluetooth, cdx:chrome-extension:capability:accessibility, cdx:chrome-extension:capability:codeInjection, cdx:chrome-extension:capability:fingerprinting, cdx:chrome-extension:hasAutofill, cdx:chrome-extension:edge:minimumVersion, cdx:chrome-extension:edge:urlOverrides, cdx:chrome-extension:brave:maybeBackground, cdx:chrome-extension:brave:permissions
  • Electron ASAR archives: cdx:asar:entryCount, cdx:asar:fileCount, cdx:asar:directoryCount, cdx:asar:symlinkCount, cdx:asar:jsFileCount, cdx:asar:packageJsonCount, cdx:asar:lockfileCount, cdx:asar:hasUnpackedEntries, cdx:asar:unpackedFileCount, cdx:asar:hasNativeAddons, cdx:asar:nativeAddonCount, cdx:asar:hasIntegrityMismatch, cdx:asar:integrityMismatchCount, cdx:asar:hasSigningMetadata, cdx:asar:headerHash, cdx:asar:signingAlgorithm, cdx:asar:signingDeclaredHash, cdx:asar:signingSource, cdx:asar:signingScope, cdx:asar:signingVerified, cdx:asar:signingArchivePath, cdx:asar:capabilities, cdx:asar:capability:fileAccess, cdx:asar:capability:network, cdx:asar:capability:hardware, cdx:asar:capability:dynamicFetch, cdx:asar:capability:dynamicImport, cdx:asar:capability:codeGeneration, cdx:asar:capability:childProcess, cdx:asar:executionIndicators, cdx:asar:networkIndicators, cdx:asar:obfuscationIndicators, cdx:asar:path, cdx:asar:size, cdx:asar:offset, cdx:asar:unpacked, cdx:asar:executable, cdx:asar:linkTarget, cdx:asar:declaredIntegrityHash, cdx:asar:integrityVerified, cdx:asar:integrityBlockSize, cdx:asar:integrityBlockCount, cdx:asar:js:capabilities, cdx:asar:js:capability:fileAccess, cdx:asar:js:capability:network, cdx:asar:js:capability:hardware, cdx:asar:js:capability:dynamicFetch, cdx:asar:js:capability:dynamicImport, cdx:asar:js:capability:codeGeneration, cdx:asar:js:capability:childProcess, cdx:asar:js:hasEval, cdx:asar:js:hasDynamicFetch, cdx:asar:js:hasDynamicImport, cdx:asar:js:fileAccessIndicators, cdx:asar:js:networkIndicators, cdx:asar:js:hardwareIndicators, cdx:asar:js:executionIndicators, cdx:asar:js:obfuscationIndicators, cdx:asar:primaryManifest, cdx:asar:main, cdx:asar:module, cdx:asar:browser, cdx:asar:productName, cdx:asar:lifecycleScripts

Decision-oriented sub-groups

  • Execution surface: cdx:vscode-extension:lifecycleScripts, cdx:vscode-extension:main, cdx:vscode-extension:browser, cdx:vscode-extension:contributes, cdx:vscode-extension:executesCode
  • Privilege / trust: cdx:vscode-extension:untrustedWorkspaces, cdx:vscode-extension:virtualWorkspaces, cdx:vscode-extension:activationEvents
  • Dependency chain: cdx:vscode-extension:extensionDependencies, cdx:vscode-extension:extensionPack
  • Context / provenance: cdx:vscode-extension:ide, cdx:vscode-extension:extensionKind, cdx:vscode-extension:vscodeEngine
  • Browser extension execution surface: cdx:chrome-extension:contentScriptsRunAt, cdx:chrome-extension:contentScriptsMatches, cdx:chrome-extension:commands, cdx:chrome-extension:contentSecurityPolicy, cdx:chrome-extension:capability:codeInjection, cdx:chrome-extension:hasAutofill
  • Browser extension privilege / scope: cdx:chrome-extension:permissions, cdx:chrome-extension:optionalPermissions, cdx:chrome-extension:hostPermissions, cdx:chrome-extension:optionalHostPermissions
  • Browser extension context / provenance: cdx:chrome-extension:browser, cdx:chrome-extension:channel, cdx:chrome-extension:profile, cdx:chrome-extension:profilePath, cdx:chrome-extension:manifestVersion, cdx:chrome-extension:updateUrl, cdx:chrome-extension:minimumChromeVersion, cdx:chrome-extension:versionName, cdx:chrome-extension:storageManagedSchema, cdx:chrome-extension:edge:minimumVersion, cdx:chrome-extension:brave:maybeBackground
  • ASAR execution surface: cdx:asar:capabilities, cdx:asar:executionIndicators, cdx:asar:networkIndicators, cdx:asar:obfuscationIndicators, cdx:asar:js:capabilities, cdx:asar:js:executionIndicators, cdx:asar:js:networkIndicators, cdx:asar:js:hardwareIndicators
  • ASAR integrity / provenance: cdx:asar:declaredIntegrityHash, cdx:asar:integrityVerified, cdx:asar:integrityBlockSize, cdx:asar:integrityBlockCount, cdx:asar:hasSigningMetadata, cdx:asar:headerHash, cdx:asar:signingAlgorithm, cdx:asar:signingDeclaredHash, cdx:asar:signingSource, cdx:asar:signingScope, cdx:asar:signingVerified, cdx:asar:signingArchivePath, cdx:asar:primaryManifest
  • ASAR packaging posture: cdx:asar:hasUnpackedEntries, cdx:asar:unpackedFileCount, cdx:asar:hasNativeAddons, cdx:asar:nativeAddonCount, cdx:asar:lifecycleScripts

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:asar:hasIntegrityMismatchcomponentstringtrue, falseWhen a declared ASAR integrity hash does not match file contentsHigh-signal tamper or packaging-defect indicator for shipped desktop artifactsHard deny
cdx:asar:hasSigningMetadatacomponentstringtrue, falseWhen Electron Info.plist exposes ElectronAsarIntegrity dataQuick pivot showing the release artifact carries explicit signing metadataContext only
cdx:asar:hasNativeAddonscomponentstringtrue, falseWhen .node binaries are shipped in the archive or .unpackedNative addons increase review depth, sandbox escape interest, and platform-specific attack surfaceWarning / triage
cdx:asar:hasUnpackedEntriescomponentstringtrue, falseWhen ASAR metadata marks entries as unpackedUnpacked files are writable/extractable on disk and often include native code or helper executablesWarning / triage
cdx:asar:headerHashcomponentstringsha256 hex digestWhen cdxgen computes the ASAR header hashLets reviewers compare computed header bytes with Electron-declared signing metadataContext only
cdx:asar:signingAlgorithmcomponentstringSHA256When Electron signing metadata is presentIdentifies which digest algorithm the desktop packaging metadata expectsContext only
cdx:asar:signingDeclaredHashcomponentstringab12...When Electron signing metadata is presentCarries the declared Electron header hash used for verificationContext only
cdx:asar:signingSourcecomponentstringInfo.plistWhen Electron signing metadata is presentShows where signing metadata was sourced from during reviewContext only
cdx:asar:signingScopecomponentstringheader-onlyWhen Electron signing metadata is presentPrevents reviewers from mistaking Electron header verification for full payload signingWarning / triage
cdx:asar:signingVerifiedcomponentstringtrue, falseWhen Electron signing metadata is presentHigh-value signal that the declared Electron ASAR header hash matched or failed verificationHard deny
cdx:asar:signingArchivePathcomponentpath stringResources/app.asarOn emitted signing/crypto componentsBinds a crypto asset back to the signed ASAR path inside the Electron app bundleContext only
cdx:asar:capabilitiescomponentlist string (comma-separated)fileAccess, network, dynamicFetch, codeGenerationWhen archive-level JS analysis rolls up per-file capability hitsQuick summary of packaged runtime posture without opening every archived fileWarning / triage
cdx:asar:js:capabilitiescomponentlist string (comma-separated)network, hardware, fileAccess, childProcessOn ASAR file components for JS/TS-like entriesPinpoints which exact archived source files combine local access, network reach, or dynamic executionWarning / triage
cdx:asar:js:hasEvalcomponentstringtrue, falseOn archived JS file componentseval and related code generation patterns deserve manual review in packaged Electron applicationsHard deny
cdx:asar:js:hasDynamicFetchcomponentstringtrue, falseOn archived JS file componentsFlags network calls where the URL is not statically known, complicating review and endpoint allowlistingWarning / triage
cdx:asar:pathcomponentpath stringsrc/main.js, node_modules/sketchy-addon/package.jsonOn ASAR file componentsStable archive-relative location useful for triage, provenance mapping, and attachment to release pipelinesContext only

High-value combinations

  • cdx:asar:hasNativeAddons=true + cdx:asar:hasUnpackedEntries=true — archive ships native code outside the packed byte stream
  • cdx:asar:hasIntegrityMismatch=true + cdx:asar:declaredIntegrityHash present — declared packaging metadata disagrees with computed content
  • cdx:asar:hasSigningMetadata=true + cdx:asar:signingVerified=false — Electron signing metadata exists but the declared ASAR header hash failed verification
  • cdx:asar:js:hasEval=true + cdx:asar:js:hasDynamicFetch=true — archived JavaScript can both generate code and fetch runtime-selected content
  • cdx:asar:js:capabilities contains network + hardware — packaged source can reach external hosts and local devices

Compact operational reference

KeyScopeValue typeTypical valuesWhen emittedWhy it mattersPolicy readiness
cdx:vscode-extension:activationEventscomponentlist string (comma-separated)onLanguage:python, onCommand:ext.run, *When extension declares activation events in package.jsonWildcard * means the extension activates on every workspace open, increasing attack surface. Use $contains($split(value, ','), '*') in JSONata to detect always-on extensions.Warning / triage
cdx:vscode-extension:extensionKindcomponentlist stringui, workspace, ui, workspaceWhen extension declares where it can runworkspace extensions execute in the remote host context and can access the filesystemContext only
cdx:vscode-extension:extensionDependenciescomponentlist stringms-python.vscode-pylance, ms-toolsai.jupyterWhen extension declares dependencies on other extensionsTransitive trust chain; a compromised dependency extension can affect all dependantsWarning / triage
cdx:vscode-extension:extensionPackcomponentlist stringms-python.python, ms-python.vscode-pylanceWhen extension bundles other extensions as a packPack extensions install additional extensions implicitlyWarning / triage
cdx:vscode-extension:untrustedWorkspacescomponentstringtrue, false, limitedWhen extension declares workspace trust configurationtrue means the extension runs in untrusted workspaces; limited restricts some featuresWarning / triage
cdx:vscode-extension:virtualWorkspacescomponentstringtrue, falseWhen extension declares virtual workspace supportExtensions supporting virtual workspaces may operate without direct filesystem accessContext only
cdx:vscode-extension:contributescomponentlist string (comma-separated)commands:count:42, terminal-access, filesystem-provider, authentication-providerWhen extension package.json declares contributed featuresSummary of privileged capabilities; use :count: suffix to identify quantity of contribution points (e.g., commands:count:12 means 12 commands contributed). Match specific capability keywords (terminal-access, filesystem-provider, etc.) for policy rules.Warning / triage
cdx:vscode-extension:maincomponentpath string./dist/extension.js, ./out/main.jsWhen extension declares a Node.js entry pointIdentifies the primary executable entry point for security reviewContext only
cdx:vscode-extension:browsercomponentpath string./dist/web/extension.jsWhen extension declares a browser/web entry point in package.jsonIndicates the extension can run in web/VS Code for Web contexts. Browser extensions run in a sandboxed environment with reduced permissions compared to Node.js (main) entry points. Use to differentiate web-safe vs. host-executing extensions.Context only
cdx:vscode-extension:lifecycleScriptscomponentlist stringpostinstall, vscode:prepublish, vscode:uninstallWhen extension package.json contains lifecycle hooksInstall-time script execution risk; postinstall can run arbitrary code during extension installationHard deny
cdx:vscode-extension:executesCodecomponentstringtrue, falseWhen vsixmanifest Properties declares ExecutesCodeExplicitly declares whether the extension executes code; true confirms the extension runs arbitrary codeWarning / triage
cdx:vscode-extension:vscodeEnginecomponentsemver range string^1.94.0, >=1.80.0When vsixmanifest Properties declares the required VS Code engineMinimum VS Code version required; older engines may lack security features like workspace trustContext only
cdx:vscode-extension:idecomponentstringvscode, cursor, vscodium, windsurfWhen extension is discovered from a specific IDE's extension directoryIndicates which IDE the extension was found in; useful for fleet-wide inventoryContext only

High-value combinations

  • cdx:vscode-extension:lifecycleScripts present + cdx:vscode-extension:activationEvents contains * — always-on extension with install-time execution
  • cdx:vscode-extension:untrustedWorkspaces=true + cdx:vscode-extension:contributes contains filesystem-provider — extension operates in untrusted contexts with filesystem access
  • cdx:vscode-extension:extensionKind contains workspace + cdx:vscode-extension:executesCode=true — extension executes arbitrary code on remote hosts
  • cdx:vscode-extension:extensionPack present + any member has lifecycleScripts — pack implicitly installs extensions with install-time risks
  • cdx:vscode-extension:browser present + cdx:vscode-extension:contributes contains terminal-access — potential cross-context capability confusion

Value normalization note for workspace trust properties:
The cdx:vscode-extension:untrustedWorkspaces and cdx:vscode-extension:virtualWorkspaces properties may originate from either a boolean or an object with a supported field in package.json. cdxgen normalizes these to string values:

  • "true" → extension explicitly supports untrusted/virtual workspaces
  • "false" → extension does not support untrusted/virtual workspaces
  • "limited" → extension supports untrusted workspaces with reduced functionality (only for untrustedWorkspaces)

Policy authors should compare against these string values, not booleans.

JSONata tip for VS Code extension rules:
List-valued properties like cdx:vscode-extension:activationEvents, contributes, and extensionKind are comma-separated strings. Use the following pattern to match individual values:

$nullSafeProp($, 'cdx:vscode-extension:activationEvents') ~> $contains('*')

The $trim() step removes whitespace around comma-separated values for reliable matching.

Example payload fragment

{
  "name": "python",
  "publisher": "ms-python",
  "version": "2024.8.1",
  "type": "application",
  "purl": "pkg:vscode-extension/ms-python/python@2024.8.1",
  "properties": [
    { "name": "cdx:vscode-extension:ide", "value": "vscode" },
    {
      "name": "cdx:vscode-extension:activationEvents",
      "value": "onLanguage:python, onCommand:python.runLinting"
    },
    { "name": "cdx:vscode-extension:extensionKind", "value": "workspace" },
    {
      "name": "cdx:vscode-extension:extensionDependencies",
      "value": "ms-python.vscode-pylance"
    },
    { "name": "cdx:vscode-extension:untrustedWorkspaces", "value": "limited" },
    {
      "name": "cdx:vscode-extension:contributes",
      "value": "commands:count:42, debuggers:1, terminal-access"
    },
    { "name": "cdx:vscode-extension:main", "value": "./dist/extension.js" },
    {
      "name": "cdx:vscode-extension:lifecycleScripts",
      "value": "postinstall, vscode:prepublish"
    }
  ]
}

Alias and overlap notes

  • The cdx:vscode-extension:ide property is set to the IDE name where the extension was discovered (for example vscode, cursor, vscodium, windsurf, positron). Extensions found from .vsix files do not have this property.
  • cdx:vscode-extension:lifecycleScripts is analogous to cdx:npm:risky_scripts for npm packages — both capture install-time execution risk.
  • cdx:vscode-extension:contributes is a summary list, not a full enumeration. The count suffix (for example commands:count:42) indicates how many contribution points exist in that category.
  • Extensions discovered via osquery (-t os) use the same pkg:vscode-extension purl type and may also carry cdx:osquery:category.
  • Chromium-browser extensions discovered via -t chrome-extension can include cdx:chrome-extension:browser, cdx:chrome-extension:channel, cdx:chrome-extension:profile, cdx:chrome-extension:profilePath, cdx:chrome-extension:manifestVersion, and cdx:chrome-extension:updateUrl.
  • Chromium-browser extensions discovered via -t chrome-extension can include security-sensitive fields from real manifests: cdx:chrome-extension:permissions, cdx:chrome-extension:optionalPermissions, cdx:chrome-extension:hostPermissions, cdx:chrome-extension:optionalHostPermissions, cdx:chrome-extension:commands, cdx:chrome-extension:contentScriptsRunAt, cdx:chrome-extension:contentScriptsMatches, cdx:chrome-extension:contentSecurityPolicy, cdx:chrome-extension:storageManagedSchema, cdx:chrome-extension:webAccessibleResourceMatches, cdx:chrome-extension:externallyConnectableMatches, and cdx:chrome-extension:hasAutofill.
  • Chromium-browser extensions can include capability booleans derived from manifest + Babel source analysis: cdx:chrome-extension:capability:fileAccess, cdx:chrome-extension:capability:deviceAccess, cdx:chrome-extension:capability:network, cdx:chrome-extension:capability:bluetooth, cdx:chrome-extension:capability:accessibility, cdx:chrome-extension:capability:codeInjection, and cdx:chrome-extension:capability:fingerprinting.
  • Vendor-specific fields are namespaced explicitly: Edge (cdx:chrome-extension:edge:*) and Brave (cdx:chrome-extension:brave:*).
  • Chrome extensions discovered via osquery (-t os) use pkg:chrome-extension and may also carry cdx:osquery:category.

Consumer-oriented views

CI/CD trust

  • cdx:github:action:isShaPinned
  • cdx:github:workflow:hasWritePermissions
  • cdx:github:workflow:hasIdTokenWrite
  • cdx:actions:isOfficial
  • cdx:actions:isVerified
  • cdx:gitlab:job:image
  • cdx:azure:job:pool:vmImage
  • cdx:circleci:orb:alias
  • cdx:jenkins:agent:image

Dependency execution risk

  • cdx:npm:hasInstallScript
  • cdx:npm:risky_scripts
  • cdx:npm:native_addon
  • cdx:npm:native_deps
  • cdx:gem:executables
  • cdx:cargo:features

Non-registry or local source detection

  • cdx:npm:isRegistryDependency
  • cdx:npm:isLink
  • cdx:npm:resolvedPath
  • cdx:pypi:registry
  • cdx:gem:remote
  • cdx:gem:remoteRevision
  • cdx:go:local_dir
  • cdx:nix:input_url
  • cdx:swift:localCheckoutPath
  • cdx:pods:projectDir
  • cdx:pub:registry

Reproducibility and drift

  • cdx:github:action:versionPinningType
  • cdx:pypi:latest_version
  • cdx:gem:remoteRevision
  • cdx:gem:remoteBranch
  • cdx:nix:revision
  • cdx:nix:nar_hash
  • cdx:go:creation_time
  • cdx:build:versionSpecifiers

BOM completeness and explainability

  • cdx:bom:componentNamespaces
  • cdx:bom:componentSrcFiles
  • cdx:bom:componentTypes
  • cdx:lolbas:names
  • cdx:lolbas:riskTags
  • cdx:container:riskTags
  • cdx:container:offenseTools
  • cdx:gtfobins:riskTags
  • cdx:osquery:category
  • cdx:service:httpMethod

IDE extension trust

  • cdx:vscode-extension:lifecycleScripts
  • cdx:vscode-extension:activationEvents
  • cdx:vscode-extension:untrustedWorkspaces
  • cdx:vscode-extension:virtualWorkspaces
  • cdx:vscode-extension:contributes
  • cdx:vscode-extension:extensionDependencies
  • cdx:vscode-extension:extensionPack
  • cdx:vscode-extension:extensionKind
  • cdx:vscode-extension:ide

Browser extension trust

  • cdx:chrome-extension:permissions
  • cdx:chrome-extension:optionalPermissions
  • cdx:chrome-extension:hostPermissions
  • cdx:chrome-extension:optionalHostPermissions
  • cdx:chrome-extension:contentScriptsRunAt
  • cdx:chrome-extension:contentScriptsMatches
  • cdx:chrome-extension:commands
  • cdx:chrome-extension:capability:fileAccess
  • cdx:chrome-extension:capability:deviceAccess
  • cdx:chrome-extension:capability:network
  • cdx:chrome-extension:capability:bluetooth
  • cdx:chrome-extension:capability:accessibility
  • cdx:chrome-extension:capability:codeInjection
  • cdx:chrome-extension:capability:fingerprinting
  • cdx:chrome-extension:hasAutofill

Trust material and signed-software review

  • Repository source properties: cdx:os:repo:type, cdx:os:repo:url, cdx:os:repo:enabled, plus distro-specific repo keys such as cdx:os:repo:signedBy, cdx:os:repo:gpgkey, and cdx:os:repo:gpgcheck
  • Cryptographic material properties: cdx:crypto:trustDomain, cdx:crypto:fingerprint, cdx:crypto:algorithm, cdx:crypto:keyStrength, cdx:crypto:createdAt, cdx:crypto:expiresAt, cdx:crypto:keyPath, cdx:crypto:fileExtension, cdx:crypto:keyId, cdx:crypto:userId, cdx:crypto:isCA
  • macOS trust properties: cdx:darwin:codesign:identifier, cdx:darwin:codesign:format, cdx:darwin:codesign:teamIdentifier, cdx:darwin:codesign:signed, cdx:darwin:codesign:runtimeVersion, cdx:darwin:codesign:authorityCount, cdx:darwin:codesign:authority, cdx:darwin:notarization:assessment, cdx:darwin:notarization:source, cdx:darwin:notarization:origin, cdx:darwin:gatekeeper:status
  • Windows trust properties: cdx:windows:authenticode:status, cdx:windows:authenticode:isOSBinary, cdx:windows:authenticode:statusMessage, cdx:windows:authenticode:signerSubject, cdx:windows:authenticode:signerIssuer, cdx:windows:authenticode:signerThumbprint, cdx:windows:authenticode:signerNotAfter, cdx:windows:authenticode:timestampSubject, cdx:windows:authenticode:timestampIssuer, cdx:windows:authenticode:timestampThumbprint, cdx:windows:wdac:activePolicyCount, cdx:windows:wdac:policyPath, cdx:windows:wdac:policySize, cdx:windows:wdac:lastModified
  • Helper-native OS package trust properties: PackageArchitecture, PackageOrigin, PackageSource, PackageStatus

Native-field note: cdxgen now promotes OS package maintainer/vendor trust metadata into native CycloneDX component fields when possible: supplier, manufacturer, and authors. If those fields already exist with different values, cdxgen leaves the existing native values untouched and retains the fallback property only when needed to avoid dropping the conflicting observation.

Compatibility note: the six Package* keys above are emitted directly on OS-package components by the cdxgen Trivy wrapper for compatibility with existing container/rootfs processing. They are intentionally not cdx:-prefixed today, so policy authors should match the exact names shown here.

Entry template for future additions

When a new cdx: property is introduced, document it using this template so the inventory stays operational instead of becoming another flat list.

KeyScopeValue typeTypical valuesWhen emittedCommon policy usePolicy readinessNotes
cdx:example:keycomponent / workflow / job / step / metadata / serviceboolean string / list string / path / URL / timestamp / JSON string"true", main, sha256-...Trigger or parser stage that emits itWhat policy authors should do with itHard deny / Warning / Context onlyAliases, overlaps, or compatibility guidance

Practical use-case patterns with policy examples

Below are realistic examples showing how to use attributes individually and in combination.

1) Block unpinned GitHub Actions in privileged workflows

Individual signal

  • cdx:github:action:isShaPinned=false means the action reference is tag/branch-based, not commit-SHA pinned.

Combined signal

  • Escalate severity when both are true:
    • cdx:github:action:isShaPinned=false
    • cdx:github:workflow:hasWritePermissions=true (or cdx:github:job:hasWritePermissions=true)

JSONata

components[
  $prop($, 'cdx:github:action:isShaPinned') = 'false'
  and (
    $prop($, 'cdx:github:workflow:hasWritePermissions') = 'true'
    or $prop($, 'cdx:github:job:hasWritePermissions') = 'true'
  )
]

OPA (Rego)

package cdxgen.policies

has_prop(c, name, value) {
  some p in c.properties
  p.name == name
  p.value == value
}

deny[msg] {
  some c in input.components
  has_prop(c, "cdx:github:action:isShaPinned", "false")
  msg := sprintf("Unpinned GitHub Action: %s", [c.purl])
}

deny[msg] {
  some c in input.components
  has_prop(c, "cdx:github:action:isShaPinned", "false")
  has_prop(c, "cdx:github:workflow:hasWritePermissions", "true")
  msg := sprintf("Unpinned action in write-permission workflow: %s", [c.purl])
}

CEL

// any unpinned action
input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:github:action:isShaPinned" && p.value == "false")
)

// unpinned action + write permissions
input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:github:action:isShaPinned" && p.value == "false") &&
  (
    c.properties.exists(p, p.name == "cdx:github:workflow:hasWritePermissions" && p.value == "true") ||
    c.properties.exists(p, p.name == "cdx:github:job:hasWritePermissions" && p.value == "true")
  )
)

2) Flag npm packages with install-time execution risk

Individual signals

  • cdx:npm:hasInstallScript=true
  • cdx:npm:risky_scripts contains lifecycle hooks (for example preinstall, postinstall)

Combined signal

  • Raise priority when execution risk combines with non-registry source:
    • cdx:npm:hasInstallScript=true (or cdx:npm:risky_scripts present)
    • cdx:npm:isRegistryDependency=false

JSONata

components[
  $prop($, 'cdx:npm:hasInstallScript') = 'true'
  and $prop($, 'cdx:npm:isRegistryDependency') = 'false'
]

OPA (Rego)

package cdxgen.policies

has_prop(c, name, value) {
  some p in c.properties
  p.name == name
  p.value == value
}

warn[msg] {
  some c in input.components
  has_prop(c, "cdx:npm:hasInstallScript", "true")
  msg := sprintf("npm package has install script: %s", [c.purl])
}

deny[msg] {
  some c in input.components
  has_prop(c, "cdx:npm:hasInstallScript", "true")
  has_prop(c, "cdx:npm:isRegistryDependency", "false")
  msg := sprintf("npm package executes install script from non-registry source: %s", [c.purl])
}

CEL

input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:npm:hasInstallScript" && p.value == "true") &&
  c.properties.exists(p, p.name == "cdx:npm:isRegistryDependency" && p.value == "false")
)

3) Enforce approved package registries and local-source policy

Individual signals

  • cdx:pypi:registry appears when a non-default Python registry is used.
  • cdx:pub:registry appears when a non-default Dart registry is used.
  • cdx:swift:localCheckoutPath and cdx:pods:projectDir identify local dependency sources.

Combined signal

  • Combine non-approved registries or local checkouts with environment-specific release policy.

JSONata

components[
  $hasProp($, 'cdx:pypi:registry')
  and not(
    $prop($, 'cdx:pypi:registry') = 'https://pypi.org/simple'
    or $prop($, 'cdx:pypi:registry') = 'https://pypi.org'
  )
]

OPA (Rego)

package cdxgen.policies

approved_registries := {
  "https://pypi.org/simple",
  "https://pypi.org",
}

deny[msg] {
  some c in input.components
  some p in c.properties
  p.name == "cdx:pypi:registry"
  not approved_registries[p.value]
  msg := sprintf("Unapproved PyPI registry for %s: %s", [c.purl, p.value])
}

deny[msg] {
  some c in input.components
  c.properties[_].name == "cdx:swift:localCheckoutPath"
  msg := sprintf("Swift local checkout is not allowed in release BOMs: %s", [c.purl])
}

CEL

input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:pypi:registry" &&
    !(p.value in ["https://pypi.org/simple", "https://pypi.org"]))
)

4) Require reproducibility metadata for Nix and Go

Individual signals

  • cdx:nix:revision
  • cdx:nix:nar_hash
  • cdx:go:local_dir

Combined signal

  • Consider a Nix dependency policy-compliant only when both lock properties are present.
  • Treat Go local replacements as non-hermetic unless explicitly allowed.

JSONata

components[
  $startsWith(purl, 'pkg:nix/')
  and (
    not($hasProp($, 'cdx:nix:revision'))
    or not($hasProp($, 'cdx:nix:nar_hash'))
  )
]

For go, use $hasProp($, 'cdx:go:local_dir')

OPA (Rego)

package cdxgen.policies

has_prop(c, name) {
  some p in c.properties
  p.name == name
}

deny[msg] {
  some c in input.components
  startswith(c.purl, "pkg:nix/")
  not has_prop(c, "cdx:nix:revision")
  msg := sprintf("Nix component missing revision: %s", [c.purl])
}

deny[msg] {
  some c in input.components
  startswith(c.purl, "pkg:nix/")
  not has_prop(c, "cdx:nix:nar_hash")
  msg := sprintf("Nix component missing nar_hash: %s", [c.purl])
}

deny[msg] {
  some c in input.components
  has_prop(c, "cdx:go:local_dir")
  msg := sprintf("Go component uses local replacement: %s", [c.purl])
}

CEL

input.components.exists(c,
  c.purl.startsWith("pkg:nix/") &&
  (
    !c.properties.exists(p, p.name == "cdx:nix:revision") ||
    !c.properties.exists(p, p.name == "cdx:nix:nar_hash")
  )
) ||
input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:go:local_dir")
)

5) Gate BOM completeness before downstream signing/attestation

Individual signals

  • cdx:bom:componentTypes
  • cdx:bom:componentSrcFiles

Combined signal

  • Require both metadata properties to exist before generating a “trusted” attestation.

JSONata

not(
  $count(metadata.properties[name = 'cdx:bom:componentTypes']) > 0
  and $count(metadata.properties[name = 'cdx:bom:componentSrcFiles']) > 0
)

OPA (Rego)

package cdxgen.policies

meta_has(name) {
  some p in input.metadata.properties
  p.name == name
}

deny[msg] {
  not meta_has("cdx:bom:componentTypes")
  msg := "BOM metadata missing cdx:bom:componentTypes"
}

deny[msg] {
  not meta_has("cdx:bom:componentSrcFiles")
  msg := "BOM metadata missing cdx:bom:componentSrcFiles"
}

CEL

!(input.metadata.properties.exists(p, p.name == "cdx:bom:componentTypes") &&
  input.metadata.properties.exists(p, p.name == "cdx:bom:componentSrcFiles"))

6) Tighten OIDC use to trusted GitHub actions only

Individual signals

  • cdx:github:workflow:hasIdTokenWrite=true
  • cdx:actions:isOfficial
  • cdx:actions:isVerified

Combined signal

  • Escalate when a workflow can mint OIDC tokens and the action is neither official nor otherwise trusted by organization policy.

JSONata

components[
  $prop($, 'cdx:github:workflow:hasIdTokenWrite') = 'true'
  and $prop($, 'cdx:actions:isOfficial') = 'false'
]

OPA (Rego)

package cdxgen.policies

has_prop(c, name, value) {
  some p in c.properties
  p.name == name
  p.value == value
}

deny[msg] {
  some c in input.components
  has_prop(c, "cdx:github:workflow:hasIdTokenWrite", "true")
  has_prop(c, "cdx:actions:isOfficial", "false")
  msg := sprintf("OIDC-enabled workflow references non-official action: %s", [c.purl])
}

CEL

input.components.exists(c,
  c.properties.exists(p, p.name == "cdx:github:workflow:hasIdTokenWrite" && p.value == "true") &&
  c.properties.exists(p, p.name == "cdx:actions:isOfficial" && p.value == "false")
)

7) Audit VS Code extensions for install-time execution and host access

Individual signals

  • cdx:vscode-extension:lifecycleScripts present (especially containing postinstall) means the extension runs scripts during installation.
  • cdx:vscode-extension:activationEvents containing * means the extension activates on every workspace open.
  • cdx:vscode-extension:contributes containing terminal-access, filesystem-provider, or authentication-provider indicates privileged host interaction capabilities.

Combined signal

  • Escalate when an always-on extension also has terminal access or lifecycle scripts:
    • cdx:vscode-extension:activationEvents contains *
    • cdx:vscode-extension:contributes contains terminal-access
    • cdx:vscode-extension:lifecycleScripts present

JSONata

components[
  $startsWith(purl, 'pkg:vscode-extension/')
  and $hasProp($, 'cdx:vscode-extension:lifecycleScripts')
]

OPA (Rego)

package cdxgen.policies

has_prop(c, name) {
  some p in c.properties
  p.name == name
}

prop_value(c, name) := v {
  some p in c.properties
  p.name == name
  v := p.value
}

deny[msg] {
  some c in input.components
  startswith(c.purl, "pkg:vscode-extension/")
  has_prop(c, "cdx:vscode-extension:lifecycleScripts")
  msg := sprintf("VS Code extension has lifecycle scripts: %s", [c.purl])
}

warn[msg] {
  some c in input.components
  startswith(c.purl, "pkg:vscode-extension/")
  v := prop_value(c, "cdx:vscode-extension:activationEvents")
  contains(v, "*")
  msg := sprintf("VS Code extension uses wildcard activation (always-on): %s", [c.purl])
}

deny[msg] {
  some c in input.components
  startswith(c.purl, "pkg:vscode-extension/")
  v := prop_value(c, "cdx:vscode-extension:activationEvents")
  contains(v, "*")
  cv := prop_value(c, "cdx:vscode-extension:contributes")
  contains(cv, "terminal-access")
  msg := sprintf("Always-on VS Code extension with terminal access: %s", [c.purl])
}

CEL

// extension with lifecycle scripts
input.components.exists(c,
  c.purl.startsWith("pkg:vscode-extension/") &&
  c.properties.exists(p, p.name == "cdx:vscode-extension:lifecycleScripts")
)

// always-on extension with terminal access
input.components.exists(c,
  c.purl.startsWith("pkg:vscode-extension/") &&
  c.properties.exists(p, p.name == "cdx:vscode-extension:activationEvents" && p.value.contains("*")) &&
  c.properties.exists(p, p.name == "cdx:vscode-extension:contributes" && p.value.contains("terminal-access"))
)

Notes for policy authors

  • Prefer evaluating these as context enrichers rather than strict truth assertions unless you explicitly normalize missing-vs-false semantics.
  • Treat workspace/local path indicators (isLink, resolvedPath, localCheckoutPath, projectDir, flake_dir, local_dir) as provenance signals that may require stronger trust controls.
  • Treat execution-related indicators (risky_scripts, hasInstallScript, CI write permissions, OIDC enablement, action pinning type) as high-priority triage fields for software supply chain risk.
  • Treat VS Code extension lifecycle scripts (cdx:vscode-extension:lifecycleScripts) with the same urgency as npm install scripts (cdx:npm:hasInstallScript); both represent install-time code execution risk. Wildcard activation events (*) combined with terminal access or filesystem provider contributions indicate extensions with broad host access capabilities.
  • In Rego examples, use helper predicates such as has_prop(c, name, value) to ensure all property checks evaluate against the same component instance, avoiding unintended cross-component matches from repeated c.properties[_] array iteration.
  • Match overlapping keys where noted (cdx:npm:isWorkspace and cdx:npm:is_workspace; Azure pool defaults and job overrides) so older and newer BOMs behave consistently in policy engines.