Back to skill

Security audit

Codebase Guide

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Ganglion operator guide, but it broadly auto-activates and includes powerful live mutation, rollback, MCP expansion, and project-source access workflows without enough scoping or approval guidance.

Install only if you intend the agent to operate a trusted Ganglion project. Keep the HTTP bridge bound to localhost or another trusted network, review any code before using tool/agent registration endpoints, require explicit approval before pipeline, prompt, policy, rollback, or MCP changes, and avoid running the troubleshooting Python execution commands on untrusted projects. Prefer a virtual environment with pinned reviewed package versions and do not expose OPENAI_API_KEY in shared logs or terminals.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:67
Finding

Unpinned Third-Party Package Installation

Content
View full analysis
= 3.11, `OPENAI_API_KEY` set (used by the LLM runtime). **Install:** `pip install ganglion` ``` Related installation instructions include: ```bash pip install openai>=1.0 # or reinstall ganglion with all deps pip install ganglion ``` ### Technical Analysis The instructions install executable Python packages without exact version constraints, integrity hashes, or a reviewed lock file. Consequently, the code installed can change after the Skill itself has been audited. This is security-sensitive because Ganglion is instructed to: - Load and execute project Python configuration, tools, and agents. - Start an HTTP service. - Execute autonomous pipelines. - Operate in an environment containing `OPENAI_API_KEY`. Although the package name appears intentional and there is no evidence that the package is currently malicious, installing an unpinned release from the default package index leaves users exposed to upstream account compromise, malicious future releases, or unexpected dependency changes. ### Attack Path 1. An attacker compromises the publisher account, distribution infrastructure, or an indirect dependency used by a future Ganglion or OpenAI package release. 2. The attacker publishes a malicious version that still satisfies the unpinned installation command. 3. A user follows the documented `pip install ganglion` or `pip install openai>=1.0` instruction. 4. Pip resolves and installs the attacker-controlled version. 5. Malicious code executes during installation, import, or later invocation of the Ganglion CLI. 6. The payload operates with the invoking user's permissions and may acce ...[truncated 779 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
references/troubleshooting.md:38
Finding

Troubleshooting Commands Execute Project Python Files Without Isolation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (48)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The manifest and documentation claim this skill should be used for nearly all Ganglion tasks, creating overbroad routing authority and user trust, while the actual behavior appears narrower. Description-behavior mismatch is dangerous because it can cause an agent to select this skill in contexts involving execution, mutation, or rollback that need stricter guardrails than a generic guide.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is marked for use on essentially every project task and includes generic trigger phrases like running pipelines, configuring, calling APIs, and rollback. This broad activation scope makes accidental invocation far more likely, especially in autonomous systems, and combines dangerously with examples that include execution, mutation, and remote API usage.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/healthcheck.sh (reported line 104)May include surrounding context.

sh
pass "Readiness probe OK at $GANGLION_URL/readyz"

        # Check if running
        RUNNING=$(curl -s "$GANGLION_URL/v1/status" 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('data', {}).get('running', 'unknown'))" 2>/dev/null || echo "unknown")
        if [ "$RUNNING" = "False" ]; then
            pass "No pipeline currently running"
        elif [ "$RUNNING" = "True" ]; then

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/healthcheck.sh (reported line 114)May include surrounding context.

sh
fi

        # Check tool count
        TOOL_COUNT=$(curl -s "$GANGLION_URL/v1/tools" 2>/dev/null | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('data', [])))" 2>/dev/null || echo "?")
        pass "Tools registered: $TOOL_COUNT"

        # Check agent count

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/healthcheck.sh (reported line 118)May include surrounding context.

sh
pass "Tools registered: $TOOL_COUNT"

        # Check agent count
        AGENT_COUNT=$(curl -s "$GANGLION_URL/v1/agents" 2>/dev/null | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('data', [])))" 2>/dev/null || echo "?")
        pass "Agents registered: $AGENT_COUNT"

    elif [ "$HTTP_CODE" = "503" ]; then

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill advertises shell-capable operational workflows but declares no explicit tool scope or permission boundaries. In an agent environment, this increases the chance the skill will be auto-invoked for broad tasks and then execute shell/network actions without least-privilege constraints, enabling unintended system or project changes.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 107)May include surrounding context.

ganglion run ./my-subnet --stage plan

Remote

curl -s -X POST "$GANGLION_URL/v1/run/pipeline" -H "Content-Type: application/json" -d '{}' | jq .data curl -s -X POST "$GANGLION_URL/v1/run/stage/plan" -H "Content-Type: application/json" -d '{}' | jq .data

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 260)May include surrounding context.

ganglion run ./my-subnet --stage plan

Remote

curl -s -X POST "$GANGLION_URL/v1/run/pipeline" -H "Content-Type: application/json" -d '{}' | jq .data curl -s -X POST "$GANGLION_URL/v1/run/stage/plan" -H "Content-Type: application/json" -d '{}' | jq .data

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 108)May include surrounding context.

Remote

curl -s -X POST "$GANGLION_URL/v1/run/pipeline" -H "Content-Type: application/json" -d '{}' | jq .data curl -s -X POST "$GANGLION_URL/v1/run/stage/plan" -H "Content-Type: application/json" -d '{}' | jq .data

text

### Mutate at Runtime (Remote Only)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documentation includes system-impacting operations such as tool registration, pipeline patching, and rollback without prominent warnings, approval steps, or safety checks. In an agent setting, presenting destructive actions as routine workflow can normalize unsafe changes and lead to unauthorized configuration drift or service disruption.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This example posts code to a remote endpoint to register a new tool at runtime. In the context of a broadly auto-activated agent skill with no declared permissions, providing code-injection/mutation instructions without strong controls is dangerous because it can enable arbitrary capability expansion or remote code introduction.

