Ganglion

Security checks across malware telemetry and agentic risk

Overview

Ganglion is a coherent operator skill, but it gives agents broad control over a local or remote execution bridge that can read project files, upload Python code, mutate pipelines, update prompts, run experiments, and roll back state.

Install only if you intend to let an agent operate Ganglion. Keep the HTTP bridge bound to localhost or a trusted admin network, do not expose source-read or mutation endpoints publicly, review any tool/agent/prompt/pipeline changes before applying them, avoid printing API keys, and inspect shared knowledge or rollback actions before using them in a shared or production project.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (23)

Lp3

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding
The skill clearly instructs use of shell commands (`ganglion`, `curl`, `jq`) and remote HTTP operations, but the frontmatter does not declare any permissions or guardrails for shell/network use. This mismatch can cause an agent platform to invoke powerful command execution capabilities without explicit user-visible consent boundaries, increasing the chance of unintended local execution or remote side effects.

Vague Triggers

High
Confidence
97% confidence
Finding
The description says to use this skill for 'every task involving this project' and lists broad trigger phrases such as configure, call the API, and check status. That makes invocation overly broad, so the skill may activate for benign informational tasks and then expose the agent to operational, write-capable, or networked workflows by default.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This section documents runtime mutation, pipeline patching, MCP server connection changes, and rollback operations, including a command that can undo all mutations, but it does not prominently require confirmation or warn about operational impact. In an agent setting, documentation that normalizes destructive write actions without safety interlocks materially increases the risk of unauthorized or accidental state changes.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The workflow instructs users to export an API key directly in the shell without any guidance on secret handling, scoping, or avoiding command/history leakage. In operational docs, this can normalize insecure credential practices and increase the chance of accidental exposure through shell history, logs, screenshots, or shared terminals.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The mutation examples demonstrate system-changing operations such as registering tools, patching the pipeline, and updating prompts without any warning that they alter the project state. In a skill intended to be used operationally for this project, copy-pasting these examples could cause unintended code or configuration changes, especially because one example injects arbitrary Python source into the system.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The rollback examples show commands that undo prior mutations, including rolling back all mutations, without warning that these actions may remove recent changes and disrupt current workflows. In an operations-focused skill, users may run these commands assuming they are harmless status or recovery checks, leading to accidental loss of configuration or work.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The documentation advertises remote source-reading endpoints that expose project files over the HTTP bridge, but it does not warn that this can disclose proprietary code, prompts, configs, or embedded secrets to anyone who can reach the service. In this skill's context, the same API also supports remote mutation and execution, so undocumented source exposure materially increases reconnaissance value for an attacker.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The troubleshooting guidance instructs users to print part of `LLM_PROVIDER_API_KEY` to the terminal (`echo $LLM_PROVIDER_API_KEY | head -c 10`) without any warning about secret handling. Even partial secret disclosure can leak sensitive prefixes into shell history, terminal logs, screenshots, CI logs, or shared support transcripts, which is especially risky in an operational troubleshooting document likely to be copied verbatim.

External Transmission

Medium
Category
Data Exfiltration
Content
```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
Confidence
93% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/tools" -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"name":"my_tool","code":"<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
```
Confidence
92% confidence
Finding
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
# 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
Confidence
90% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/mcp/servers" -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Register a Tool
```bash
curl -s -X POST "$GANGLION_URL/v1/tools" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "analyze_results",
Confidence
96% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/tools" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### 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
```
Confidence
87% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/tools" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Patch Pipeline
```bash
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [
Confidence
88% confidence
Finding
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Update a Prompt
```bash
curl -s -X POST "$GANGLION_URL/v1/prompts" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Trainer",
Confidence
88% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/prompts" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Register a New Tool
```bash
curl -s -X POST "$GANGLION_URL/v1/tools" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my_tool",
Confidence
96% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/tools" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Register a New Agent
```bash
curl -s -X POST "$GANGLION_URL/v1/agents" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MyAgent",
Confidence
96% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/agents" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Add a Stage
```bash
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [{
Confidence
91% confidence
Finding
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Remove a Stage
```bash
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
  -H "Content-Type: application/json" \
  -d '{"operations": [{"op": "remove_stage", "stage_name": "validate"}]}' | jq
```
Confidence
90% confidence
Finding
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
### Update a Stage
```bash
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [{
Confidence
91% confidence
Finding
curl -s -X PATCH "$GANGLION_URL/v1/pipeline" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Swap policy for a specific stage
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
Confidence
83% confidence
Finding
curl -s -X PUT "$GANGLION_URL/v1/policies/train" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{"retry_policy": {"type": "escalating", "max_attempts": 5, "temperature_step": 0.1}}' | jq

# Swap the pipeline default policy
curl -s -X PUT "$GANGLION_URL/v1/policies/default" \
  -H "Content-Type: application/json" \
  -d '{"retry_policy": {"type": "fixed", "max_attempts": 3}}' | jq
```
Confidence
83% confidence
Finding
curl -s -X PUT "$GANGLION_URL/v1/policies/default" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
## Updating Prompts (Remote Only)

```bash
curl -s -X POST "$GANGLION_URL/v1/prompts" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "Planner",
Confidence
88% confidence
Finding
curl -s -X POST "$GANGLION_URL/v1/prompts" \ -H "Content-Type: application/json" \ -d

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal