Back to skill

Security audit

solar-delegation

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Solar delegation skill, but it needs review because it can send broadly defined session context to an external model provider and gives weak guidance for protecting the OpenRouter API key.

Install only if you are comfortable with long responses being delegated to OpenRouter/Upstage. Keep delegation disabled or use a high threshold for confidential work and shared messenger channels, send only the minimum needed context, review output before forwarding it, and store the OpenRouter key in a protected secret mechanism rather than committing or sharing config files.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:31
Finding
Unbounded Disclosure of Session Context to an External Model Provider<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:31-58` **Vulnerability Type**: Sensitive information exposure through third-party model delegation **Risk Level**: Medium ### Vulnerable Code Snippet ```markdown ## How to Delegate 1. Estimate output token length. 2. Check whether current session is enabled. 3. If enabled and estimate >= threshold, run `sessions_spawn` with Solar Pro3. Example spawn task pattern: ```text <context + writing instruction> 중요: 도구(tool)를 사용하지 말고 텍스트만 바로 출력해줘. 파일 읽기/쓰기 등 도구 호출 금지. ``` Set model to: - `openrouter/upstage/solar-pro-3` ### Main Session Use `sessions_spawn` and wait for auto-announced result. ### Messenger Sessions (Slack/Telegram/etc.) Use `sessions_spawn`, then fetch the final assistant text and forward it through the appropriate message channel/thread. If no final text arrives within a reasonable timeout, fall back to direct response. ## Rules - Pass through Solar output as-is (no extra summary/footer/metadata). - Keep non-user-facing orchestration text minimal. - Do not output intermediate narration between tool calls. - Always include the “no tool call” instruction in spawn tasks. ``` ### Technical Analysis The Skill intentionally delegates text generation to the external model `openrouter/upstage/solar-pro-3`. External network communication is necessary for the declared delegation feature, but the instruction to send `<context + writing instruction>` does not define or enforce a minimum-data boundary. There are no documented controls requiring the agent to: - Include only the text strictly necessary for the drafting task. - Exclude API keys, credentials, hidden prompts, tool results, persistent memory, or unrelated conversation history. - Detect or redact personal, confidential, or proprietary information. - Notify the user that content will be transmitted to OpenRouter and potentially a downstream model provider. - Obtain per-request consent for sensitive transfers. - Review or vali ...[truncated 2078 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Enforce strict context minimization** - Send only the exact user-provided text required for the drafting operation. - Do not include complete session transcripts by default. - Explicitly exclude system prompts, hidden instructions, persistent memory, unrelated history, tool results, environment data, and authentication material. 2. **Add sensitive-data detection and redaction** - Detect common API keys, access tokens, passwords, private keys, connection strings, and personal identifiers before delegation. - Block delegation when safe redaction is not possible. - Replace detected sensitive values with neutral placeholders rather than sending them externally. 3. **Require informed user authorization** - Clearly disclose that selected content will be transmitted to OpenRouter and its downstream model provider. - Obtain explicit consent before delegating sensitive or previously unseen content. - Provide a simple option to process the request directly without external delegation. 4. **Define session-specific data policies** - Disable delegation by default for confidential, administrative, or tool-intensive sessions. - Apply stricter rules to shared Slack or Telegram channels where messages may contain data belonging to multiple users. - Treat token thresholds solely as performance controls, not as privacy controls. 5. **Validate delegated output** - Remove the requirement to forward Solar output unconditionally “as-is.” - Review output for accidental secret reproduction, unsupported claims, unsafe content, and unintended disclosure before forwarding it. - Preserve the fallback to direct generation when validation fails. 6. **Protect provider credentials** - Store the OpenRouter key in the platform’s secret manager or protected environment configuration. - Never place a real key directly in version-controlled configuration. - Restrict access to configuration files and rot ...[truncated 314 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The example spawn task includes a Korean-only instruction that can bias or override the delegated model's response language without any user request, locale check, or documented justification. In this skill, delegated output is intended to be passed through as-is, so a hard-coded foreign-language instruction can directly alter user-facing content, causing confusion, misdelivery, or policy/compliance issues in multilingual environments.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The guide instructs users to place a live OpenRouter API key directly into a JSON config example (`apiKey`: `sk-or-YOUR-KEY-HERE`) without warning about secret handling, environment-variable substitution, file permissions, or avoiding commits to source control. This can lead to accidental credential exposure through checked-in config files, shared screenshots, backups, or local compromise, especially because this skill explicitly introduces a second provider credential into the agent environment.

Static analysis

No suspicious patterns detected.