T09 · Insecure Skill Coding Practices
- Location
executor.py:251- Finding
Credential Filtering Is Bypassed by the Live Delegation Path
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent model router, but it can silently send prompts to other providers and its executable delegation path bypasses the promised credential filter.
Review this skill carefully before installing. It is not backed by evidence of intentional theft or destructive behavior, but it is designed to route normal prompts among external model providers, and the shipped code has a real sanitizer bypass in the live delegation path. Avoid using it with secrets, health data, financial records, customer data, or proprietary material unless you add explicit provider allowlists, user confirmation before cross-provider routing, and a single enforced sanitization path for all delegation and fallback flows.
executor.py:251Credential Filtering Is Bypassed by the Live Delegation Path
dashboard.py:254Dashboard Reports Fabricated Security-Event Counts
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
If the actual skill introduces disk persistence and CLI inspection/cleanup while omitting that from the description, users and operators cannot accurately assess data retention, exposure of logs, or local attack surface. In an agent skill that may process prompts and provider metadata, undeclared persistence is a real security concern because it can store sensitive content or routing state unexpectedly.
Silent-by-default activation means the skill may engage on ordinary user messages without explicit consent or a narrow invocation pattern. For a router that can choose external providers and inspect message content, overbroad activation increases the chance of unintended provider routing, accidental data disclosure, and unpredictable interference with other skills or system behavior.
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
# Security Best Practices for Model Routing
Comprehensive security guidance for multi-model routing systems.
---
## Security Guarantees
This skill makes the following security guarantees:
| Guarantee | Status | Verification |
|-----------|--------|--------------|
| No API keys stored in skill files | ✅ Enforced | Grep for patterns; none found |
| Credentials via environment only | ✅ Enforced | Keys read from env/auth-profiles only |
| Input sanitization before routing | ✅ Implemented | See [Input Sanitization](#input-sanitization) |
| No arbitrary code execution | ✅ By design | See [Code Execution Safety](#cod
Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.
### Model Override Safety
Even user model overrides are validated against an allowlist:
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
### Model Override Safety
Even user model overrides are validated against an allowlist:
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
Watch for attempts to manipulate routing:
"Ignore previous instructions"
"You are now..."
"Disregard your programming"
"New system prompt:"
Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.
### AI-Specific Risks
1. **Jailbreaking attempts** - Users trying to bypass safety
2. **Data exfiltration** - Tricking AI to reveal training data
3. **Model confusion** - Causing wrong model selection
4. **Cost attacks** - Triggering expensive models unnecessarily
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
### AI-Specific Risks
1. **Jailbreaking attempts** - Users trying to bypass safety
2. **Data exfiltration** - Tricking AI to reveal training data
3. **Model confusion** - Causing wrong model selection
4. **Cost attacks** - Triggering expensive models unnecessarily
The router's classify path references undefined Phase H symbols and functions such as pre_flight_token_audit, PHASE_H_FORCE_THRESHOLD, and PHASE_H_MODEL, which will cause runtime failure before routing completes. In this skill context, that can disable routing, sanitization-dependent protections, and provider-selection safeguards, creating a denial-of-service condition and undermining the claimed safety controls.
The documentation states mandatory routing of medical requests to GPT-5.2 without offering user choice or consent. For high-sensitivity domains like health, forced provider selection can route private data to a third party based solely on router policy, creating privacy, compliance, and user-expectation risks even if the model is selected for quality reasons.
The README explicitly documents a 'silent retry' that intercepts context-overflow errors and reroutes the request to Gemini without notifying the user at the moment provider handling changes. This creates a transparency and consent problem: sensitive prompts may be sent to a different provider than the user expected, undermining data-handling assumptions, auditability, and trust boundaries.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# From your workspace root
mkdir -p skills
cp -r /path/to/smart-router skills/
The skill declares runtime requirements and presents executable Python snippets and provider interactions, but does not declare an explicit tool/permission scope. In an agent environment, missing least-privilege boundaries can allow the skill to access environment variables, networked model providers, and local state/log files more broadly than users expect. The risk is amplified by references to persistent state, status commands, and provider discovery.
Using broad everyday phrases like 'write', 'explain', 'review', or 'summarize' as activation/intent signals creates a high risk of unintended matching. In a skill that may route requests across providers, broad triggers can cause requests containing sensitive or irrelevant content to be processed by the router when the user did not intend that behavior.
The long-context table states that 128K-200K requests fall back through 'Opus → Sonnet → Gemini Pro' and that 200K-1M uses 'Gemini Pro → Flash'. However, the implementation at L431 includes 'haiku' and 'flash' in the <=200K tier as additional candidates, which expands behavior beyond the documented chain. This is an active intent/documentation contradiction rather than a minor omission because the section is presented as the authoritative fallback policy.
The inline comments at L625 describe COMPLEX as allowing only '$', '$$', and '$$$', but the returned mapping at L657 also includes '$$$$'. Since Opus is documented as '$$$$' elsewhere, the code permits the most expensive tier despite the nearby explanation saying otherwise. This is a direct contradiction in implementation guidance, not merely incomplete documentation.
The documented 'silent retry with Gemini Pro' behavior can resend failed prompts to a different provider without explicit user awareness or consent. In a router that may handle sensitive prompts, this creates a real confidentiality and compliance risk because data that the user intended for one model/provider could be transmitted to another after an error condition.
Detected: suspicious.prompt_injection_instructions