Back to skill

Security audit

Ach Publish

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real multi-agent communication hub, but it needs Review because some member-level tools are under-scoped and optional autonomous executors can send task content to external LLM or HTTP endpoints.

Install only in a trusted local agent group. Before enabling autonomous execution, decide whether task descriptions, context, and results may be sent to HOST_EXEC_ENDPOINT or third-party LLM providers. Lock down HUB_AUTH_TOKEN/admin access, narrow activation triggers, and consider fixing member-level authorization listing and pipeline/dependency ownership checks before production use.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (40)

Lp3

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding
The skill describes capabilities that can access environment variables, network services, and shell/host execution paths, but it does not declare permissions explicitly. In an agent ecosystem, this weakens consent and policy enforcement because the host may activate a high-capability skill without clearly surfacing its privilege requirements.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
This code sends delegated task context and descriptions to third-party LLM endpoints by default, which can expose sensitive agent data outside the claimed local communication boundary. In a multi-agent hub, tasks may contain secrets, internal prompts, user data, or operational context, so outbound transmission materially expands the trust boundary and data leakage risk.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The HTTP host executor forwards the full task object to an arbitrary configured endpoint, with no built-in restriction that it be local or trusted. Because task objects can include context, identifiers, priority, and possibly sensitive embedded content, a misconfigured or malicious endpoint can receive complete delegated work payloads and exfiltrate internal data.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Multiple orchestration endpoints expose cross-agent task and pipeline metadata or state-changing operations without visible object-level ownership enforcement in this wrapper. Unlike assign_task/get_task_status/update_task_status, tools such as get_task_dependencies, get_pipeline, list_pipelines, add_dependency, create_parallel_group, add_quality_gate, evaluate_quality_gate, pause_pipeline, and resume_pipeline do not call assertOwns or equivalent checks here, so any authenticated member may be able to inspect or manipulate other agents’ workflows if the imported backend functions do not strictly enforce authorization.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The list_authorization_requests tool is available to any authenticated member and returns the full set of authorization requests filtered only by status. In a multi-agent communication hub, these requests can reveal sensitive operation descriptions, payloads, task IDs, and approval history for other agents, creating an information disclosure and cross-tenant visibility issue.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The trigger 'ACH' is overly broad and can match unrelated user conversations, causing accidental activation of a powerful skill that exposes messaging, task orchestration, memory, and host-connected operations. Because this skill can interact with local services and potentially host executors, unintended invocation raises the risk of unauthorized actions or data exposure.

Vague Triggers

Medium
Confidence
80% confidence
Finding
The trigger 'workbuddy' is ambiguous and may collide with normal conversation or other products. In a skill that can send messages, assign tasks, access shared memory, and interact with networked/local infrastructure, accidental routing into this skill can expose internal state or initiate operations the user did not intend.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger 'send_message' is extremely generic and overlaps with ordinary coding discussions and user requests. Given that this skill provides real message delivery between agents and supports persistent storage and realtime forwarding, accidental activation could cause unintended communications, data leakage, or side effects without meaningful user intent.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger 'assign_task' is also a generic phrase likely to appear in normal conversation about planning or coding. Because the skill can create and route real tasks across agents and maintain shared context, unintended activation could cause unauthorized task creation, disclosure of context, or orchestration changes in a multi-agent environment.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
Task data is transmitted to external LLM services in this path without any visible user-facing disclosure or consent mechanism in the code shown. Even if outbound use is intended, lack of transparency can cause accidental privacy, compliance, and data handling violations when operators assume the hub remains local.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The executor posts the full task object to a configured HTTP endpoint with no visible disclosure in this file that data leaves the local hub. This creates a transparency and governance gap that can lead to unintended sharing of sensitive multi-agent task data with external services or infrastructure.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The file explicitly documents that Hermes will automatically receive tasks and execute them without human intervention, which creates a high-risk autonomous action pathway. In this skill's context—a local multi-agent communication hub with task orchestration and shared memory—automatic execution materially increases the chance of unsafe or unauthorized actions if tasks originate from untrusted peers or are manipulated in transit.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The integration automatically connects to an SSE endpoint, reports progress/results, and auto-reconnects, but the declaration does not clearly disclose what data is transmitted or under what trust model. In a communications hub handling messages, tasks, and shared memory, silent network transmission can expose sensitive task contents, execution metadata, or results to unintended services or operators.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The documentation explicitly recommends automatic task execution via an external HTTP endpoint or direct LLM calls and references use of `HOST_LLM_API_KEY`, but it does not clearly warn that task descriptions, context, and possibly sensitive memory may be transmitted off-box to third-party services. In this skill's context, the hub is designed for autonomous multi-agent orchestration, which increases the chance that sensitive or user-derived data will be forwarded externally without informed consent or adequate review.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The document describes an automatic DB merge process that modifies SQLite-backed state and recreates links without any operator confirmation, backup requirement, or warning about possible corruption, stale data selection, or irreversible changes. In a multi-agent communication hub, silently merging authentication tokens, messages, and agent records can cause integrity loss or unintended privilege/state carryover if the merge heuristic is wrong.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The fault-recovery section emphasizes fully automatic recovery with '无需人工介入' while omitting any caution that the recovery path includes automatic merge, deduplication, and file replacement behavior. That creates operational risk because users may enable the watchdog/restart stack without realizing it can alter persistent state and make post-incident forensics or rollback difficult.

Missing User Warnings

