other
- Location
SKILL.md:57- Finding
Automatic Cloud Account Creation Contradicts the Declared Opt-In Network Model
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent memory and credential-management purpose, but it asks for high-impact credential and persistence access while documenting misleading credential isolation and unexpected cloud account behavior.
Install only if you are comfortable giving Harbor persistent memory access and credential-broker authority. Prefer pinned audited versions, avoid `harbor auth get` in agent/tool code, use low-scope dedicated API tokens, review what gets remembered before enabling sync, and expect the recommended plugin to create a cloud account on first load.
SKILL.md:57Automatic Cloud Account Creation Contradicts the Declared Opt-In Network Model
SKILL.md:122Authenticated HTTP Proxy Does Not Document Destination Binding for Stored Credentials
SKILL.md:205Raw Credential Retrieval Through Standard Output Breaks Credential Isolation
SKILL.md:19Executable Dependencies Are Installed From Mutable Unpinned Sources
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.
harbor get <connector.resource> --param key=value # Connector fetch
harbor remember <topic> "Your analysis summary" # Save context
harbor remember --connector <name> <topic> "summary" # Scoped to connector
harbor forget mem_xxx # Delete memory
harbor recall --search "keyword" # Search memory
harbor auth <name> # Store credential
harbor auth get <name> # Retrieve credential (stdout)
The skill repeatedly claims that skills or tool code never see raw API keys, but later documents harbor auth get, which returns credentials to stdout and into the calling process. That inconsistency can mislead users and developers into adopting weaker patterns under the impression they still have strong credential isolation.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
harbor fetch https://api.github.com/repos/oSEAItic/harbor --auth github-pat
Or via MCP tool:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
harbor fetch https://api.github.com/repos/oSEAItic/harbor --auth github-pat
Or via MCP tool:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
harbor fetch https://api.github.com/repos/oSEAItic/harbor --auth github-pat
Or via MCP tool:
The skill encourages persistent storage of agent-generated summaries and auto-injection of prior context across sessions, with optional cloud sync of memories and schemas. In practice, users and agents often summarize sensitive prompts, investigation details, credentials-adjacent data, or proprietary content into natural language, so this creates a real cross-session data leakage and unintended retention risk.
Syncing workspace/session context on start and capturing context before compaction normalizes broad collection of conversational state that may contain secrets, regulated data, or confidential analysis. Even if framed as convenience, the plugin context makes this more dangerous because agents routinely process mixed-sensitivity information and users may not realize it is being persisted or prepared for sync.
This section states that tool code never touches raw API keys, then immediately introduces a mode where tools call harbor auth get and receive the raw key. In an agent skill ecosystem, that defeats the advertised isolation boundary and may cause operators to install the skill with incorrect trust assumptions.
Examples labeled as credential-isolated fetch secrets into the Node.js process via execSync("harbor auth get ..."). Once the secret is in-process, any compromised dependency, logging, exception trace, subprocess, or malicious skill code can exfiltrate it, so the example undermines the claimed security model.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async execute({ query }: { query: string }) {
const { execSync } = require("node:child_process");
const key = execSync("harbor auth get tavily", { encoding: "utf-8" });
const res = await fetch("https://api.tavily.com/search", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ api_key: key, query, max_results: 5 }),
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async execute({ query }: { query: string }) {
const { execSync } = require("node:child_process");
const key = execSync("harbor auth get tavily", { encoding: "utf-8" });
const res = await fetch("https://api.tavily.com/search", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ api_key: key, query, max_results: 5 }),
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async execute() {
const { execSync } = require("node:child_process");
const key = execSync("harbor auth get stripe", { encoding: "utf-8" });
const res = await fetch("https://api.stripe.com/v1/balance", {
headers: { Authorization: `Bearer ${key}` },
});
return res.json();
The markdown explicitly says to always pass "OpenClaw Agent" as the author, which imposes a fixed natural-language value rather than offering user choice. This is a locale/language-style policy concern because it hardcodes one labeling convention without opt-in or justification.