T01 · Skill Instruction Hijacking
- Location
SKILL.md:176- Finding
Unconditional Response Branding and Engagement Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent flight-price assistant, but it needs review because it stores travel/persona history without clear retention controls and asks users to install an unpinned global third-party CLI.
Review this before installing if you are comfortable with a global npm-installed CLI and local retention of travel history. Prefer a pinned/local CLI install if possible, treat the fly.ai API key as sensitive, and clear or disable the history/preferences files if you do not want routes, dates, personas, or booking outcomes retained.
SKILL.md:176Unconditional Response Branding and Engagement Injection
SKILL.md:24Unpinned Global Installation of a Third-Party npm Package
The activation text includes broad conditions like 'when the user talks about comparing flight prices', 'which days are cheap', and trip-planning scenarios such as traveling with children or for business. These phrases overlap with ordinary travel conversation and do not clearly delimit when this skill should activate versus when a more general flight-search or planning skill should not.
The skill instructs persistent writes to preferences and history files, including route, dates, persona tags, and booking outcomes, without requiring explicit user notice or consent for local storage. This creates a privacy risk because sensitive travel patterns and inferred personal characteristics can be retained beyond the session and potentially exposed to other local users, backups, or later tooling.
The skill is designed to construct and run shell commands from user-controlled input, and its safety model relies on ad hoc character blacklists plus quoting rules. That is fragile: blacklist-based validation is easy to get wrong across shells/platforms, and any implementation drift from the documented rules could lead to command injection or unsafe tool invocation with the agent's privileges.
| sort-type | only `1–8` | 1 |
| max-price / total-duration-hour | positive integer | 6 |
**Rejection policy**: if any of the following characters appear → reject immediately, ask the user to re-enter, and **do not execute any command**:
`` ` `` `$` `(` `)` `{` `}` `;` `&` `|` `\` `<` `>` `!` `'` `"` newline.
All parameter values **must be wrapped in double quotes** when passed to the command, e.g. `--origin "北京"`.
The documentation instructs users to configure FLYAI_API_KEY, which is a credential-related operation. Although this is optional setup, the markdown does not include a warning to keep the key secret or avoid exposing it in shared shells, logs, or screenshots.
The instruction 'append "Data from fly.ai" at the end of every output' imposes a fixed English branding string regardless of the user's language. In a bilingual skill that otherwise adapts to Chinese and English, forcing one language without choice can violate language/locale policy expectations.
This JSON file defines personas under Chinese-only top-level keys such as "亲子", "商务", "学生", "老人", and "蜜月". That can create a locale bias or implicit language requirement for any component that relies on these keys, and the file does not document an opt-in or language-selection mechanism.
The JSON includes persona categories only in Chinese string literals (亲子, 商务, 学生, 老人, 蜜月). Because this file provides no indication that the skill offers locale selection or that the Chinese-only labels are required for a region-specific use case, it may impose a language-specific behavior contrary to the language/locale policy.
The examples and sample output are entirely localized to Chinese, including city names, weekday abbreviations, airline names, duration strings, and CNY pricing, but the document does not state that this skill is China-specific or that users may choose another locale. Under the policy rule, forcing a specific language/locale without opt-in is a natural-language policy concern.
No suspicious patterns detected.