registry  /  @venos-inc/venos  /  0.1.13

@venos-inc/venos@0.1.13

Self-service CLI for venos — wire your AI client to the venos security gateway in one command.

AI Security Review

scanned 11d ago · by lpm-firewall-ai

No confirmed malicious attack surface. The package is an invasive but disclosed security gateway CLI that modifies AI-agent configs and reports telemetry/inventory only after user configuration.

Static reason
One or more suspicious static signals were detected.
Trigger
User runs `venos init`, configured AI-client hooks invoke `venos hook`, or user/service runs heartbeat/inventory/usage commands.
Impact
AI tool prompts/events, host/app inventory, usage summaries, and configured document classifications may be sent to the configured venos orchestrator.
Mechanism
User-consented AI gateway wiring and security telemetry forwarding
Rationale
The suspicious primitives are real but are aligned with the package's documented purpose and are activated by explicit CLI setup or configured hooks, not install/import-time behavior. I found no hardcoded exfiltration endpoint, credential harvesting beyond the configured API key, destructive behavior, or unconsented AI-agent control-surface mutation.
Evidence
package.jsonREADME.mddist/index.jsetc/mcp-server/bin.jsetc/mcp-server/client.jsetc/mcp-server/device.jsetc/mcp-server/tools.js~/.venos/config.json~/.venos/machine-id~/.venos/service.json~/.venos/heartbeat.last~/.venos/update-check.json~/.claude/settings.json~/.codex/config.toml~/.codex/hooks.json~/.cursor/mcp.json~/.codeium/windsurf/mcp_config.json~/.config/zed/settings.json~/.junie/mcp/mcp.json~/.aider.conf.yml~/.config/systemd/user/venos-heartbeat.timer~/.config/systemd/user/venos-heartbeat.service
Network endpoints10
127.0.0.1:4000/v1localhost:8787/healthz/api/activation/register/v1/hooks/{source}/v1/inventory/heartbeat/v1/inventory/agents/v1/inventory/mcp/v1/inventory/skills/api/dspm/documents/classify

Decision evidence

public snapshot
AI called this Clean at 83.0% confidence as Benign with medium false-positive risk.
Evidence for block
  • dist/index.js wires AI-client configs and hooks on user-run `venos init`.
  • dist/index.js installs a heartbeat service/timer/scheduled task during `venos init`.
  • dist/index.js can upload hook payloads, inventory, usage summaries, and configured document scans to the user-supplied orchestrator.
Evidence against
  • package.json has no install/postinstall/prepare consumer lifecycle; `prepublishOnly` is publisher-side.
  • README.md describes a CLI that wires AI clients to a venos security gateway using explicit `venos init --orchestrator --api-key --org`.
  • dist/index.js command dispatch only performs wiring/reporting through explicit CLI subcommands or configured hooks after init.
  • Network destinations are derived from `--orchestrator`/`~/.venos/config.json`, with localhost defaults for local gateway paths.
  • File scanning skips secret dirs such as `.ssh`, `.gnupg`, `.venos`, `.env*`, and requires configured `dspmScan.dirs`.
  • Child process usage is bounded/product-aligned: service managers, npm updater policy, git email, trivy/skillspector scanners.
Behavioral surface
Source
ChildProcessCryptoEnvironmentVarsFilesystemNetworkShell
Supply chain
HighEntropyStringsUrlStrings
Manifest
NoLicense
scanned 9 file(s), 140 KB of source, external domains: 127.0.0.1, aquasecurity.github.io, www.apple.com

Source & flagged code

4 flagged · loading source
dist/index.jsView file
41sibling: ${n} L42: If you are developing locally, run: pnpm --filter @venos/mcp-server build`)}import{existsSync as eo}from"node:fs";function to(e,t,n){let r=e.configPath(t);if(!e.isInstalled(t))retu... L43: `,"utf8")}function N(e){let t=_e(e);return Dt(t)?(io(t,{force:!0}),!0):!1}function $(e){return Dt(_e(e))}function Jt(e){return ho(e,"Library","LaunchAgents",`${Ae}.plist`)}function...
High
Child Process

Package source references child process execution.

