T05 · Unauthorized Access and Privilege Escalation
- Location
references/healthcheck.md:22- Finding
Overbroad Access to Platform Configuration and Session Logs
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent skill-building and auditing helper, but its health check mode can read sensitive agent configuration/session data and make network requests to URLs from audited skills.
Review this before installing if you use sensitive agent configs, private skill repositories, or local/session logs. Prefer `/skeall --scan <path>` for untrusted skills, avoid `--healthcheck-all` unless you are comfortable with broad local inspection, and do not run active URL validation against untrusted artifacts without first reviewing the destination list.
references/healthcheck.md:22Overbroad Access to Platform Configuration and Session Logs
references/healthcheck.md:170Unrestricted URL Validation Permits SSRF-Like Network Probing
The skill explicitly instructs the agent to generate and modify SKILL.md content, which is a self-modification / prompt-construction capability. In an adversarial setting, a skill that rewrites agent instructions can propagate unsafe patterns, preserve malicious directives, or introduce persistence mechanisms into downstream skills unless strong validation boundaries are enforced.
└── README.md # GitHub-facing (optional)
3. Write SKILL.md following these rules:
- YAML frontmatter with `name` and `description` (see Frontmatter section)
- Body under 500 lines, under 5000 tokens
- Instruction-based framing, not persona-based
Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.
When files move to references/, links break silently. Markdown renderers don't warn about dead links.
Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.
### 28. Silent skill deactivation from name/directory mismatch
The `name` field in SKILL.md frontmatter does not match the parent directory name. The platform cannot locate the skill by name, so it silently ignores it. The skill appears installed but never activates — no error, no warning.
Found in 3 of 22 production skills audited. This is the sneakiest bug in the list.
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
1. Collect all skill registry files:
- `~/.openclaw/openclaw.json` (OpenClaw)
- `~/.claude/settings.json` and `~/.claude/settings.local.json` (Claude Code)
- `~/.agents/config.json` (OpenAI Codex)
- Project-level `.claude/settings.json` in current directory
2. Search for any reference to the skill's `name` field in those files.
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
1. Collect all skill registry files:
- `~/.openclaw/openclaw.json` (OpenClaw)
- `~/.claude/settings.json` and `~/.claude/settings.local.json` (Claude Code)
- `~/.agents/config.json` (OpenAI Codex)
- Project-level `.claude/settings.json` in current directory
2. Search for any reference to the skill's `name` field in those files.
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
1. Collect all skill registry files:
- `~/.openclaw/openclaw.json` (OpenClaw)
- `~/.claude/settings.json` and `~/.claude/settings.local.json` (Claude Code)
- `~/.agents/config.json` (OpenAI Codex)
- Project-level `.claude/settings.json` in current directory
2. Search for any reference to the skill's `name` field in those files.
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.
name: skeall
description: |
Agent Skills (SKILL.md) builder, auditor, and improver for cross-platform LLM agents.
Use for "skeall", "build a skill", "create skill", "improve skill", "audit skill",
"skill review", or any SKILL.md question. Follows agentskills.io standard.
---
The frontmatter description uses very broad trigger phrases such as "create skill," "improve skill," and especially "any SKILL.md question," which can cause the skill to activate for a wide range of unrelated requests. Overbroad activation increases the chance that this skill is loaded unnecessarily, exposing users to unintended instruction influence and creating routing conflicts with other skills.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
/skeall --improve <path> # Analyze and improve existing skill
/skeall --scan <path> # Audit only, no changes (report)
/skeall --scan . # Audit skill in current directory
/skeall --scan-all # Batch scan all skills in ~/.claude/skills/
/skeall --scan-all <dir> # Batch scan all skills in custom directory
/skeall --healthcheck <path> # Runtime check single skill (orphans, deps, env, URLs)
/skeall --healthcheck-all # Runtime check all skills in ~/.openclaw/skills/
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
[FAIL] R2 HIGH -- Duplicate name "reprompter" found in 2 locations:
1. ~/.openclaw/skills/reprompter/SKILL.md (modified: 2 weeks ago)
2. ~/clawd/skills/reprompter/SKILL.md (modified: today)
Action: remove duplicate, symlink if needed
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
[FAIL] R2 HIGH -- Duplicate name "reprompter" found in 2 locations:
1. ~/.openclaw/skills/reprompter/SKILL.md (modified: 2 weeks ago)
2. ~/clawd/skills/reprompter/SKILL.md (modified: today)
Action: remove duplicate, symlink if needed
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
[FAIL] R2 HIGH -- Duplicate name "reprompter" found in 2 locations:
1. ~/.openclaw/skills/reprompter/SKILL.md (modified: 2 weeks ago)
2. ~/clawd/skills/reprompter/SKILL.md (modified: today)
Action: remove duplicate, symlink if needed
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
[FAIL] R2 HIGH -- Duplicate name "reprompter" found in 2 locations:
1. ~/.openclaw/skills/reprompter/SKILL.md (modified: 2 weeks ago)
2. ~/clawd/skills/reprompter/SKILL.md (modified: today)
Action: remove duplicate, symlink if needed
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# In SKILL.md:
curl -X POST https://api.home-proxy.internal/v1/lights
# Returned: Connection refused (proxy was shut down 3 months ago)
# Static scan: PASS. Health check R5: FAIL.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
[WARN] R5 MEDIUM -- Stale endpoint: https://api.example.com/v1 returned 404
Found in: SKILL.md line 82 (curl -X GET https://api.example.com/v1/status)
Response: HTTP 404 (checked at 2026-02-19 02:00 UTC)
Action: update URL or remove the curl command
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
[WARN] R5 MEDIUM -- Stale endpoint: https://api.example.com/v1 returned 404
Found in: SKILL.md line 82 (curl -X GET https://api.example.com/v1/status)
Response: HTTP 404 (checked at 2026-02-19 02:00 UTC)
Action: update URL or remove the curl command
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
[WARN] R5 MEDIUM -- Stale endpoint: https://api.example.com/v1 returned 404
Found in: SKILL.md line 82 (curl -X GET https://api.example.com/v1/status)
Response: HTTP 404 (checked at 2026-02-19 02:00 UTC)
Action: update URL or remove the curl command
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# In SKILL.md:
curl -H "Authorization: Bearer $SUNO_API_KEY" https://api.suno.ai/v1/generate
curl -H "X-API-Key: $SPOTIFY_CLIENT_SECRET" https://api.spotify.com/v1/me
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# In SKILL.md:
curl -H "Authorization: Bearer $SUNO_API_KEY" https://api.suno.ai/v1/generate
curl -H "X-API-Key: $SPOTIFY_CLIENT_SECRET" https://api.spotify.com/v1/me
$SUNO_API_KEY was set. $SPOTIFY_CLIENT_SECRET was not — the Spotify integration was planned but never configured. The skill would fail silently at runtime for any Spotify command.
The template instructs authors to write 'Use this skill for any {trigger-1}, {trigger-2}, or {trigger-3} question,' but provides no requirement that those triggers be specific or bounded. Because this is a reusable template, it may lead authors to choose vague everyday-language triggers that cause unintended invocation overlap.
The markdown uses "help me with X" as a natural-language trigger example. Even with the placeholder X, this phrasing is very close to ordinary user language and could encourage skills to activate on broad, everyday requests rather than narrowly scoped invocations.
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.
| Partial match | Related but not exact keyword | Skill may or may not activate |
| Negative | Completely unrelated prompt | Skill does NOT activate |
Write 3-5 trigger test prompts per skill. Include at least one negative test.
### Functional testing
This markdown reference uses Turkish trigger phrases and keywords such as "müzik çal", "araştır", and "web'de araştır" as normative examples for trigger-collision behavior, but it does not indicate that the skill is region-specific or that language choice is optional. That can conflict with organizational language/locale policy when users or skills are expected to support language choice rather than implicitly force one locale.
Detected: suspicious.exposed_secret_literal