registry  /  @ngocsangairvds/vsaf  /  5.1.4

@ngocsangairvds/vsaf@5.1.4

logging step

AI Security Review

scanned 3d ago · by lpm-firewall-ai

No confirmed malicious attack surface is established by install-time or import-time code. The risky primitives are package-aligned workflow/skill installation and provider command execution, activated by explicit CLI use.

Static reason
One or more suspicious static signals were detected.; previous stored version diff introduced dangerous source
Trigger
npm install runs postinstall; vsaf install/run commands are user-invoked
Impact
Postinstall affects only package-local node_modules/@vsaf/core; explicit CLI commands may modify project AI-agent configuration and install dependencies as documented.
Mechanism
benign workspace link plus user-invoked workflow/skill orchestration
Rationale
Source inspection does not confirm unconsented credential access, exfiltration, persistence, or AI-agent control-surface mutation during npm install; the postinstall only repairs an internal workspace link. Runtime installers and command execution are explicit, documented CLI functionality for this workflow engine.
Evidence
package.jsonscripts/postinstall.jspackages/cli/dist/commands/install.jspackages/cli/dist/index.jspackages/core/dist/providers/command-provider.jsREADME.mdnode_modules/@vsaf/core.mcp.json.claude/skills.vsaf/skills.vsaf/commands.vsaf/workflows

Decision evidence

public snapshot
AI called this Clean at 90.0% confidence as Benign with medium false-positive risk.
Evidence for block
  • package.json declares install-time postinstall: node scripts/postinstall.js
  • packages/cli/dist/commands/install.js can run npm, pipx, brew/apt/dnf, and write project .mcp.json/.claude/.vsaf paths when user invokes vsaf install
  • packages/core/dist/providers/command-provider.js executes configured provider commands via execFile
Evidence against
  • scripts/postinstall.js only links or copies packages/core/dist into node_modules/@vsaf/core under the install cwd
  • postinstall does not read secrets, contact network endpoints, alter shell rc files, or write AI-agent home directories
  • CLI package/dependency installation and skill deployment are behind explicit vsaf install/skill commands, not import-time or install-time behavior
  • Command provider execution is workflow/config driven and uses execFile with bounded provider env plus secret redaction
  • README documents VSAF as an AI workflow engine with skill-pack and MCP setup behavior
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsMinifiedProtestwareUrlStrings
ManifestNo manifest risk signals triggered.
scanned 84 file(s), 666 KB of source, external domains: aistudio.google.com, aka.ms, angular.dev, api.anthropic.com, api.openai.com, astral.sh, console.anthropic.com, generativelanguage.googleapis.com, github.com, pipx.pypa.io, platform.openai.com, www.python.org, www.w3.org

Source & flagged code

41 flagged · loading source
package.jsonView file
scripts.postinstall = node scripts/postinstall.js
High
Install Time Lifecycle Scripts

Package defines install-time lifecycle scripts.

package.jsonView on unpkg
scripts.postinstall = node scripts/postinstall.js
Medium
Ambiguous Install Lifecycle Script

Install-time lifecycle script is not statically allowlisted and needs review.

package.jsonView on unpkg
skills/vds-skill/runtime/pdf_orchestrator/tests/conftest.pyView file
194patternName = aws_access_key severity = critical line = 194 matchedText = - AKIA12... key
Critical
Critical Secret

Package contains a critical-looking secret pattern.

skills/vds-skill/runtime/pdf_orchestrator/tests/conftest.pyView on unpkg · L194
packages/core/dist/providers/command-provider.jsView file
9exports.resolveNodeProviderConfig = resolveNodeProviderConfig; L10: const child_process_1 = require("child_process"); L11: const os_1 = __importDefault(require("os"));
High
Child Process

Package source references child process execution.

packages/core/dist/providers/command-provider.jsView on unpkg · L9
skills/vds-skill/install-deps.mjsView file
133execSync( L134: 'powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex"', L135: { stdio: 'inherit' },
High
Shell

Package source references shell execution.

skills/vds-skill/install-deps.mjsView on unpkg · L133
scripts/postinstall.jsView file
7* "workspaces" from package.json). This script recreates the link so that L8: * `require('@vsaf/core')` works after `npm install -g`. L9: *
Medium
Dynamic Require

Package source references dynamic require/import behavior.

scripts/postinstall.jsView on unpkg · L7
packages/cli/dist/commands/install.jsView file
73try { L74: (0, child_process_1.execSync)('npm install @ngocsangairvds/pre-require', { cwd: projectPath, stdio: 'inherit', timeout: 120_000 }); L75: }
High
Runtime Package Install

Package source invokes a package manager install command at runtime.

packages/cli/dist/commands/install.jsView on unpkg · L73
skills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.pyView file
path = skills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py kind = build_helper sizeBytes = 91 magicHex = [redacted]
Medium
Ships Build Helper

Package ships non-JavaScript build or shell helper files.

