Back to skill

Security audit

Agent Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its orchestration purpose, but it should be reviewed because it can spawn autonomous agents and send task data to a third-party AI API without clear approval or data limits.

Install only if you intentionally want multi-agent orchestration and are comfortable with sub-agents creating workspaces and using the SkillBoss API. Treat any task files, datasets, source code, or internal documents as potentially shareable with that third-party service unless you add your own approval, redaction, and local-only controls.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:177
Finding

Unrestricted Third-Party Processing of Task Content

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 177-190
Vulnerability Type: Uncontrolled transmission of task content to an external AI service
Risk Level: Medium

Vulnerable Code

python
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def pilot(body: dict) -> dict:
    r = requests.post(
        "https://api.heybossai.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,
        timeout=60,
    )
    return r.json()

# LLM reasoning / analysis
result = pilot({"type": "chat", "inputs": {"messages": [{"role": "user", "content": "Analyze this data..."}]}, "prefer": "balanced"})
text = result["result"]["choices"][0]["message"]["content"]

Technical Analysis

The Skill instructs sub-agents requiring AI capabilities to submit task content to https://api.heybossai.com/v1/pilot. The request body can contain prompts and data derived from files supplied to an agent. No controls require agents to classify the information, redact secrets, minimize the request, obtain task-specific approval, or prefer local processing.

The bearer token is transmitted to its intended API endpoint over HTTPS and is not, by itself, evidence of credential exfiltration. The security issue is that arbitrary task content may be sent to a third party without safeguards. Such content could include proprietary source code, internal documents, customer information, credentials, or other regulated data.

Remote AI processing can support the declared functionality, but it is not necessary for the core local orchestration workflow. Making it a broadly recommended backend therefore exceeds minimum privilege unless external transmission is explicitly authorized for the specific task.

Attack Path

  1. A user supplies confidential content as part of an orchestration task.
  2. The orchestrator places that content, or instructions de ...[truncated 1026 chars]
Remediation
View remediation

Remediation Suggestions

  1. Make remote AI processing opt-in for each task rather than the default recommendation.
  2. Clearly notify the user of the destination service and categories of data that will be transmitted.
  3. Require explicit approval before sending file contents, source code, personal information, or internal documents.
  4. Add a local-only execution mode for orchestration and analysis.
  5. Introduce secret detection and redaction for API keys, passwords, private keys, access tokens, connection strings, and personal data.
  6. Minimize requests by transmitting only the specific fields required for the operation rather than complete files or datasets.
  7. Define request-size and data-classification policies and reject prohibited content.
  8. Document the external provider's retention, training, residency, logging, and deletion policies.
  9. Check HTTP status codes, validate response schemas, and handle errors without logging request bodies or credentials.
  10. Restrict outbound connections to approved endpoints through an enforceable network allowlist.

T09 · Insecure Skill Coding Practices

Warning
Location
references/sub-agent-templates.md:177
Finding

Analysis Agent Sends Entire Input Data to a Third-Party API

Content
View full analysis

Vulnerability Details

File Location: references/sub-agent-templates.md, lines 177-188
Vulnerability Type: Direct interpolation and external transmission of potentially sensitive datasets
Risk Level: Medium

Vulnerable Code

python
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def pilot(body):
    r = requests.post(
        "https://api.heybossai.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body, timeout=60,
    )
    return r.json()

result = pilot({"type": "chat", "inputs": {"messages": [{"role": "user", "content": f"Analyze this data and provide insights: {data}"}]}, "prefer": "balanced"})
insights = result["result"]["choices"][0]["message"]["content"]

Technical Analysis

The Analysis Agent template interpolates the complete data value into an LLM prompt and submits it to the SkillBoss API. Because the workflow directs the agent to read input datasets from inbox/data/, the value may originate from user-provided files and may contain sensitive or regulated information.

There is no field selection, aggregation, anonymization, redaction, sensitivity check, or user-approval gate before transmission. The template also does not establish a maximum input size or prohibit credentials and secrets. Consequently, copying and using this template can cause bulk disclosure of an entire input dataset.

The authorization header is a conventional use of an API credential with the intended HTTPS endpoint. The vulnerability is the unrestricted request payload, not the mere presence of bearer authentication.

Attack Path

  1. Sensitive data is placed in inbox/data/ for local analysis.
  2. The Analysis Agent loads the file contents into the data variable.
  3. The template inserts the complete value into an f-string: Analyze this data and provide insights: {data}.
  4. The resulting prompt is include ...[truncated 1170 chars]
Remediation
View remediation

Remediation Suggestions

  1. Do not interpolate an entire dataset into an external LLM prompt by default.
  2. Perform deterministic analysis locally whenever an external model is unnecessary.
  3. Require explicit user authorization before enabling LLM-assisted analysis.
  4. Add data-classification rules that block secrets, personal data, regulated records, and proprietary files from external processing.
  5. Apply redaction, tokenization, anonymization, sampling, or aggregation before constructing the request.
  6. Use an explicit allowlist of fields permitted to leave the local environment.
  7. Enforce payload-size limits and reject unexpectedly large requests.
  8. Display a transmission preview identifying the destination and exact data categories before submission.
  9. Provide a configurable, approved endpoint and support enterprise controls for retention, residency, and audit logging.
  10. Ensure logs and exception handlers never record bearer tokens or unredacted request bodies.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · references/communication-protocol.md (reported line 72)May include surrounding context.

