Back to skill

Security audit

Agent Weave

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a real local JavaScript agent-orchestration package, but it has security and install-supply-chain concerns users should review before installing.

Install only if you are comfortable with a local JavaScript package that creates log/report files, starts monitoring timers, and should not be relied on for strong inter-agent message confidentiality or authentication without code changes. Regenerate the lockfile against an HTTPS registry before installation or CI use.

Vulnerability Patterns
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • 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)

T07 · Tool Hijacking and Spoofing

Error
Location
lib/thread.js:100
Finding

Cross-Agent Message Disclosure and Sender Spoofing

Content
View full analysis
{ if (msg.to === agentId || this.matchesFilter(msg, filter)) { handler(msg, permission); } }; this.on('message:send', listener); // 返回取消订阅函数 return () => { this.subscriptions.delete(subscription.id); this.off('message:send', listener); }; } ``` ### Technical Analysis The communication boundary uses agent IDs as both identifiers and authorization credentials, but it does not establish that the caller owns the identity it supplies. The `send()` method authorizes communication using the caller-controlled `message.from` and `message.to` fields. Although `Knot.canCommunicate()` checks whether those registered identities are permitted to communicate, it does not authenticate the component invoking `send()`. Code with access to the shared `Thread` instance can therefore place another registered agent's ID in `message.from` and impersonate that agent. The `subscribe()` method similarly accepts an arbitrary `agentId` without verifying that the subscriber owns or represents that agent. More importantly ...[truncated 2320 chars]
Remediation
View remediation
{ if (msg.to === agentId && this.matchesFilter(msg, filter)) { handler(msg, permission); } }; ``` 5. Define empty-filter behavior explicitly. If an empty filter should accept all messages addressed to the authenticated recipient, use: ```javascript const filterMatches = !filter || this.matchesFilter(msg, filter); if (msg.to === agentId && filterMatches) { handler(msg, permission); } ``` 6. Avoid a globally observable EventEmitter channel for confidential traffic. Use per-agent queues or private channels keyed to authenticated agent contexts. 7. Authenticate RPC responses by validating the responder, intended recipient, correlation ID, and expected communication relationship—not only the correlation ID. 8. Add security tests proving that: - A subscriber cannot receive messages addressed to another agent. - A broad filter cannot bypass recipient restrictions. - An unregistered caller cannot subscribe. - A caller cannot forge another agent's `from` identity. - RPC responses from unexpected agents are rejected. ]]>

T08 · Insecure Dependencies

Warning
Location
package-lock.json:22
Finding

Dependency Tarballs Retrieved over Plaintext HTTP from a Third-Party Mirror

Content
View full analysis
=8" } } ``` Other locked dependencies, including `ansi-styles`, `base64-js`, `bl`, `buffer`, `chalk`, `commander`, and `ora`, use the same plaintext HTTP mirror pattern. ### Technical Analysis The lockfile resolves dependency tarballs from `http://mirrors.tencentyun.com/` rather than an HTTPS registry. Plaintext HTTP does not authenticate the package server and does not provide transport confidentiality or integrity. The recorded SHA-512 integrity values provide an important secondary control: a conforming npm client should reject a modified tarball whose contents do not match the lockfile. Consequently, a network attacker cannot ordinarily substitute arbitrary package content without causing an integrity failure. However, plaintext transport still permits traffic observation, blocking, redirection, replay attempts, and denial of service. It also creates unsafe registry provenance and makes security dependent on correct and consistently enforced integrity verification. The risk becomes substantially greater if the lockfile is regenerated, an installation tool does not enforce integrity metadata, the integrity field is removed or modified, or the third-party mirror and project metadata are compromised together. ### Attack Path 1. A user installs the package or restores its dependencies using the committed lockfile. 2. The package manager requests dependency tarballs over plaint ...[truncated 1637 chars]
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
82% confidence
Finding

The code does involve parallel/master-worker style execution via Loom and orchestrates multiple agents concurrently, so it partially aligns with the declared purpose. However, the supplied chunk is primarily an interactive demonstration and test harness for sub-agent management rather than the core implementation of a reusable master-worker cluster skill. It creates specific demo agents, runs synthetic tests, displays monitoring output, logs extensively, and saves a report file (./test-report-final.json), indicating filesystem usage not reflected in declared permissions. These extra behaviors are material enough to make the description incomplete/inaccurate for this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The description suggests a distributed master-worker cluster for parallel execution and task orchestration. The code instead provides a local agent manager with status tracking, event handling, heartbeats, console UI, and filesystem logging/state saving. The biggest functional mismatch is that SubAgent.start accepts a task function, but executeTask does not use it and only simulates progress before returning a fixed result. There is no real distributed execution, worker communication across nodes, scheduling, task partitioning, or MapReduce behavior. Additionally, the code performs undeclared filesystem access for logs and state persistence. While lifecycle management and orchestration concepts are related, the implemented primary purpose is closer to local agent monitoring/management than a true master-worker parallel processing cluster.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file presents all user-facing architectural guidance in Chinese, and there is no indication that the skill is region-specific or that users can opt into another language. Under the policy, forcing a specific language without user choice can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

