ObjectStackObjectStack

Plugin Security Advanced

Plugin Security Advanced protocol schemas

Plugin Security and Sandboxing Protocol

Defines comprehensive security mechanisms for plugin isolation, permission management, and threat protection in the ObjectStack ecosystem.

Features:

  • Fine-grained permission system
  • Resource access control
  • Sandboxing and isolation
  • Security scanning and verification
  • Runtime security monitoring

Source: packages/spec/src/kernel/plugin-security-advanced.zod.ts

TypeScript Usage

import { KernelSecurityPolicySchema, KernelSecurityScanResultSchema, KernelSecurityVulnerabilitySchema, PermissionActionSchema, PermissionScopeSchema, PluginPermissionSchema, PluginPermissionSetSchema, PluginSecurityManifestSchema, PluginTrustLevelSchema, ResourceTypeSchema, RuntimeConfigSchema, SandboxConfigSchema } from '@objectstack/spec/kernel';
import type { KernelSecurityPolicy, KernelSecurityScanResult, KernelSecurityVulnerability, PermissionAction, PermissionScope, PluginPermission, PluginPermissionSet, PluginSecurityManifest, PluginTrustLevel, ResourceType, RuntimeConfig, SandboxConfig } from '@objectstack/spec/kernel';

// Validate data
const result = KernelSecurityPolicySchema.parse(data);

KernelSecurityPolicy

Properties

PropertyTypeRequiredDescription
csp{ directives?: Record<string, string[]>; reportOnly: boolean }optional
cors{ allowedOrigins: string[]; allowedMethods: string[]; allowedHeaders: string[]; allowCredentials: boolean; … }optional
rateLimit{ enabled: boolean; maxRequests: integer; windowMs: integer; strategy: Enum<'fixed' | 'sliding' | 'token-bucket'> }optional
authentication{ required: boolean; methods: Enum<'jwt' | 'oauth2' | 'api-key' | 'session' | 'certificate'>[]; tokenExpiration?: integer }optional
encryption{ dataAtRest: boolean; dataInTransit: boolean; algorithm?: string; minKeyLength?: integer }optional
auditLog{ enabled: boolean; events?: string[]; retention?: integer }optional

Nested Shape: KernelSecurityPolicy.rateLimit

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)
maxRequestsinteger
windowMsintegerTime window in milliseconds
strategyEnum<'fixed' | 'sliding' | 'token-bucket'>optional (default: "sliding")

Nested Shape: KernelSecurityPolicy.authentication

PropertyTypeRequiredDescription
requiredbooleanoptional (default: true)
methodsEnum<'jwt' | 'oauth2' | 'api-key' | 'session' | 'certificate'>[]
tokenExpirationintegeroptionalToken expiration in seconds

Nested Shape: KernelSecurityPolicy.encryption

PropertyTypeRequiredDescription
dataAtRestbooleanoptional (default: false)Encrypt data at rest
dataInTransitbooleanoptional (default: true)Enforce HTTPS/TLS
algorithmstringoptionalEncryption algorithm
minKeyLengthintegeroptionalMinimum key length in bits

Nested Shape: KernelSecurityPolicy.auditLog

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)
eventsstring[]optionalEvents to log
retentionintegeroptionalLog retention in days

KernelSecurityScanResult

Properties

PropertyTypeRequiredDescription
timestampstring
scanner{ name: string; version: string }
statusEnum<'passed' | 'failed' | 'warning'>
vulnerabilities{ cve?: string; id: string; severity: Enum<'critical' | 'high' | 'medium' | 'low' | 'info'>; category?: string; … }[]optional
codeIssues{ severity: Enum<'error' | 'warning' | 'info'>; type: string; file: string; line?: integer; … }[]optional
dependencyVulnerabilities{ package: string; version: string; vulnerability: object }[]optional
licenseCompliance{ status: Enum<'compliant' | 'non-compliant' | 'unknown'>; issues?: object[] }optional
summary{ totalVulnerabilities: integer; criticalCount: integer; highCount: integer; mediumCount: integer; … }

Nested Shape: KernelSecurityScanResult.codeIssues[number]

PropertyTypeRequiredDescription
severityEnum<'error' | 'warning' | 'info'>
typestringIssue type (e.g., sql-injection, xss)
filestring
lineintegeroptional
messagestring
suggestionstringoptional

KernelSecurityVulnerability

Properties

PropertyTypeRequiredDescription
cvestringoptional
idstring
severityEnum<'critical' | 'high' | 'medium' | 'low' | 'info'>
categorystringoptional
titlestring
locationstringoptional
remediationstringoptional
descriptionstring
affectedVersionsstring[]
fixedInstring[]optional
cvssScorenumberoptional
exploitAvailablebooleanoptional (default: false)
patchAvailablebooleanoptional (default: false)
workaroundstringoptional
referencesstring[]optional
discoveredDatestringoptional
publishedDatestringoptional

PermissionAction

Type of action being permitted

Allowed Values

  • create
  • read
  • update
  • delete
  • execute
  • manage
  • configure
  • share
  • export
  • import
  • admin

