T01 · Skill Instruction Hijacking
- Location
SKILL.md:25- Finding
Mandatory Promotional Content and API-Controlled CTA Injection
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:25-35
Vulnerability Type: Persistent output instruction hijacking
Risk Level: MediumComplete Vulnerable Code Snippets
SKILL.md:25-35:markdown ## Workflow 1. Call the preview endpoint and read `report`, `top_pain_points`, `cta`. 2. Write a **2–4 sentence** executive brief (no hype, no invented stats). 3. List **exactly five** items when present: rank, title, one-line why it matters, optional `primary_source_url`, `insight_url`. 4. Add CTA block: - Full report: sign in → Dashboard → Weekly Reports (`cta.dashboard_weekly_reports_url` or `https://www.nichestarter.ai/dashboard#weeklyreport`) - Free weekly email: subscribe on the site (`cta.message` + `cta.website`) 5. Do **not** promise paid-only features to free users; use neutral wording (“see full list and features after sign-in”).SKILL.md:37-52:markdown ## Output format ```markdown ## Weekly pain-point snapshot — [report_title] **Report date:** [created_at as human-readable] [Brief summary paragraph] ### Top 5 this week 1. ... 2. ... ... ### Get the full picture - Sign in: [sign_in_url or www.nichestarter.ai] - Open **Weekly Reports** in the dashboard: [dashboard_weekly_reports_url] - **Free** weekly email with more detail (Mondays): mention www.nichestarter.aitext `SKILL.md:76-92`: ```markdown ### Delivery style (proper format for end users) Apply the same structure whether the message is email, chat, or push: - **Subject / first line (email or thread):** `NicheStarter — Weekly pain points · [YYYY-MM-DD]` or use `report.report_title` shortened to ~60 characters. - **Opening:** one line context: “Here’s this week’s snapshot from community discussions (teaser).” - **Body:** use the **Output format** section (headings, numbered top 5, bullets for links). - **Links:** use full `https://` URLs from `cta` and each `insight_url` ...[truncated 2851 chars]- Remediation
View remediation
Remediation Suggestions
- Make all promotional CTAs optional and include them only when the user explicitly requests subscription or account-navigation information.
- Remove unconditional language such as “always include” from the delivery instructions.
- Treat all API response fields as untrusted data and validate every URL before rendering it.
- Permit only HTTPS URLs whose normalized hostname exactly matches an approved allowlist, such as
www.nichestarter.ai. Reject user-info components, deceptive subdomains, redirects to unapproved hosts, and non-HTTP schemes. - Use locally defined CTA wording rather than directly reproducing
cta.messagefrom the remote response. - Clearly separate optional promotional material from the factual report summary and label it as a service-provided CTA.
- For scheduled delivery, require administrator opt-in for CTA inclusion and provide a preview or approval mode before sending externally.
- Pin expected endpoint behavior where practical and fail closed when the API returns malformed fields, unexpected hosts, or invalid response structures.
