T09 · Insecure Skill Coding Practices
- Location
scripts/lib/mycelium_sdk/client.py:108- Finding
Published Payload Contains Fields That Bypass Sensitive-Data Scrubbing
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent remote collaboration client, but it should be reviewed because it can send agent task data and API credentials to an externally configurable service while overstating its privacy protections.
Install only if you are comfortable with task goals, execution summaries, feedback, and your Mycelium API key being used with a remote service. Avoid using this on secrets, regulated data, private customer data, or proprietary workflows; do not set MYCELIUM_API_URL unless you fully trust the endpoint; and prefer installing in an isolated Python environment.
scripts/lib/mycelium_sdk/client.py:108Published Payload Contains Fields That Bypass Sensitive-Data Scrubbing
scripts/lib/mycelium_sdk/client.py:60API Credentials Can Be Transmitted to an Untrusted or Plaintext Custom Endpoint
scripts/install.py:4Installer Retrieves an Unpinned Dependency Without Integrity Verification
The CLI takes MYCELIUM_API_URL directly from the environment and uses it to construct an outbound HTTP request without any validation or allowlisting. In an agent or automation context, a manipulated environment variable can redirect registration traffic to an attacker-controlled host, causing exfiltration of user-supplied data and enabling SSRF-style outbound connections from trusted environments.
api_url = os.getenv("MYCELIUM_API_URL", "https://mycelium-platform.onrender.com").rstrip("/")
if args.command == "register":
resp = httpx.post(f"{api_url}/users/register", json={"handle": args.handle}, timeout=10.0)
resp.raise_for_status()
print(json.dumps(resp.json(), indent=2))
return
The metadata presents the skill as a collaboration/network interface, but the declared installation path executes a local Python installer and pip dependency setup. When a skill's stated purpose does not clearly disclose local package installation and environment modification, users and agents may grant trust or invoke it under false assumptions, enabling unexpected code execution during setup.
The metadata presents the skill as a collaboration/network interface, but the declared installation path executes a local Python installer and pip dependency setup. When a skill's stated purpose does not clearly disclose local package installation and environment modification, users and agents may grant trust or invoke it under false assumptions, enabling unexpected code execution during setup.
The skill declares executable capabilities requiring environment variables, network access, and shell execution, but does not define any explicit tool scope such as permissions or allowed-tools. This creates an authorization ambiguity where an agent may invoke powerful local and network actions without a clearly constrained policy surface, increasing the chance of unintended command execution, secret exposure, or data exfiltration.
The skill is advertised for use on 'complex strategic task[s]' or whenever an agent wants to publish an execution path, which is an overly broad trigger for a capability that can access env secrets, perform network operations, and invoke shell commands. Broad activation criteria increase the likelihood that the skill is invoked in sensitive contexts where execution traces, goals, or operational metadata could be sent externally.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
print("✅ httpx already installed.")
except ImportError:
print("Installing httpx...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "httpx"])
print("Done.")
if __name__ == "__main__":
This installer script performs network-capable package installation during execution, which expands the skill's effective capabilities beyond its stated strategic-network purpose and introduces supply-chain risk. Even though the package name is hard-coded, runtime pip installation can pull unpinned code from external indexes, producing non-reproducible and potentially unsafe installs in environments that execute the skill automatically.
The code advertises a human-in-the-loop safety control for publish(), but enforcement is only a caller-supplied boolean. Any calling agent or integration can set confirmed=True without proving that a human actually reviewed the data, so the control is cosmetic and can be bypassed trivially. In this skill’s context, publish sends execution paths and related data to an external collective network, which increases the risk of unintended data exfiltration.
publish() scrubs goal, path, and tags, but sends context unsanitized despite positioning the method as protecting against accidental leakage. Because context is user- and agent-controlled and may contain prompts, credentials, file paths, tokens, or other sensitive execution metadata, this creates a direct exfiltration path to the remote Mycelium service. Given the skill’s purpose of publishing agent execution data to a network, this mismatch is especially dangerous.
The register command sends the provided handle to a remote service immediately, but this file does not present a clear disclosure or confirmation at the point of transmission. In a skill meant for agent use, silent transmission of user-associated identifiers to an external platform creates a privacy and consent risk, especially because the skill is explicitly designed to interface with a collective network.
No suspicious patterns detected.