该 markdown 文档全文以中文撰写,面向通用安装、发布和使用说明,但没有说明这是面向特定中文用户群体的区域性文档,也没有提供其他语言选项。根据语言/locale 政策,面向广泛用户的技能说明若隐含强制单一语言且无用户选择,属于自然语言层面的策略问题。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file's comments and all user-visible console output are written exclusively in Chinese, indicating the skill is effectively constrained to a specific language. There is no indication that the user can select a preferred language or that the locale restriction is documented as intentional for a region-specific use case.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code contains natural-language strings and comments that indicate the skill is designed to operate in Chinese only, and later console output is also entirely Chinese. Under the language/locale policy rule, forcing a specific language without offering user choice or documenting a justified locale restriction is a policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest describes a 'Master-Worker Agent Cluster for parallel task execution' suitable for distributed agent systems and MapReduce-style workflows. In this file, SubAgent.start/executeTask only simulates work locally with timers and fixed return data, with no actual worker dispatch, distributed coordination, or execution of supplied tasks, so the behavior falls materially short of the claimed cluster/orchestration capability.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The method comment at L76-L78 says this function 'executes the task', and start() passes in taskFn at L52 and awaits executeTask(taskFn) at L62. However, executeTask never calls taskFn and instead only simulates progress with delays before returning a fixed success object, which directly contradicts the documented and implied behavior of running a supplied task.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The console UI shown to users is entirely hard-coded in Chinese, including headings, labels, and exit instructions. Because the file does not offer language selection or opt-in, it enforces a specific language on all users and violates the stated language/locale policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The markdown embeds runtime output in Chinese ("创建 3 个 Worker", "已创建 3 个 Worker", "分发 3 个任务到 3 个 Worker") while the rest of the document is in English. This suggests the skill may present a fixed non-user-selected language, and the file does not indicate any user opt-in or justified locale restriction.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The top-level documentation explicitly states '创建无时长限制的子Agent' (create child agents with no duration limit). In the code, agents are created with manager.createAgent calls and no logic here enforces, configures, or validates unlimited runtime; the demo instead runs bounded tasks with fixed waits and loop counts.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The skill manifest describes a master-worker agent cluster for parallel task execution, orchestration, and MapReduce-style workflows. Writing a final report file to disk is not an obvious requirement of that purpose and adds a separate persistence capability beyond orchestration itself.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The code performs a filesystem write to ./test-report-final.json using fs.writeFileSync. Although it logs after the write succeeds, there is no prior warning, confirmation, or explanatory comment/docstring disclosing that the skill will create an output file, which is the kind of file-modifying behavior this rule covers.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The comment says the demo shows '异步获取子Agent结果' (asynchronously obtaining sub-agent results), but the implementation aggregates completion by waiting until all three agents finish via Promise.all before producing the detailed results summary. While completion events are observed, results are not actually retrieved and processed asynchronously per agent as the comment suggests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

Configuring on-disk logging without clear disclosure creates silent data persistence, which may capture task details, errors, or other operational metadata users did not expect to be stored. In a multi-agent system, logs can accumulate sensitive content from prompts, results, or internal state, making undisclosed logging a legitimate security/privacy concern.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The manifest describes a master-worker agent cluster for parallel task execution and orchestration, but this example also persists a JSON report to local disk. Local report generation is not mentioned in the skill description and goes beyond pure orchestration behavior, even though it appears to be ancillary demo functionality.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code writes an output file to disk without prior disclosure or confirmation, which can violate least surprise and create unintended persistence in environments where filesystem side effects matter. In an agent skill context, silent writes are more concerning because they may leave artifacts, overwrite expected workspace state, or persist potentially sensitive execution summaries.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file includes a natural-language description in Chinese ('简化的 weave CLI - 绕过 ESM 兼容问题') without any indication that language selection is configurable or optional. The policy for this category flags language/locale constraints when a skill forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file's natural-language comments, usage text, and console output are written in Chinese, with no indication that users can choose another language or that the skill is intentionally region-specific. This can violate a language/locale policy when a skill imposes a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JavaScript file uses Chinese-only natural-language text in comments and user-visible console messages such as agent descriptions and runtime status logs. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation because the skill does not offer any alternate language or configuration.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This file consistently uses Chinese in natural-language comments and user-visible console messages such as creation, dispatch, completion, and error logs. Because the skill does not offer a language choice or document that it is intentionally region-specific, it may violate a language/locale policy requiring user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JavaScript file contains natural-language comments and a console log message in Chinese, including the retry notice at L175. The policy requires flagging language/locale constraints when a skill forces a specific language without user choice or clear justification, and no opt-in or locale rationale is present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code contains natural-language comments and API descriptions exclusively in Chinese, such as the class and method docstrings on L005, L036, L083, and L100. Under the language/locale policy, forcing a specific language without offering a choice or documenting a justified locale constraint is a policy concern.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 19)May include surrounding context.

json
"author": "openclaw-user",
  "license": "MIT",
  "dependencies": {
    "commander": "^11.0.0",
    "chalk": "^4.1.2",
    "ora": "^5.4.1"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 20)May include surrounding context.

json
"license": "MIT",
  "dependencies": {
    "commander": "^11.0.0",
    "chalk": "^4.1.2",
    "ora": "^5.4.1"
  },
  "engines": {

Static analysis

No suspicious patterns detected.