T01 · Skill Instruction Hijacking
- Location
scripts/fetch_news.py:24- Finding
Indirect Prompt Injection Through Untrusted Article Content
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a real news-aggregation skill, but its deep-fetch mode retrieves untrusted article URLs and content without enough boundaries, which merits Review before installation.
Install only if you are comfortable with a news skill making outbound web requests and saving local report files. Avoid or sandbox --deep mode on networks with private services or cloud metadata access, and consider pinning dependencies and the install source before use.
scripts/fetch_news.py:24Indirect Prompt Injection Through Untrusted Article Content
scripts/fetch_news.py:24Server-Side Request Forgery Through Feed-Controlled Article URLs
requirements.txt:1Unpinned Dependencies and Mutable Remote Installation Sources
The README states the skill generates a Chinese daily/weekly report, which imposes a specific language on users. There is no nearby indication that users can choose another language or opt into Chinese output, so this conflicts with the language/locale policy criteria.
The README instructs users to install the skill via npx skills add https://github.com/cclank/news-aggregator-skill without pinning a specific version, commit, or release. That makes installation depend on mutable upstream content and the current skills package resolution, creating a supply-chain risk if the package or repository is compromised or updated unexpectedly.
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.
git clone git@github.com:cclank/news-aggregator-skill.git
# 2. 定位或创建项目的 skills 目录
mkdir -p YourProject/.claude/skills
# 3. 将整个文件夹复制过去
cp -r news-aggregator-skill YourProject/.claude/skills/
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.
git clone git@github.com:cclank/news-aggregator-skill.git
# 2. 定位或创建项目的 skills 目录
mkdir -p YourProject/.claude/skills
# 3. 将整个文件夹复制过去
cp -r news-aggregator-skill YourProject/.claude/skills/
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.
git clone git@github.com:cclank/news-aggregator-skill.git
# 2. 定位或创建项目的 skills 目录
mkdir -p YourProject/.claude/skills
# 3. 将整个文件夹复制过去
cp -r news-aggregator-skill YourProject/.claude/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.
cp -r news-aggregator-skill YourProject/.claude/skills/
ls YourProject/.claude/skills/news-aggregator-skill/SKILL.md
### 第二步:安装 Python 依赖(如果你的agent足够聪明,可以跳过)
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.
cp -r news-aggregator-skill YourProject/.claude/skills/
ls YourProject/.claude/skills/news-aggregator-skill/SKILL.md
### 第二步:安装 Python 依赖(如果你的agent足够聪明,可以跳过)
The skill invokes a network-capable script (fetch_news.py) but does not declare any explicit tool scope, permissions, or allowed-tools boundary. This weakens least-privilege controls and makes it harder for a host agent or reviewer to understand and constrain what the skill is permitted to access over the network.
The trigger phrase includes vague language like 'or similar menu/help triggers', which invites overly broad matching and accidental activation. In an agent setting, ambiguous triggers can cause the skill to run in contexts the user did not clearly intend, increasing the chance of unnecessary network access or file reads.
SQP-3 applies to all file types and covers language or locale policy violations. The instruction 'Language: Simplified Chinese' imposes a specific language requirement with no opt-in, alternative, or documented region-specific justification, which can conflict with organizational language-choice policies.
The skill requires saving reports to the local reports/ directory every time, but it does not warn the user or ask for consent before creating files. Mandatory disk writes can leak sensitive query topics, create unintended local artifacts, and violate expectations in environments where persistence should be explicit.
The default source map prominently includes Chinese platforms such as Weibo, 36Kr, Tencent News, and Wall Street CN, and the script can fetch all of them when the user does not specify a source. This imposes a locale/language choice in the skill behavior without offering the user an explicit language or region preference.
The menu and instruction text require interaction in Chinese ('请回复序号...') and all provided prompts are Chinese-only, without offering a language choice. This can violate language/locale policy when the skill does not explicitly let the user opt into Chinese or choose another language.
The '全网扫描(所有源)热点新闻' template encourages an unbounded, multi-source scan without user-specified limits such as topic, timeframe, result count, or cost controls. In an agent setting this can lead to excessive tool use, unnecessary data collection, long-running tasks, and increased spend or rate-limit exhaustion, especially because this skill aggregates eight external sources.
The dependency requests is unpinned, so installs may resolve to different versions over time, harming reproducibility and potentially pulling in a newly vulnerable or incompatible release. In a news aggregation skill that fetches remote content from many external sources, network-facing libraries are part of the attack surface, so lack of version control modestly increases supply-chain and reliability risk.
requests
beautifulsoup4
requests has multiple known advisories, and because no version is pinned, it is impossible to verify whether the deployed environment is using a fixed or vulnerable release. This is more concerning in a skill that performs outbound requests to many external sources, since issues in HTTP handling, redirect processing, or credential handling could be exposed through attacker-controlled URLs or responses.
The dependency beautifulsoup4 is also unpinned, which means future installs are non-deterministic and may unexpectedly introduce vulnerable or breaking releases. Because this skill parses content from multiple third-party news sources, parser behavior changes or vulnerable releases could affect security and stability when handling untrusted HTML.
requests
beautifulsoup4
No suspicious patterns detected.