registry  /  @override-dev/cli  /  0.1.0-alpha.6

@override-dev/cli@0.1.0-alpha.6

Override — the dev control plane: environments, repos, services, tasks

AI Security Review

scanned 5h ago · by lpm-firewall-ai

No confirmed malicious attack surface. The package is a developer control-plane CLI with user-invoked repo, shell, Supabase, and workspace operations; install-time behavior is limited to repairing node-pty helper permissions.

Static reason
One or more suspicious static signals were detected.; previous stored version diff introduced dangerous source
Trigger
npm install runs postinstall; CLI behavior requires explicit ovr commands
Impact
No source-confirmed unauthorized credential access, exfiltration, persistence, or AI-agent hijack
Mechanism
package-aligned CLI automation and node-pty chmod repair
Rationale
Source inspection shows suspicious primitives are either install-time chmod repair for node-pty or explicit user-invoked developer CLI features. There is no concrete malicious chain or unconsented broad/foreign AI-agent control-surface mutation.
Evidence
package.jsonscripts/postinstall.mjsdist/cli/index.jsdist/index-bj59btcy.jsdist/index-gxamezdw.jsdist/plugins/supabase.js
Network endpoints3
localhost127.0.0.1github.com

Decision evidence

public snapshot
AI called this Clean at 90.0% confidence as Benign with low false-positive risk.
Evidence for block
    Evidence against
    • package.json postinstall only runs scripts/postinstall.mjs; prepare is build-only and not shipped as install attack logic.
    • scripts/postinstall.mjs only chmods node-pty prebuilds/*/spawn-helper under reachable node_modules layouts.
    • dist/cli/index.js shell rc and Claude config setup are interactive bootstrap prompts, not unconsented install-time mutation.
    • dist/cli/index.js dynamic import loads local ovr.config.* from user workspaces for the CLI's declared config system.
    • Network use is user-directed: fetch of import/pull source URLs, git remotes, localhost readiness checks, Supabase/Docker tooling.
    • No credential harvesting, exfiltration endpoint, remote payload execution, stealth persistence, or destructive install behavior found.
    Behavioral surface
    Source
    ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNetworkShell
    Supply chain
    HighEntropyStringsUrlStrings
    Manifest
    NoLicense
    scanned 12 file(s), 260 KB of source, external domains: 127.0.0.1

    Source & flagged code

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

    Package defines install-time lifecycle scripts.

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

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

    package.jsonView on unpkg
    dist/cli/index.jsView file
    matchType = previous_version_dangerous_delta matchedPackage = @override-dev/cli@0.1.0-alpha.1 matchedIdentity = npm:QG92ZXJyaWRlLWRldi9jbGk:0.1.0-alpha.1 similarity = 0.500 summary = stored previous version shares package body but lacks this dangerous source file
    High
    Previous Version Dangerous Delta

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

    dist/cli/index.jsView on unpkg
    284return null; L285: const mod = await import(pathToFileURL(file).href); L286: const config = mod.default ?? mod;
    Medium
    Dynamic Require

    Package source references dynamic require/import behavior.

    dist/cli/index.jsView on unpkg · L284
    37import * as clack2 from "@clack/prompts"; L38: import { execFileSync as execFileSync3 } from "node:child_process"; L39: import { appendFileSync, existsSync as existsSync5, mkdirSync as mkdirSync7, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs"; ... L43: // src/util/color.ts L44: var useColor = process.stdout.isTTY && !process.env.NO_COLOR; L45: var paint = (code, s) => useColor ? `\x1B[${code}m${s}\x1B[0m` : s; ... L55: import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; L56: import { createServer } from "node:net"; L57: import { dirname, join } from "node:path"; ... L62: try { L63: return JSON.parse(readFileSync(file, "utf8")); L64: } catch {
    Medium
    Install Persistence

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

    dist/cli/index.jsView on unpkg · L37
    37import * as clack2 from "@clack/prompts"; L38: import { execFileSync as execFileSync3 } from "node:child_process"; L39: import { appendFileSync, existsSync as existsSync5, mkdirSync as mkdirSync7, readFileSync as readFileSync5, writeFileSync as writeFileSync6 } from "node:fs"; ... L43: // src/util/color.ts L44: var useColor = process.stdout.isTTY && !process.env.NO_COLOR; L45: var paint = (code, s) => useColor ? `\x1B[${code}m${s}\x1B[0m` : s; ... L55: import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; L56: import { createServer } from "node:net"; L57: import { dirname, join } from "node:path"; ... L62: try { L63: return JSON.parse(readFileSync(file, "utf8")); L64: } catch {
    Low
    Weak Crypto

    Package source references weak cryptographic algorithms.

    dist/cli/index.jsView on unpkg · L37

    Findings

    2 High6 Medium7 Low
    HighInstall Time Lifecycle Scriptspackage.json
    HighPrevious Version Dangerous Deltadist/cli/index.js
    MediumAmbiguous Install Lifecycle Scriptpackage.json
    MediumDynamic Requiredist/cli/index.js
    MediumNetwork
    MediumEnvironment Vars
    MediumInstall Persistencedist/cli/index.js
    MediumStructural Risk Force Deep Review
    LowNon Install Lifecycle Scripts
    LowScripts Present
    LowWeak Cryptodist/cli/index.js
    LowFilesystem
    LowHigh Entropy Strings
    LowUrl Strings
    LowNo License