AI Security Review
scanned 2h ago · by lpm-firewall-aiLPM blocks this version under the AI-agent control-surface policy. Installing the package invokes its CLI automatically. The CLI writes a default config and replaces package-named skill directories in two foreign AI-agent skill roots.
Static reason
High-risk behavior combination matched malicious policy.
Trigger
npm postinstall
Impact
Package installation mutates broad user-level AI-agent control surfaces without an explicit user command.
Mechanism
lifecycle-driven AI-agent skill replacement
Policy narrative
During npm postinstall, the package executes `install`. It creates `~/.sdlc/config.yaml` if absent and removes then copies its bundled skills into both `~/.claude/skills` and `~/.agents/skills`. This is an unconsented install-time mutation of foreign, user-level AI-agent instruction/control directories; no exfiltration or remote payload chain was confirmed.
Rationale
The source confirms the scanner’s central finding: an automatic npm lifecycle hook modifies broad AI-agent skill roots. Transparency in the README and absence of exfiltration reduce ambiguity but do not remove the prohibited control-surface mutation.
Evidence
package.jsondist/cli.jsREADME.mdskills/using-sdlc-cli/SKILL.mdskills/configuring-sdlc/SKILL.mdskills/using-sdlc-cliskills/configuring-sdlc~/.sdlc/config.yaml~/.claude/skills/using-sdlc-cli~/.claude/skills/configuring-sdlc~/.agents/skills/using-sdlc-cli~/.agents/skills/configuring-sdlc
Decision evidence
public snapshotAI called this Malicious at 94.0% confidence as Malware with low false-positive risk.
Evidence for policy block
- `package.json` runs `node ./dist/cli.js install` at `postinstall`.
- `dist/cli.js` copies bundled `skills/` into `~/.claude/skills` and `~/.agents/skills`.
- The install path removes each existing same-named target skill before replacing it.
Evidence against
- `dist/cli.js` skips its global npm self-install when invoked by `postinstall`.
- No HTTP URL literals, fetch APIs, credential harvesting, eval, or dynamic loading were found.
- `README.md` openly documents the lifecycle writes and skill targets.
Behavioral surface
ChildProcessEnvironmentVarsFilesystemNetworkShell
NoLicense
Source & flagged code
3 flagged · loading sourcepackage.jsonView file
•scripts.postinstall = node ./dist/cli.js install || true
High
Install Time Lifecycle Scripts
Package defines install-time lifecycle scripts.
package.jsonView on unpkg•scripts.postinstall = node ./dist/cli.js install || true
Medium
Ambiguous Install Lifecycle Script
Install-time lifecycle script is not statically allowlisted and needs review.
package.jsonView on unpkgdist/cli.jsView file
1Install-time AI-agent control hijack evidence:
L67: import {
L68: cpSync,
L69: existsSync,
L70: mkdirSync,
L71: readdirSync,
...
L73: rmSync,
L74: writeFileSync
L75: } from "fs";
...
L80: function mkdirp(path) {
L81: mkdirSync(path, { recursive: true });
L82: }
...
L87: function copyDir(src, dest) {
Payload evidence from skills/configuring-sdlc/SKILL.md:
L1: ---
L2: name: configuring-sdlc
Critical
Ai Agent Control Hijack
Install-time source drops package-supplied AI-agent/MCP control files or instructions.
dist/cli.jsView on unpkg · L1Findings
1 Critical1 High4 Medium3 Low
CriticalAi Agent Control Hijackdist/cli.js
HighInstall Time Lifecycle Scriptspackage.json
MediumAmbiguous Install Lifecycle Scriptpackage.json
MediumNetwork
MediumEnvironment Vars
MediumStructural Risk Force Deep Review
LowScripts Present
LowFilesystem
LowNo License