Back to skill

Security audit

agent-work-receipts

Security checks for vulnerabilities and agentic risk

Overview

This skill is understandable for coding-agent audit workflows, but it needs review because it runs mutable third-party npm tools in a repository and includes an external upload path for generated logs.

Review this skill before installing in sensitive repositories. Prefer pinned or locally locked versions of the npm tools, run them in a least-privilege environment, inspect generated logs for secrets, and treat Vaultline upload as explicit opt-in only after reviewing the exact artifact contents and destination.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:15
Finding

Execution of Unpinned Third-Party npm Packages Through npx

Content
View full analysis
AGENT_BRIEF.md sed -n '1,220p' AGENT_BRIEF.md ``` For branch handoffs: ```bash npx repo-agent-brief . --diff origin/main > AGENT_HANDOFF.md ``` ```bash npx agent-runlog -- npm test npx agent-runlog -- npm run lint npx agent-runlog -- npm run build ``` ```bash npx @builtbyecho/trustlog run -- npm test npx @builtbyecho/trustlog verify .trustlog/latest.json ``` ```bash npx @builtbyecho/add-ci . --tier 2 --dry-run ``` ### Technical Analysis The skill instructs the agent to execute several third-party npm packages using `npx` without specifying exact package versions, integrity hashes, a reviewed lockfile, or package provenance requirements. When a package is not already installed locally, `npx` can retrieve and execute it from the configured npm registry. Because the requested versions are mutable, the code executed during a future invocation may differ from the code that existed when the skill was audited. Package entry points and npm lifecycle behavior execute with the permissions of the invoking agent. The unscoped packages `repo-agent-brief` and `agent-runlog` also provide weaker publisher-identity signaling than scoped packages. This does not establish that the packages are malicious, but it increases dependency-confusion, package-transfer, and package-compromise exposure. ### Attack Path 1. An attacker compromises one of the referenced npm packages, its publisher account, or the package distribution channel. 2. The attacker publishes a malicious version under the package name referenced by the skill. 3. An agent follows the documented workflow and invokes the package using an unversioned `npx` command. 4. `npx` resolves and downloads the current malicious package version. 5. Package code executes in the repository c ...[truncated 860 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:60
Finding

External Upload of Potentially Sensitive Repository Artifacts Without Mandatory Approval

Content
View full analysis
console.log("Vaultline fileId:", r.fileId)); ' ``` ### Technical Analysis The integration reads the complete contents of a generated receipt and transmits them to an external Vaultline service. The listed artifacts can contain repository paths, branch differences, source excerpts, command output, build details, internal project metadata, or secrets accidentally emitted by tests and build tools. Although the skill separately advises inspecting generated artifacts and notes that redaction is not guaranteed, the upload workflow does not enforce secret scanning, content minimization, destination verification, or explicit user authorization for each transmission. The phrase “upload key outputs ... at the end” may cause external upload to be treated as a routine workflow step rather than an exceptional operation requiring informed approval. The example uses `VAULTLINE_API_KEY` for authentication. It does not explicitly include that key in the uploaded content, but the SDK and external service receive the complete selected artifact. ### Attack Path 1. A repository briefing, handoff report, command runlog, or trust receipt captures sen ...[truncated 1264 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (11)

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill instructs users to execute npx repo-agent-brief without pinning an exact package version, which causes code to be fetched and executed from the registry at runtime. If the package is compromised, unpublished/replaced, or a malicious version is published later, the agent may run attacker-controlled code in the local repository context.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

This handoff command again uses unpinned npx repo-agent-brief, creating a supply-chain execution path where the fetched package version can change over time. Because the command analyzes repository contents and diffs, a compromised package could read sensitive code and metadata or modify workspace files.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Running npx agent-runlog -- npm test without version pinning executes whatever package version the registry serves at that moment. Since this wrapper is placed around important developer commands, a malicious or compromised package could intercept command arguments, environment variables, outputs, and repository data.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The unpinned npx agent-runlog invocation for linting has the same remote-code-execution and supply-chain risk as the other wrapper commands. Even for lint tasks, the tool may access repository contents, secrets in environment variables, and command output that could be exfiltrated or altered.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

Using npx agent-runlog -- npm run build without version pinning exposes the build workflow to attacker-controlled package updates. Build steps often run with broad file-system access and sometimes credentials, making compromise of the wrapper potentially impactful.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The skill uses unpinned npx @builtbyecho/trustlog, which dynamically retrieves executable code and runs it against local command output. Because this tool is positioned as a source of audit evidence, compromise could both exfiltrate data and falsify the resulting receipts, undermining integrity and confidentiality.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The verification step also uses unpinned npx @builtbyecho/trustlog, so even the act of verifying receipts depends on mutable remote code. That weakens trust in the verification process itself and creates another path for execution of compromised tooling.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The dry-run CI planning command uses unpinned npx @builtbyecho/add-ci, which still executes remote package code in the repository context even when --dry-run is specified. A malicious package could inspect files, collect metadata, or stage changes despite the workflow framing it as a safe preview.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill first advises keeping .agent-runs/, .trustlog/, and briefing files local unless the user wants them shared, then later recommends uploading key outputs to Vaultline across sessions. That contradiction can confuse operators and normalize sharing artifacts that may contain sensitive data, weakening the earlier safety boundary.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The Vaultline integration introduces an explicit network upload path for locally generated artifacts in a workflow otherwise framed around local auditing and receipts. Those artifacts can contain repository structure, command outputs, test failures, diffs, paths, or other sensitive operational data, so adding an outbound transfer capability materially increases exfiltration risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The example code reads .trustlog/latest.md and uploads its contents using an API key from the environment, but the upload step lacks an immediate explicit warning that local artifact contents are being transmitted to an external service. In practice, operators may copy-paste this block without recognizing the data disclosure and credential-use implications.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.