md
# Task: {TASK_NAME}

## Objective
{Clear statement of what needs to be accomplished}

## Context
{Background information relevant to the task}

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The mandatory trigger list includes broad phrases like 'orchestrate', 'delegate tasks', and 'task breakdown' that can appear in ordinary user requests unrelated to this high-privilege orchestration behavior. That increases the chance of accidental invocation of a skill that can spawn sub-agents, generate instructions dynamically, and widen data access across multiple workspaces.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The orchestrator skill’s primary purpose is local task decomposition and sub-agent coordination, but it also instructs sub-agents to use an external API with an environment-provided bearer token. This expands the trust boundary unnecessarily and can cause arbitrary task data, prompts, or documents handled by spawned agents to be transmitted off-system without clear necessity or guardrails.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill describes sending prompts and search queries to an external API but provides no user-facing warning that task content may leave the local environment. In an orchestrator context, sub-agents may process sensitive intermediate artifacts, so undisclosed network sharing is more dangerous than in a clearly network-centric skill.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The request construction explicitly serializes arbitrary request body content to a third-party endpoint, which means any data placed into 'body' by sub-agents can be transmitted externally. Because the orchestrator dynamically generates agent roles and instructions, this increases the likelihood of broad or unintended data sharing.

Content

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

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def pilot(body: dict) -> dict:
    r = requests.post(
        "https://api.heybossai.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The request construction explicitly serializes arbitrary request body content to a third-party endpoint, which means any data placed into 'body' by sub-agents can be transmitted externally. Because the orchestrator dynamically generates agent roles and instructions, this increases the likelihood of broad or unintended data sharing.

Content

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

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

def pilot(body: dict) -> dict:
    r = requests.post(
        "https://api.heybossai.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The hardcoded external API endpoint confirms dependency on a third-party service and a non-local trust boundary. In this skill, that matters because the orchestrator can aggregate results from many sub-agents, making the volume and sensitivity of potentially transmitted data higher than for a simple single-purpose skill.

Content

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

md
def pilot(body: dict) -> dict:
    r = requests.post(
        "https://api.heybossai.com/v1/pilot",
        headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
        json=body,
        timeout=60,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The Research Agent template explicitly instructs use of a third-party API for search, scraping, and chat, but it provides no warning that prompts, queries, scraped content, or task data may be transmitted off-system. In an agent-orchestration context, sub-agents may be dynamically created and given sensitive instructions or files, so this omission can lead to unreviewed data exfiltration through normal workflow use.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This finding is a duplicate view of the same external transmission sink in the Research Agent template. The risk is real because the example normalizes sending arbitrary request bodies to a third-party API without any confidentiality guardrails.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 49)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

   def pilot(body):
       r = requests.post(
           "https://api.heybossai.com/v1/pilot",
           headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
           json=body, timeout=60,

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This finding is a duplicate view of the same external transmission sink in the Research Agent template. The risk is real because the example normalizes sending arbitrary request bodies to a third-party API without any confidentiality guardrails.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 49)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

   def pilot(body):
       r = requests.post(
           "https://api.heybossai.com/v1/pilot",
           headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
           json=body, timeout=60,

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The hardcoded external endpoint confirms that the Research Agent template is designed to communicate with a third-party service. By itself the URL is not malicious, but in this skill context it increases risk because autonomous agents can be generated at scale and may send task-derived content externally without user awareness.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 50)May include surrounding context.

md
def pilot(body):
       r = requests.post(
           "https://api.heybossai.com/v1/pilot",
           headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
           json=body, timeout=60,
       )

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The Analysis Agent template directs agents to use an external LLM service for analysis without warning that input data may be sent to a third party. Because analysis tasks often involve proprietary datasets, logs, customer records, or internal documents, silent off-system transmission creates a material confidentiality and compliance risk.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

This template goes beyond generic API use and specifically demonstrates sending full data into an external chat prompt for analysis. That pattern encourages wholesale dataset disclosure to a third-party LLM, which is dangerous in a meta-agent system where the originating data may contain secrets, regulated information, or other high-value internal content.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This is a duplicate detection of the same external POST sink in the Analysis Agent template. It remains dangerous because the code path is paired with instructions to include analysis data in the prompt payload, creating a straightforward exfiltration channel.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 180)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

     def pilot(body):
         r = requests.post(
             "https://api.heybossai.com/v1/pilot",
             headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
             json=body, timeout=60,

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This is a duplicate detection of the same external POST sink in the Analysis Agent template. It remains dangerous because the code path is paired with instructions to include analysis data in the prompt payload, creating a straightforward exfiltration channel.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 180)May include surrounding context.

md
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]

     def pilot(body):
         r = requests.post(
             "https://api.heybossai.com/v1/pilot",
             headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
             json=body, timeout=60,

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The external endpoint in the Analysis Agent confirms off-system delivery of analysis requests to a third-party service. Given the surrounding workflow encourages use on inbox data, this materially raises the chance of exposing proprietary or regulated datasets through routine agent execution.

Content

Scanner excerpt · references/sub-agent-templates.md (reported line 181)May include surrounding context.

md
def pilot(body):
         r = requests.post(
             "https://api.heybossai.com/v1/pilot",
             headers={"Authorization": f"Bearer {SKILLBOSS_API_KEY}", "Content-Type": "application/json"},
             json=body, timeout=60,
         )

Static analysis

No suspicious patterns detected.