Back to skill

Security audit

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
This example sends arbitrary code to a remote API for tool registration (`"code":"<code>"`), which is effectively remote code introduction into the Ganglion environment. In agent contexts, presenting this as a routine operation without strong warnings can enable unauthorized code deployment, persistence, or execution on a connected service.

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
Patching the remote pipeline changes execution behavior and can insert new stages or dependencies, making it a privileged state-changing operation. In this skill, the command is documented as a normal workflow without mandatory confirmation or environment scoping, increasing the risk of accidental or unauthorized orchestration changes.

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
This example dynamically connects an external MCP server via a command specification, which can expand the tool surface and indirectly execute untrusted external tooling. In context, that is more dangerous than ordinary network transmission because it introduces new runtime capabilities and trust relationships into the agent environment.

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
This example transmits Python source code to a mutation endpoint that registers a new tool, effectively demonstrating remote code injection into the local system. In the context of an operational skill that users are encouraged to use for this project, this is dangerous because it normalizes sending executable code over the API without any visible warning, trust boundary discussion, or authorization guardrails.

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
Even though this is a validation-failure example, it still demonstrates posting raw code to the tool-registration endpoint. That reinforces a high-risk pattern of code submission over HTTP and may encourage unsafe experimentation against a live instance.

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
This request patches the pipeline definition over HTTP, changing execution flow and stage behavior. While not exfiltration, in practice it is a sensitive remote state-change operation, and in this skill context the lack of warnings makes it easy for a user to alter orchestration logic on a live system unintentionally.

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
Updating prompts over the API can materially change agent behavior, outputs, and downstream decisions, making it a sensitive control-plane action. In an agent skill, prompt mutation is especially risky because it can silently alter future execution semantics and could be abused for prompt injection persistence or operational sabotage.

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
This endpoint allows remote registration of arbitrary tool code over HTTP, which is effectively remote code injection if the service compiles, imports, or executes the submitted Python. In the context of an agent framework, a reachable unauthenticated or weakly protected endpoint could let an attacker install malicious tools that execute commands, exfiltrate data, or tamper with pipeline behavior.

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
Remote agent registration accepts Python code defining agent behavior, creating the same remote code execution and persistence risk as tool registration. In this skill context, agents influence prompts, tool access, and control flow, so a malicious agent could manipulate runs, leak data, or subvert decision-making across the system.

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
Remote pipeline mutation changes orchestration behavior at runtime. If exposed without strong controls, an attacker could add malicious stages, redirect outputs, or alter dependencies to cause unsafe execution, data leakage, or sabotage of experiments.

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
A remote remove-stage operation enables unauthorized degradation or disabling of safety, validation, or business-critical stages if the API is reachable. In an orchestration system, this can silently bypass intended controls and compromise integrity of results.

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
Updating a stage remotely can swap agents or mark stages optional, which may bypass safeguards or insert untrusted logic into the pipeline. In this skill's operational context, such changes can materially alter execution semantics and trust boundaries.

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
Remote policy swapping changes retry behavior and model parameters that can affect cost, stability, and potentially safety posture. While less severe than code upload, unauthorized changes could induce denial of service, runaway retries, or altered model behavior that undermines system guarantees.

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
Changing the default pipeline policy affects all stages and therefore has broad blast radius if abused. In this agent system, unauthorized default-policy changes could degrade reliability, increase spend, or weaken operational safety controls across the whole workflow.

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
Remote prompt updates allow runtime modification of agent instructions, which can fundamentally change system behavior and may be used to induce data leakage, policy bypass, or malicious task execution. In an LLM-driven framework, prompt mutation is a privileged control-plane action and should be treated as sensitive as code/config changes.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.