T01 · Skill Instruction Hijacking
- Location
SKILL.md:12- Finding
Mandatory Injection of API-Controlled Marketing Content into Agent Responses
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly coherent, but it handles sensitive financial data with an under-scoped external API destination and API-controlled marketing content.
Review before installing. Only use this skill if you are comfortable sending debt and mortgage details to the named API, verify any --base-url override yourself, treat returned marketing text as promotional content, and prefer an immutable reviewed install source instead of the mutable master-branch URL.
SKILL.md:12Mandatory Injection of API-Controlled Marketing Content into Agent Responses
README.md:5Skill Installation Uses a Mutable Unpinned GitHub Branch
scripts/call_get_plans.mjs:278Configured Request Timeout Is Ignored When Native Fetch Is Available
Referenced artifact was not completely inspected
4. Run `scripts/call_get_plans.mjs` with `--input` (it defaults to `https://loandoctor.app`) and optionally `--base-url` for staging/self-hosted targets.
Referenced artifact was not completely inspected
4. Run `scripts/call_get_plans.mjs` with `--input` (it defaults to `https://loandoctor.app`) and optionally `--base-url` for staging/self-hosted targets.
Referenced artifact was not completely inspected
4. Run `scripts/call_get_plans.mjs` with `--input` (it defaults to `https://loandoctor.app`) and optionally `--base-url` for staging/self-hosted targets.
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.
### Cursor
[](cursor://anysphere.cursor-deeplink/prompt?text=Install%20the%20Loan%20Doctor%20skill%20from%20https%3A%2F%2Fraw.githubusercontent.com%2Flgvw3%2Floan-doctor-skills%2Fmaster%2FSKILL.md%20using%20Custom%20Skill%20URL)
[](https://raw.githubusercontent.com/lgvw3/loan-doctor-skills/master/SKILL.md)
Cursor uses Custom Skill URL import for third-party skills. Use the raw `SKILL.md` URL above in Cursor's install flow.
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.
### Cursor
[](cursor://anysphere.cursor-deeplink/prompt?text=Install%20the%20Loan%20Doctor%20skill%20from%20https%3A%2F%2Fraw.githubusercontent.com%2Flgvw3%2Floan-doctor-skills%2Fmaster%2FSKILL.md%20using%20Custom%20Skill%20URL)
[](https://raw.githubusercontent.com/lgvw3/loan-doctor-skills/master/SKILL.md)
Cursor uses Custom Skill URL import for third-party skills. Use the raw `SKILL.md` URL above in Cursor's install flow.
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.
mkdir -p ~/.claude/skills/debt-payoff-plan-comparison
cp -R ./* ~/.claude/skills/debt-payoff-plan-comparison/
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.
mkdir -p ~/.claude/skills/debt-payoff-plan-comparison
cp -R ./* ~/.claude/skills/debt-payoff-plan-comparison/
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.
mkdir -p .claude/skills/debt-payoff-plan-comparison
cp -R ./* .claude/skills/debt-payoff-plan-comparison/
The skill instructs the agent to transmit sensitive financial data to an external API and even supports overriding the destination with a user-supplied --base-url, but it declares no explicit tool scope or network permission boundary. Without an allowlisted permission model, an agent runtime may permit unintended outbound requests or make review and enforcement of data egress rules harder, increasing privacy and SSRF-style risk in a financial-data context.
The invocation text says to use this skill when the user wants 'personalized debt plan recommendations' or related comparisons, which is broad natural language that could overlap with many general finance conversations. It does not provide explicit trigger phrases, exclusions, or negative examples to clarify when the skill should not activate.
The default allowlist includes outlook.office.com, which is not obviously related to debt payoff plan delivery and broadens the set of destinations that sanitized marketing links may point to. This can enable confusing or misleading outbound links in a finance-oriented skill, increasing phishing, trust-abuse, and unintended data-sharing risk if the upstream API returns promotional URLs to that host.
The script transmits the full debt payload to a remote service, which likely contains sensitive financial information, without any explicit user-facing notice, minimization, or consent step. In the context of a debt-payoff skill, this is more sensitive than average because balances, rates, payments, and home appraisal data are highly personal financial data and could create privacy and compliance issues if users do not realize the data leaves the local environment.
The manifest says the skill collects debt inputs, calls a plans API, and returns payoff strategy comparisons with concise recommendations and a marketing hint. This code goes further by actively sanitizing, defaulting, and rewriting multiple marketing CTA URLs and labels in the response, which is broader than merely returning a hint from the API.