Content

Scanner excerpt · SKILL.md (reported line 116)May include surrounding context.

bash
# Register a tool
curl -s -X POST "$GANGLION_URL/v1/tools" -H "Content-Type: application/json" \
  -d '{"name":"my_tool","code":"<code>","category":"training"}' | jq .data

# Patch pipeline

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This example patches the live pipeline via a remote API, changing execution stages and dependencies. In this skill's context—broad activation scope, no explicit permission boundaries, and limited warnings—this is dangerous because an agent could be induced to alter production workflow behavior, causing outages, unsafe execution paths, or policy bypass.

Content

Scanner excerpt · SKILL.md (reported line 120)May include surrounding context.

-d '{"name":"my_tool","code":"","category":"training"}' | jq .data

Patch pipeline

curl -s -X PATCH "$GANGLION_URL/v1/pipeline" -H "Content-Type: application/json"
-d '{"operations":[{"op":"add_stage","stage":{"name":"validate","agent":"Validator","depends_on":["train"]}}]}' | jq .data

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

This example dynamically connects an MCP server by specifying a command to run, which expands the tool surface at runtime and may launch arbitrary local processes. Within a skill intended for broad use, this materially increases the chance of unreviewed tool injection or execution of attacker-controlled MCP endpoints.

Content

Scanner excerpt · SKILL.md (reported line 168)May include surrounding context.

md
# mcp_clients = [MCPClientConfig(name="weather", transport="stdio", command=["python", "-m", "weather_server"])]

# Dynamic: add at runtime via API
curl -s -X POST "$GANGLION_URL/v1/mcp/servers" -H "Content-Type: application/json" \
  -d '{"name":"weather","transport":"stdio","command":["python","-m","weather_server"]}' | jq .data

# Check connected MCP servers

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation instructs users to export an API key directly into their shell environment without any warning about secret handling, shell history exposure, process inheritance, or safer alternatives. While this is a common setup pattern, omitting credential-safety guidance can lead to accidental disclosure in shared terminals, logs, screenshots, or child processes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This workflow documents live remote mutation of server-side tools and pipeline state, including uploading executable code and altering pipeline behavior, but provides no warning that these are state-changing administrative operations. In the context of an agent framework, normalizing unaudited dynamic mutation materially increases the risk of unsafe code injection, unintended production changes, and persistence of malicious or broken behavior.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 100)May include surrounding context.

  1. Register a new tool:
    bash
    curl -s -X POST "$GANGLION_URL/v1/tools" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "evaluate_model",
    

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 111)May include surrounding context.

  1. Add a new stage to the pipeline:
    bash
    curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
      -H "Content-Type: application/json" \
      -d '{
        "operations": [{
    

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 164)May include surrounding context.

  1. Run alpha:

    bash
    curl -s -X POST "http://127.0.0.1:8899/v1/run/pipeline" -H "Content-Type: application/json" -d '{}' | jq .data.success
    
  2. Run beta:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 169)May include surrounding context.

  1. Run beta:

    bash
    curl -s -X POST "http://127.0.0.1:8900/v1/run/pipeline" -H "Content-Type: application/json" -d '{}' | jq .data.success
    
  2. Check shared knowledge from either bot:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The rollback example encourages undoing all mutations back to index 0 without warning that the action may remove valid changes, destroy runtime state, or be difficult to recover from if snapshots are not preserved. That omission can lead operators to execute broad destructive actions during troubleshooting without understanding the blast radius.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/common-workflows.md (reported line 253)May include surrounding context.

  1. Swap to escalating retry with stall detection:
    bash
    curl -s -X PUT "$GANGLION_URL/v1/policies/train" \
      -H "Content-Type: application/json" \
      -d '{"retry_policy": {"type": "escalating", "max_attempts": 5, "temperature_step": 0.1}}' | jq
    

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation provides copy-pastable mutation requests that create tools, patch the pipeline, and modify prompts without any warning, approval boundary, or discussion of operational impact. In an agent skill intended to be used broadly for project tasks, this normalizes state-changing actions and can lead users or downstream agents to make persistent code and configuration changes unintentionally.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
97% confidence
Finding

This example submits arbitrary Python source code to a local API that registers a new tool on the system, effectively demonstrating remote code introduction through an HTTP interface. In the skill context, this is highly dangerous because an agent or user could persist executable code into the project without any warning, trust boundary explanation, or mention of code review and sandboxing.

Content

Scanner excerpt · examples/sample-requests.md (reported line 200)May include surrounding context.

Register a Tool

bash
curl -s -X POST "$GANGLION_URL/v1/tools" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "analyze_results",

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

Even though the sample shows a validation failure, it still advertises an endpoint that accepts raw code over HTTP for registration into the system. This communicates the availability of a code-injection surface and may encourage use of a privileged mutation API without explaining the security controls required.

Content

Scanner excerpt · examples/sample-requests.md (reported line 214)May include surrounding context.

Register a Tool (Validation Failure)

bash
curl -s -X POST "$GANGLION_URL/v1/tools" \
  -H "Content-Type: application/json" \
  -d '{"name": "bad_tool", "code": "def bad_tool(x):\n    pass", "category": "misc"}' | jq

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This PATCH example modifies pipeline structure via API, which can alter execution flow, optionality, and downstream behavior across the project. In an agent skill marketed for routine use, presenting a state-altering orchestration endpoint without warnings or approval requirements increases the risk of unauthorized workflow tampering.

Content

Scanner excerpt · examples/sample-requests.md (reported line 224)May include surrounding context.

Patch Pipeline

bash
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [

Static analysis

No suspicious patterns detected.