PermissionScope

Scope of permission application

Allowed Values

  • global
  • tenant
  • user
  • resource
  • plugin

PluginPermission

Properties

PropertyTypeRequiredDescription
idstringUnique permission identifier
resourceEnum<'data.object' | 'data.record' | 'data.field' | 'ui.view' | 'ui.dashboard' | 'ui.report' | 'system.config' | 'system.plugin' | 'system.api' | 'system.service' | … +6 more>Type of resource being accessed
actionsEnum<'create' | 'read' | 'update' | 'delete' | 'execute' | 'manage' | 'configure' | 'share' | 'export' | 'import' | 'admin'>[]
scopeEnum<'global' | 'tenant' | 'user' | 'resource' | 'plugin'>optional (default: "plugin")Scope of permission application
filter{ resourceIds?: string[]; condition?: string | object; fields?: string[] }optional
descriptionstring
requiredbooleanoptional (default: true)
justificationstringoptionalWhy this permission is needed

Allowed Values: PluginPermission.resource

  • data.object
  • data.record
  • data.field
  • ui.view
  • ui.dashboard
  • ui.report
  • system.config
  • system.plugin
  • system.api
  • system.service
  • storage.file
  • storage.database
  • network.http
  • network.websocket
  • process.spawn
  • process.env

Nested Shape: PluginPermission.filter

PropertyTypeRequiredDescription
resourceIdsstring[]optional
conditionstring | { dialect: Enum<'cel' | 'cron' | 'template'>; source?: string; ast?: any; meta?: object }optionalPredicate (CEL) filter, e.g. Precord.owner == os.user.id.
fieldsstring[]optionalAllowed fields for data resources

PluginPermissionSet

Properties

PropertyTypeRequiredDescription
permissions{ id: string; resource: Enum<'data.object' | 'data.record' | 'data.field' | 'ui.view' | 'ui.dashboard' | …>; actions: Enum<'create' | 'read' | 'update' | 'delete' | 'execute' | 'manage' | 'configure' | …>[]; scope?: Enum<'global' | 'tenant' | 'user' | 'resource' | 'plugin'>; … }[]
groups{ name: string; description: string; permissions: string[] }[]optional
defaultGrantEnum<'prompt' | 'allow' | 'deny' | 'inherit'>optional (default: "prompt")

Nested Shape: PluginPermissionSet.permissions[number]

PropertyTypeRequiredDescription
idstringUnique permission identifier
resourceEnum<'data.object' | 'data.record' | 'data.field' | 'ui.view' | 'ui.dashboard' | …>Type of resource being accessed
actionsEnum<'create' | 'read' | 'update' | 'delete' | 'execute' | 'manage' | 'configure' | …>[]
scopeEnum<'global' | 'tenant' | 'user' | 'resource' | 'plugin'>optional (default: "plugin")Scope of permission application
filter{ resourceIds?: string[]; condition?: string | object; fields?: string[] }optional
descriptionstring
requiredbooleanoptional (default: true)
justificationstringoptionalWhy this permission is needed

Nested Shape: PluginPermissionSet.groups[number]

PropertyTypeRequiredDescription
namestringGroup name
descriptionstring
permissionsstring[]Permission IDs in this group

PluginSecurityManifest

Properties

PropertyTypeRequiredDescription
pluginIdstring
trustLevelEnum<'verified' | 'trusted' | 'community' | 'untrusted' | 'blocked'>Trust level of the plugin
permissions{ permissions: object[]; groups?: object[]; defaultGrant?: Enum<'prompt' | 'allow' | 'deny' | 'inherit'> }
sandbox{ enabled?: boolean; level?: Enum<'none' | 'minimal' | 'standard' | 'strict' | 'paranoid'>; runtime?: object; filesystem?: object; … }
policy{ csp?: object; cors?: object; rateLimit?: object; authentication?: object; … }optional
scanResults{ timestamp: string; scanner: object; status: Enum<'passed' | 'failed' | 'warning'>; vulnerabilities?: object[]; … }[]optional
vulnerabilities{ cve?: string; id: string; severity: Enum<'critical' | 'high' | 'medium' | 'low' | 'info'>; category?: string; … }[]optional
codeSigning{ signed: boolean; signature?: string; certificate?: string; algorithm?: string; … }optional
certifications{ name: string; issuer: string; issuedDate: string; expiryDate?: string; … }[]optional
securityContact{ email?: string; url?: string; pgpKey?: string }optional
vulnerabilityDisclosure{ policyUrl?: string; responseTime?: integer; bugBounty?: boolean }optional

