registry  /  @zenith-open/zenithcms-core  /  1.0.0-beta.2

@zenith-open/zenithcms-core@1.0.0-beta.2

Zenith CMS — headless engine with REST, GraphQL, and AI tools

AI Security Review

scanned 1d ago · by lpm-firewall-ai

No confirmed malicious attack surface was established. Risky primitives are tied to CMS runtime/admin features, user-defined workflows, or local project configuration.

Static reason
One or more suspicious static signals were detected.; previous stored version diff introduced dangerous source
Trigger
User imports/starts the CMS server, runs the zenithcms CLI, or an authenticated admin uses system/onboarding/flow features.
Impact
No evidence of unconsented install-time execution, credential exfiltration, persistence, or destructive behavior.
Mechanism
CMS runtime features with admin-gated shell, file, vm, and network capabilities
Rationale
Static source inspection found dangerous primitives, but they are package-aligned CMS/admin capabilities and not activated at install or import time for unconsented behavior. No concrete malware behavior, exfiltration path, persistence, or AI-agent control hijack was present.
Evidence
package.jsondist/packages/core/src/index.jsdist/packages/core/src/api/system.jsdist/packages/core/src/services/flow-engine.jsdist/packages/core/src/cli/index.jsdist/database/adapters/AotBridge.jsdist/packages/core/src/services/ai.jsdist/packages/core/src/services/ai-providers.js.envzenith-schema.json.zenith/adapter.ts.zenith/adapter.jsdist/templates/<projectType>/backend/setup.ts
Network endpoints10
openrouter.ai/api/v1/auth/keyapi.openai.com/v1/modelsapi.anthropic.com/v1/messagesintegrate.api.nvidia.com/v1/modelsgenerativelanguage.googleapis.com/v1beta/modelsapi.x.ai/v1/chat/completionsapi.groq.com/openai/v1/chat/completionsapi.together.xyz/v1/chat/completionsapi.mistral.ai/v1/chat/completionsapi.cohere.com/v2/chat

Decision evidence

public snapshot
AI called this Clean at 82.0% confidence as Benign with medium false-positive risk.
Evidence for block
  • dist/packages/core/src/services/flow-engine.js runs admin/user-defined flow code and conditions in vm with process.env in sandbox.
  • dist/packages/core/src/api/system.js admin onboarding route uses child_process execSync to run a local template setup script.
  • dist/packages/core/src/api/system.js admin DB save route writes DATABASE_TYPE and DB URI to a project .env file.
Evidence against
  • package.json has no install/preinstall/postinstall/prepare lifecycle hooks.
  • Main entry dist/packages/core/src/index.js initializes a CMS server; no import-time credential harvesting or exfiltration found.
  • Network calls in dist/packages/core/src/services/ai.js and ai-providers.js target configured AI providers for CMS AI features.
  • CLI child_process use in dist/packages/core/src/cli/index.js is user-invoked plugin installation for official Zenith packages.
  • Dynamic import in dist/database/adapters/AotBridge.js loads a local project .zenith adapter only when the app starts.
  • No reviewer/prompt manipulation files or AI-agent control-surface writes found by rg inspection.
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkWebSocket
Supply chain
HighEntropyStringsUrlStrings
Manifest
NoLicense
scanned 412 file(s), 2.24 MB of source, external domains: accounts.google.com, api.anthropic.com, api.cohere.com, api.github.com, api.groq.com, api.mistral.ai, api.openai.com, api.together.xyz, api.x.ai, dummy-test-file-url-12345.public.blob.vercel-storage.com, fonts.googleapis.com, fonts.gstatic.com, generativelanguage.googleapis.com, github.com, integrate.api.nvidia.com, oauth2.googleapis.com, openrouter.ai, production.zenithcms.internal, storage.googleapis.com, www.googleapis.com, www.paypal.com, zenithcms.com

Source & flagged code

7 flagged · loading source
dist/packages/core/src/api/auth/sso.jsView file
36patternName = generic_password severity = medium line = 36 matchedText = password...nt',
Medium
Secret Pattern

Package contains a possible secret pattern.

dist/packages/core/src/api/auth/sso.jsView on unpkg · L36
dist/cli/index.jsView file
237const prompts = require('prompts'); L238: const { execSync } = require('child_process'); L239: console.log('\n======================================');
High
Child Process

Package source references child process execution.

dist/cli/index.jsView on unpkg · L237
dist/database/adapters/AotBridge.jsView file
30try { L31: // Convert absolute Windows paths to file:// URLs for ESM import() compatibility L32: const fileUrl = pathToFileURL(fileToLoad).href;
Medium
Dynamic Require

Package source references dynamic require/import behavior.

dist/database/adapters/AotBridge.jsView on unpkg · L30
dist/packages/core/src/services/flow-engine.jsView file
121status: 'running', L122: context: { payload, env: process.env }, L123: completedNodes: {}, ... L321: else { L322: const headers = config.headers ? JSON.parse(config.headers) : {}; L323: const body = config.body ? JSON.parse(config.body) : context.payload || context; L324: const method = config.method || 'POST'; L325: const res = await fetch(config.url, { L326: method, L327: headers: { 'Content-Type': 'application/json', ...headers }, L328: body: method !== 'GET' ? JSON.stringify(body) : undefined L329: });
Medium
Unsafe Vm Context

Package source executes code through a VM context API.

dist/packages/core/src/services/flow-engine.jsView on unpkg · L121
dist/packages/core/src/api/system.jsView file
1211try { L1212: execSync(`npx tsx ${scriptPath}`, { stdio: 'inherit' }); L1213: }
High
Runtime Package Install

Package source invokes a package manager install command at runtime.

dist/packages/core/src/api/system.jsView on unpkg · L1211
dist/index.jsView file
matchType = previous_version_dangerous_delta matchedPackage = @zenith-open/zenithcms-core@1.0.0-beta.1 matchedIdentity = npm:[redacted]:1.0.0-beta.1 similarity = 0.875 summary = stored previous version shares package body but lacks this dangerous source file
Critical
Previous Version Dangerous Delta

This package version adds a dangerous source file absent from the previous stored version; route for source-aware review.

dist/index.jsView on unpkg
dist/api/auth/sso.jsView file
36patternName = generic_password severity = medium line = 36 matchedText = password...nt',
Medium
Secret Pattern

Hardcoded password in dist/api/auth/sso.js

dist/api/auth/sso.jsView on unpkg · L36

Findings

1 Critical2 High7 Medium5 Low
CriticalPrevious Version Dangerous Deltadist/index.js
HighChild Processdist/cli/index.js
HighRuntime Package Installdist/packages/core/src/api/system.js
MediumSecret Patterndist/packages/core/src/api/auth/sso.js
MediumDynamic Requiredist/database/adapters/AotBridge.js
MediumUnsafe Vm Contextdist/packages/core/src/services/flow-engine.js
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
MediumSecret Patterndist/api/auth/sso.js
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings
LowNo License