dist/index.jsView on unpkg · L41
89WantedBy=timers.target L90: `}var Xt={platform:"linux",install(e){let t=zt(e.home),n=K(t,re);try{let r=ne(n);return So(t,{recursive:!0}),Gt(K(t,Yt),wo(e.nodePath,e.cliEntry),"utf8"),Gt(n,ko(),"utf8"),e.run("s... L91: venos init ${n?"done":"(no changes)"}`),console.log(` org ID : ${t.orgId}`),console.log(` orchestrator: ${t.orchestratorUrl}`);for(let r of e){let o=Po[r.status],s=Oo[r.stat... ... L95: `,"utf8")}var Fo=5e3,Lo=5e3;async function Do(e){let t=e.replace(/\/$/,""),n=new AbortController,r=setTimeout(()=>n.abort(),Fo);try{return(await fetch(`${t}/healthz`,{signal:n.sign... L96: venos init failed: orchestrator unreachable at ${n}/healthz`),console.error("Check the --orchestrator URL is correct and reachable, then re-run."),process.exit(1));let r=Vo(t,n,e.a... L97: `,"utf8"),n}catch{return""}}function ks(e,t,n){if(t===""&&n==="")return e;let r;try{r=JSON.parse(e)}catch{return e}if(typeof r!="object"||r===null||Array.isArray(r))return e;let o=...
High
Same File Env Network Execution

A single source file combines environment access, network access, and code or shell execution; review context before blocking.

dist/index.jsView on unpkg · L89
89WantedBy=timers.target L90: `}var Xt={platform:"linux",install(e){let t=zt(e.home),n=K(t,re);try{let r=ne(n);return So(t,{recursive:!0}),Gt(K(t,Yt),wo(e.nodePath,e.cliEntry),"utf8"),Gt(n,ko(),"utf8"),e.run("s... L91: venos init ${n?"done":"(no changes)"}`),console.log(` org ID : ${t.orgId}`),console.log(` orchestrator: ${t.orchestratorUrl}`);for(let r of e){let o=Po[r.status],s=Oo[r.stat... ... L94: venos init --remove ${n?"done":"(no changes)"}`);for(let s of e){let i=Eo[s.status],a=Ro[s.status],l=s.path?` ${s.path}`:"",c=s.error?` \u2014 ${s.error}`:"";console.log(` ${i} ... L95: `,"utf8")}var Fo=5e3,Lo=5e3;async function Do(e){let t=e.replace(/\/$/,""),n=new AbortController,r=setTimeout(()=>n.abort(),Fo);try{return(await fetch(`${t}/healthz`,{signal:n.sign... L96: venos init failed: orchestrator unreachable at ${n}/healthz`),console.error("Check the --orchestrator URL is correct and reachable, then re-run."),process.exit(1));let r=Vo(t,n,e.a... L97: `,"utf8"),n}catch{return""}}function ks(e,t,n){if(t===""&&n==="")return e;let r;try{r=JSON.parse(e)}catch{return e}if(typeof r!="object"||r===null||Array.isArray(r))return e;let o=... L98: `),process.exit(1))}function
High
Command Output Exfiltration

Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.

dist/index.jsView on unpkg · L89
2import{readFileSync as Ki}from"node:fs";import{homedir as R}from"node:os";import{existsSync as dn,mkdirSync as To,readFileSync as Ao,rmSync as _o,writeFileSync as Uo}from"node:fs";... L3: `}var W="http://127.0.0.1:4000/v1";var Xe="venos",mr="venos usage-sync --throttle";function z(e){return(e??[]).some(t=>t.hooks.some(n=>typeof n.command=="string"&&n.command.include... L4: `,i===t&&(o+=" ".repeat(s+n+2),o+=`^ ... L33: `:r}function it(e){let t=e.mcp_servers?.venos;if(!t||t.command!=="node")return!1;let n=t.args?.[0];return!n||n.includes("/A2A/")?!1:xe(n)}var at={name:"codex",transport:"mcp-toml",... L34: `)}};import{existsSync as ct,readFileSync as Ar}from"node:fs";import{join as lt}from"node:path";var pt="venos";function be(e){return(e??[]).some(t=>t.hooks.some(n=>typeof n.command... L35: `).some(r=>r.trim()===Et()),raw:t}},isWired(e){return e.wired},inject(e){return e.wired?e:{...e,wired:!0}},remove(e){return{...e,wired:!1}},write(e,t){let n=t.raw===""?[]:t.raw.spl... ... L41: sibling: ${n} L42: If you are developing locally, run: pnpm --filter @venos/mcp-server build`)}import{existsSync as eo}from"node:fs";function to(e,t,n){let r=e.configPath(t);if(!e.isInstalled(t))retu...
Medium
Install Persistence

Source writes installer persistence such as shell profile or service configuration.

dist/index.jsView on unpkg · L2

Findings

4 High3 Medium6 Low
HighChild Processdist/index.js
HighShell
HighSame File Env Network Executiondist/index.js
HighCommand Output Exfiltrationdist/index.js
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistencedist/index.js
LowNon Install Lifecycle Scripts
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings
LowNo License