T01 · Skill Instruction Hijacking
- Location
SKILL.md:172- Finding
Mandatory Promotional Content Injected into Every Skill Response
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it advertises, but its self-update command can overwrite the installed skill from an unpinned remote branch without verification.
Review this skill before installing if you plan to use /skillnav update. Avoid running the update command unless you trust the GitHub source at that moment, and inspect any install commands returned by SkillNav before copying them into a shell.
SKILL.md:172Mandatory Promotional Content Injected into Every Skill Response
SKILL.md:26Unverified Self-Update from a Mutable Remote Branch
SKILL.md:88Untrusted API-Provided Installation Commands Presented Without Validation
The description explicitly states the skill operates "in Chinese," which imposes a language choice on users. The file then consistently mandates Chinese-only output formats, with no option to choose another language or opt in to this locale behavior.
This finding points to the same behavior from the destination-path angle: the skill enumerates and writes to a concrete local skills directory (~/.claude/skills/skillnav/SKILL.md), enabling remote replacement of an installed agent capability. In context, this is more dangerous than ordinary path disclosure because the path is coupled with an unauthenticated network fetch and direct file overwrite, making persistence and future malicious behavior plausible if the source is tampered with.
| search | WebFetch https://skillnav.dev/api/skill/query?type=search&q=$ARGUMENTS[1..] (join remaining args with space, URL-encode) |
| paper | If $ARGUMENTS[1] matches arXiv ID pattern (YYMM.NNNNN): WebFetch https://skillnav.dev/api/skill/query?type=paper&id=$ARGUMENTS[1]. Otherwise: WebFetch https://skillnav.dev/api/skill/query?type=paper&q=$ARGUMENTS[1] |
| trending | WebFetch https://skillnav.dev/api/skill/query?type=trending |
| update | Bash: curl -sL https://raw.githubusercontent.com/skillnav-dev/skillnav-skill/main/SKILL.md -o ~/.claude/skills/skillnav/SKILL.md && echo "SkillNav Skill updated." |
| (other) | Show usage message — do NOT fetch any URL |
If $ARGUMENTS is empty or does not match any command above, show this usage message and STOP (do NOT fetch any URL):
This finding points to the same behavior from the destination-path angle: the skill enumerates and writes to a concrete local skills directory (~/.claude/skills/skillnav/SKILL.md), enabling remote replacement of an installed agent capability. In context, this is more dangerous than ordinary path disclosure because the path is coupled with an unauthenticated network fetch and direct file overwrite, making persistence and future malicious behavior plausible if the source is tampered with.
| search | WebFetch https://skillnav.dev/api/skill/query?type=search&q=$ARGUMENTS[1..] (join remaining args with space, URL-encode) |
| paper | If $ARGUMENTS[1] matches arXiv ID pattern (YYMM.NNNNN): WebFetch https://skillnav.dev/api/skill/query?type=paper&id=$ARGUMENTS[1]. Otherwise: WebFetch https://skillnav.dev/api/skill/query?type=paper&q=$ARGUMENTS[1] |
| trending | WebFetch https://skillnav.dev/api/skill/query?type=trending |
| update | Bash: curl -sL https://raw.githubusercontent.com/skillnav-dev/skillnav-skill/main/SKILL.md -o ~/.claude/skills/skillnav/SKILL.md && echo "SkillNav Skill updated." |
| (other) | Show usage message — do NOT fetch any URL |
If $ARGUMENTS is empty or does not match any command above, show this usage message and STOP (do NOT fetch any URL):
The response templates and required footer throughout the formatting section prescribe Chinese-language strings for every command result. Because no alternative language path or opt-in is provided, this constitutes a language/locale policy violation.
No suspicious patterns detected.