skills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.pyView on unpkg
skills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.pdfView file
path = skills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.pdf kind = high_entropy_blob sizeBytes = 40986 magicHex = [redacted]
High
Ships High Entropy Blob

Package ships high-entropy non-source blobs.

skills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.pdfView on unpkg
skills/vds-skill/runtime/vds_cli/tests/unit/test_cli_DOC004.pyView file
path = skills/vds-skill/runtime/vds_cli/tests/unit/test_cli_DOC004.py kind = payload_in_excluded_dir sizeBytes = 3413 magicHex = [redacted]
High
Payload In Excluded Dir

Package hides binary, compressed, or executable-looking payloads in test/fixture/hidden paths.

skills/vds-skill/runtime/vds_cli/tests/unit/test_cli_DOC004.pyView on unpkg
packages/core/dist/providers/default-adapters.jsView file
matchType = previous_version_dangerous_delta matchedPackage = @ngocsangairvds/vsaf@5.1.2 matchedIdentity = npm:QG5nb2NzYW5nYWlydmRzL3ZzYWY:5.1.2 similarity = 0.795 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.

packages/core/dist/providers/default-adapters.jsView on unpkg
skills/vds-skill/runtime/vds_cli/tests/unit/test_cli.pyView file
226patternName = generic_password severity = medium line = 226 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/vds_cli/tests/unit/test_cli.py

skills/vds-skill/runtime/vds_cli/tests/unit/test_cli.pyView on unpkg · L226
skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView file
25patternName = generic_password severity = medium line = 25 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L25
58patternName = generic_password severity = medium line = 58 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L58
99patternName = generic_password severity = medium line = 99 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L99
119patternName = generic_password severity = medium line = 119 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L119
140patternName = generic_password severity = medium line = 140 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L140
156patternName = generic_password severity = medium line = 156 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L156
175patternName = generic_password severity = medium line = 175 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L175
216patternName = generic_password severity = medium line = 216 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L216
263patternName = generic_password severity = medium line = 263 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L263
304patternName = generic_password severity = medium line = 304 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L304
331patternName = generic_password severity = medium line = 331 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L331
357patternName = generic_password severity = medium line = 357 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L357
385patternName = generic_password severity = medium line = 385 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.pyView on unpkg · L385
skills/vds-skill/runtime/jira_orchestrator/tests/test_application_properties.pyView file
33patternName = generic_password severity = medium line = 33 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_application_properties.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_application_properties.pyView on unpkg · L33
skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView file
17patternName = generic_password severity = medium line = 17 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L17
47patternName = generic_password severity = medium line = 47 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L47
82patternName = generic_password severity = medium line = 82 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L82
102patternName = generic_password severity = medium line = 102 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L102
129patternName = generic_password severity = medium line = 129 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L129
149patternName = generic_password severity = medium line = 149 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L149
173patternName = generic_password severity = medium line = 173 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L173
197patternName = generic_password severity = medium line = 197 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L197
217patternName = generic_password severity = medium line = 217 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L217
237patternName = generic_password severity = medium line = 237 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.pyView on unpkg · L237
skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_archiving.pyView file
33patternName = generic_password severity = medium line = 33 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_archiving.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_issue_archiving.pyView on unpkg · L33
skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.pyView file
22patternName = generic_password severity = medium line = 22 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.pyView on unpkg · L22
55patternName = generic_password severity = medium line = 55 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.pyView on unpkg · L55
85patternName = generic_password severity = medium line = 85 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.pyView on unpkg · L85
133patternName = generic_password severity = medium line = 133 matchedText = mock_set...ass"
Medium
Secret Pattern

Hardcoded password in skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py

skills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.pyView on unpkg · L133

Findings

2 Critical6 High37 Medium5 Low
CriticalCritical Secretskills/vds-skill/runtime/pdf_orchestrator/tests/conftest.py
CriticalPrevious Version Dangerous Deltapackages/core/dist/providers/default-adapters.js
HighInstall Time Lifecycle Scriptspackage.json
HighChild Processpackages/core/dist/providers/command-provider.js
HighShellskills/vds-skill/install-deps.mjs
HighRuntime Package Installpackages/cli/dist/commands/install.js
HighShips High Entropy Blobskills/vds-skill/runtime/pdf_orchestrator/cli_verification_test/test.pdf
HighPayload In Excluded Dirskills/vds-skill/runtime/vds_cli/tests/unit/test_cli_DOC004.py
MediumAmbiguous Install Lifecycle Scriptpackage.json
MediumDynamic Requirescripts/postinstall.js
MediumNetwork
MediumEnvironment Vars
MediumProtestware
MediumShips Build Helperskills/vds-skill/runtime/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py
MediumStructural Risk Force Deep Review
MediumSecret Patternskills/vds-skill/runtime/vds_cli/tests/unit/test_cli.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_bulk_operations.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_application_properties.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_user_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_issue_archiving.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py
MediumSecret Patternskills/vds-skill/runtime/jira_orchestrator/tests/test_version_management.py
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings