T09 · Insecure Skill Coding Practices
- Location
src/index.ts:137- Finding
Unredacted High-Risk Tool Inputs and Outputs Are Transmitted Remotely by Default
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is mostly coherent with its stated governance purpose, but it sends sensitive tool inputs and output snippets to a remote service by default and has a policy-enforcement gap that needs review.
Install only if you trust the Kevros gateway with high-risk tool inputs and short output excerpts. Set an explicit API key and pseudonymous agentId, disable autoAttest unless you need remote provenance, avoid putting secrets in governed tool calls, and do not rely on CLAMP constraints until the plugin applies constrained actions or blocks them.
src/index.ts:137Unredacted High-Risk Tool Inputs and Outputs Are Transmitted Remotely by Default
src/index.ts:166CLAMP Decisions Execute the Original Unconstrained Tool Input
src/client.ts:175Unrestricted Gateway URL Can Redirect Sensitive Payloads and API Credentials
src/config.ts:70Implicit Signup Discloses the Machine Hostname as a Persistent Agent Identifier
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
When a high-risk tool is called:
Agent calls bash("rm -rf /tmp/data")
|
v
before_tool_call hook fires
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
When a high-risk tool is called:
Agent calls bash("rm -rf /tmp/data")
|
v
before_tool_call hook fires
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
When a high-risk tool is called:
Agent calls bash("rm -rf /tmp/data")
|
v
before_tool_call hook fires
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
When a high-risk tool is called:
Agent calls bash("rm -rf /tmp/data")
|
v
before_tool_call hook fires
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
When a high-risk tool is called:
Agent calls bash("rm -rf /tmp/data")
|
v
before_tool_call hook fires
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
v
POST /governance/verify
action_type: "tool:bash"
action_payload: { tool: "bash", input: { command: "rm -rf /tmp/data" } }
|
v
Gateway returns: { decision: "ALLOW", release_token: "abc123...", epoch: 42 }
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
**GET /governance/delegations/{agent_id}** — list active delegations for an agent.
**DELETE /governance/delegations/{delegation_id}** — revoke an active delegation.
## Reversibility Check
The README explains that tool calls are sent to a governance gateway for verification and attestation, including action payloads and output summaries, but it does not clearly warn that potentially sensitive commands, inputs, outputs, and agent identifiers may be transmitted to a third-party service. In a security-sensitive agent skill, this omission increases the risk of accidental data exposure and policy bypass through uninformed deployment.
The README states that if no API key is configured, the plugin will automatically call a remote /signup endpoint on first use, but it does not prominently warn users that installing or running the plugin may trigger an outbound network request and remote account provisioning. In an agent/plugin context, silent network enrollment can violate operator expectations, create unreviewed trust relationships, and leak environment-derived metadata such as agent identifiers or host information.
The skill clearly describes network-capable behavior and external API interactions, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates a transparency and least-privilege failure: an agent or operator may enable the skill without understanding that it can transmit tool inputs and output summaries to a third-party service, increasing the risk of unintended data exfiltration.
The skill instructs users to send data to an external service and elsewhere states that tool names, full input payloads, and truncated output summaries are transmitted to the Kevros gateway. Even though the documentation is relatively transparent, this is still a genuine external transmission risk because sensitive prompts, secrets, operational metadata, or tool outputs could be exposed to a third party, especially with automatic signup and pre/post execution hooks.
Get an API key (free, instant, no payment):
curl -X POST https://governance.taskhawktech.com/signup \
-H "Content-Type: application/json" \
-d '{"agent_id": "your-agent-id"}'
The after_tool_call hook sends raw tool inputs and a summarized form of tool outputs to an external governance gateway. Those fields can contain secrets, personal data, prompts, file contents, command arguments, or API responses, and the code performs transmission automatically without any consent gate, minimization, or redaction at the send site. In an agent plugin whose purpose is governance over tool calls, this behavior is contextually expected, but it still creates a real data-exfiltration/privacy risk if high-risk tools process sensitive material.
The manifest states that the plugin can automatically provision a free-tier API key from an external governance gateway if one is not supplied. That creates an implicit outbound enrollment/data-sharing path that is not necessary for local policy enforcement and can surprise operators by causing unauthenticated network registration to a third party. In a security plugin, this is especially risky because users may assume strict local trust controls while the plugin silently establishes remote service dependencies.
Automatic free-tier key provisioning is not clearly required for the plugin's stated governance role and introduces an opaque third-party trust bootstrap. This can cause systems to register with an external service unexpectedly, undermining least surprise and creating unnecessary exposure of host, agent, or usage metadata.
The manifest describes automatic transmission of post-execution tool output to a remote gateway without a strong, prominent warning about data sharing consequences. Since high-risk tools include shell, terminal, and file-editing actions, even truncated output may include credentials, source code, internal paths, or regulated data. In this context, the plugin's security branding makes users more likely to trust it, increasing the risk of unnoticed sensitive-data leakage.
The configuration advertises automatic post-execution attestation that sends truncated tool output to a remote gateway. Tool output can contain secrets, command results, file contents, tokens, or sensitive business data, so transmitting it off-host creates a direct exfiltration channel. Because this is enabled by default in a security/governance plugin, the mismatch between trust-signaling language and data export makes the issue more dangerous.
The verify method sends action_type, action_payload, agent_id, and optional policy_context to a remote gateway, which can include user or system data. Although the file comments describe the client as shuttling JSON, there is no user-facing confirmation, logging, or explicit warning in the method about transmitting this data off-host.
The attest method posts action_description, action_payload, agent_id, and optional context to the gateway, which may contain sensitive operational or user data. The comments explain the technical purpose, but there is no visible prompt, log, or explicit warning to the user that these details are transmitted externally.
The signup method performs a network call to obtain an API key and stores it internally, and ensureApiKey triggers this automatically when no key is configured. This is a credential-related operation, but the code provides no user-facing notice, confirmation, or logging that auto-provisioning will occur.
The plugin sends high-risk tool names and full tool inputs to an external governance gateway during verification, with no user-facing notice or consent mechanism at the point of disclosure. In agent contexts, tool inputs may contain secrets, personal data, prompts, or sensitive business content, so this creates a real confidentiality and privacy risk even if the transfer is intentional product behavior.
The after-tool hook transmits an output summary, original tool input, and governance metadata to the remote attestation service automatically when autoAttest is enabled, without explicit disclosure to the user. Tool results frequently contain sensitive outputs such as command results, document excerpts, API responses, or secrets, so exporting even truncated summaries can leak confidential information to a third party.
This is a manifest file, so vague-trigger review applies. The description markets broad 'policy enforcement for agent tool calls' behavior but does not define when the skill should be invoked, what commands or contexts activate it, or any exclusion conditions, which can lead to unintended invocation in generic security/governance contexts.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@types/node": "^20.19.37",
"typescript": "^5.4.0"
},
"engines": {
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/node": "^20.19.37",
"typescript": "^5.4.0"
},
"engines": {
"node": ">=18.0.0"
No suspicious patterns detected.