Medium
Confidence
82% confidence
Finding
The offline broadcast sends agent identity, status timing, and liveness metadata to all online agents without any visible authorization or need-to-know filtering. In a multi-agent communication hub, this can leak presence information and internal topology to low-privilege or unrelated agents, enabling surveillance, targeting, and follow-on attacks against specific agents or workflows.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The metrics endpoint exports per-agent trust scores labeled by agent_id, which can disclose sensitive internal reputation or authorization-related data to anyone who can scrape Prometheus metrics. In this skill's context, a multi-agent communication hub with shared memory and orchestration, exposing agent-level trust data increases reconnaissance value and may help attackers target lower-trust or privileged agents, or infer internal policy decisions.

External Transmission

Medium
Category
Data Exfiltration
Content
opts.baseUrl ??
                process.env.HOST_LLM_BASE_URL ??
                (this.provider === "anthropic"
                    ? "https://api.anthropic.com/v1/messages"
                    : "https://api.openai.com/v1/chat/completions");
        this.apiKey = opts.apiKey ?? process.env.HOST_LLM_API_KEY ?? "";
        this.model =
Confidence
93% confidence
Finding
The hardcoded Anthropic API URL evidences built-in external network transmission capability, which is security-relevant in a skill described as a local communication hub. In this context, the risk is not the URL itself but that sensitive delegated task content may be sent to an external provider by default.

External Transmission

Medium
Category
Data Exfiltration
Content
process.env.HOST_LLM_BASE_URL ??
                (this.provider === "anthropic"
                    ? "https://api.anthropic.com/v1/messages"
                    : "https://api.openai.com/v1/chat/completions");
        this.apiKey = opts.apiKey ?? process.env.HOST_LLM_API_KEY ?? "";
        this.model =
            opts.model ??
Confidence
93% confidence
Finding
The hardcoded OpenAI API URL similarly indicates external egress support that can send task content beyond the local environment. Given the skill's local-hub framing and multi-agent task handling, this can expose confidential prompts, context, or user data to third-party infrastructure.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
if (!reqId) {
            throw new Error("request_authorization 未返回 request_id,无法挂起等待");
        }
        // 若 Hub 直接通过信任窗口自动批准(AUTH_AUTO_APPROVE),立即 resolve
        if (res?.status === "approved") {
            this.completeAuth(reqId, "approved");
            return;
Confidence
77% confidence
Finding
The client treats a `request_authorization` response with `status === "approved"` as sufficient to immediately proceed, including when approval is described as automatic via a trust window (`AUTH_AUTO_APPROVE`). In an agentic system handling sensitive operations, automatic approval paths can weaken human-in-the-loop guarantees and allow high-risk actions to execute without explicit contemporaneous review if backend policy is too permissive or misconfigured.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
expires_at: number;
}
declare const AUTH_REQUEST_TTL_MS: number;
declare const AUTH_AUTO_APPROVE: boolean;
declare class AuthorizationService {
    /** 请求敏感操作的授权,返回新建的 pending 请求(含 request_id) */
    createRequest(agentId: string, op: CreateAuthOp): AuthRequestRow;
Confidence
89% confidence
Finding
The exported AUTH_AUTO_APPROVE boolean indicates the authorization system may automatically approve sensitive operations such as delete_data, revoke_token, cross_agent_delete, external_api, and paid_api. In a multi-agent communication/orchestration hub, auto-approval can collapse the human-in-the-loop control boundary and allow destructive or externally impactful actions without meaningful review if enabled or misconfigured.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
private getById;
}
export declare const authorizationService: AuthorizationService;
export { AUTH_REQUEST_TTL_MS, AUTH_AUTO_APPROVE };
Confidence
86% confidence
Finding
Re-exporting AUTH_AUTO_APPROVE makes the auto-approval control broadly visible and likely configurable/consumable across the wider codebase, increasing the chance that insecure behavior is relied upon or exposed through other components. Given this skill is an agent hub with task orchestration, shared memory, and 58 tools, weakened approval gates can enable autonomous execution of sensitive actions at scale across agents.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
},
        });
        // 可选快路径:开启自动批准且存在有效信任窗口 → 直接 approved
        if (AUTH_AUTO_APPROVE && this.hasValidGrant(agentId, op.type)) {
            return this.resolve(id, "approved", "system", "auto-approve via valid grant");
        }
        return this.getById(id);
Confidence
92% confidence
Finding
When `AUTH_AUTO_APPROVE` is enabled, any request matching an existing category-level grant is automatically approved by the system without fresh human review. In a multi-agent communication/orchestration hub that exposes sensitive operations like `delete_data`, `revoke_token`, `external_api`, and `schema_change`, this creates a privilege-reuse path where a previously granted trust window can be abused for unintended or chained actions, reducing human-in-the-loop protections.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
});
        // 可选快路径:开启自动批准且存在有效信任窗口 → 直接 approved
        if (AUTH_AUTO_APPROVE && this.hasValidGrant(agentId, op.type)) {
            return this.resolve(id, "approved", "system", "auto-approve via valid grant");
        }
        return this.getById(id);
    }
Confidence
93% confidence
Finding
The explicit `auto-approve via valid grant` path resolves pending authorization requests as approved by `system`, which can mask accountability and permit autonomous execution of sensitive actions during the grant lifetime. In this hub context, where agents can coordinate tasks and access shared memory/tooling, a compromised or overly-permissive agent could leverage a broad grant to perform harmful operations repeatedly without real-time human oversight.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
dist/client-sdk/adapters/host-executor.js:10