Nested Shape: PluginSecurityManifest.sandbox

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)
levelEnum<'none' | 'minimal' | 'standard' | 'strict' | 'paranoid'>optional (default: "standard")
runtime{ engine?: Enum<'v8-isolate' | 'wasm' | 'container' | 'process'>; engineConfig?: object; resourceLimits?: object }optionalExecution environment and isolation settings
filesystem{ mode?: Enum<'none' | 'readonly' | 'restricted' | 'full'>; allowedPaths?: string[]; deniedPaths?: string[]; maxFileSize?: integer }optional
network{ mode?: Enum<'none' | 'local' | 'restricted' | 'full'>; allowedHosts?: string[]; deniedHosts?: string[]; allowedPorts?: number[]; … }optional
process{ allowSpawn?: boolean; allowedCommands?: string[]; timeout?: integer }optional
memory{ maxHeap?: integer; maxStack?: integer }optional
cpu{ maxCpuPercent?: number; maxThreads?: integer }optional
environment{ mode?: Enum<'none' | 'readonly' | 'restricted' | 'full'>; allowedVars?: string[]; deniedVars?: string[] }optional

Nested Shape: PluginSecurityManifest.certifications[number]

PropertyTypeRequiredDescription
namestringCertification name (e.g., SOC 2, ISO 27001)
issuerstring
issuedDatestring
expiryDatestringoptional
certificateUrlstringoptional

Nested Shape: PluginSecurityManifest.vulnerabilityDisclosure

PropertyTypeRequiredDescription
policyUrlstringoptional
responseTimeintegeroptionalExpected response time in hours
bugBountybooleanoptional (default: false)

PluginTrustLevel

Trust level of the plugin

Allowed Values

  • verified
  • trusted
  • community
  • untrusted
  • blocked

ResourceType

Type of resource being accessed

Allowed Values

  • data.object
  • data.record
  • data.field
  • ui.view
  • ui.dashboard
  • ui.report
  • system.config
  • system.plugin
  • system.api
  • system.service
  • storage.file
  • storage.database
  • network.http
  • network.websocket
  • process.spawn
  • process.env

RuntimeConfig

Properties

PropertyTypeRequiredDescription
engineEnum<'v8-isolate' | 'wasm' | 'container' | 'process'>optional (default: "v8-isolate")Execution environment engine
engineConfig{ wasm?: object; container?: object; v8Isolate?: object }optional
resourceLimits{ maxMemory?: integer; maxCpu?: number; timeout?: integer }optional

Nested Shape: RuntimeConfig.resourceLimits

PropertyTypeRequiredDescription
maxMemoryintegeroptionalMaximum memory allocation
maxCpunumberoptionalMaximum CPU usage percentage
timeoutintegeroptionalMaximum execution time

SandboxConfig

Properties

PropertyTypeRequiredDescription
enabledbooleanoptional (default: true)
levelEnum<'none' | 'minimal' | 'standard' | 'strict' | 'paranoid'>optional (default: "standard")
runtime{ engine: Enum<'v8-isolate' | 'wasm' | 'container' | 'process'>; engineConfig?: object; resourceLimits?: object }optionalExecution environment and isolation settings
filesystem{ mode: Enum<'none' | 'readonly' | 'restricted' | 'full'>; allowedPaths?: string[]; deniedPaths?: string[]; maxFileSize?: integer }optional
network{ mode: Enum<'none' | 'local' | 'restricted' | 'full'>; allowedHosts?: string[]; deniedHosts?: string[]; allowedPorts?: number[]; … }optional
process{ allowSpawn: boolean; allowedCommands?: string[]; timeout?: integer }optional
memory{ maxHeap?: integer; maxStack?: integer }optional
cpu{ maxCpuPercent?: number; maxThreads?: integer }optional
environment{ mode: Enum<'none' | 'readonly' | 'restricted' | 'full'>; allowedVars?: string[]; deniedVars?: string[] }optional

Nested Shape: SandboxConfig.runtime

PropertyTypeRequiredDescription
engineEnum<'v8-isolate' | 'wasm' | 'container' | 'process'>optional (default: "v8-isolate")Execution environment engine
engineConfig{ wasm?: object; container?: object; v8Isolate?: object }optional
resourceLimits{ maxMemory?: integer; maxCpu?: number; timeout?: integer }optional

Nested Shape: SandboxConfig.filesystem

PropertyTypeRequiredDescription
modeEnum<'none' | 'readonly' | 'restricted' | 'full'>optional (default: "restricted")
allowedPathsstring[]optionalWhitelisted paths
deniedPathsstring[]optionalBlacklisted paths
maxFileSizeintegeroptionalMaximum file size in bytes

Nested Shape: SandboxConfig.network

PropertyTypeRequiredDescription
modeEnum<'none' | 'local' | 'restricted' | 'full'>optional (default: "restricted")
allowedHostsstring[]optionalWhitelisted hosts
deniedHostsstring[]optionalBlacklisted hosts
allowedPortsnumber[]optionalAllowed port numbers
maxConnectionsintegeroptional

Nested Shape: SandboxConfig.process

PropertyTypeRequiredDescription
allowSpawnbooleanoptional (default: false)Allow spawning child processes
allowedCommandsstring[]optionalWhitelisted commands
timeoutintegeroptionalProcess timeout in ms

Nested Shape: SandboxConfig.memory

PropertyTypeRequiredDescription
maxHeapintegeroptionalMaximum heap size in bytes
maxStackintegeroptionalMaximum stack size in bytes

On this page