Back to skill

Security audit

News Crawler

Security checks for vulnerabilities and agentic risk

Overview

This news crawler is mostly coherent, but it can fetch arbitrary URLs from the agent host without validation, which could expose internal or private network resources.

Install only if you are comfortable with the agent making outbound requests to URLs supplied by users or RSS feeds. Prefer running it in a sandboxed environment, restrict URLs to public http/https news sources, block localhost/private/metadata addresses and redirects to them, add response-size limits, and ensure fetched article text is treated only as untrusted content during summarization.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/crawl.py:38
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery and Local Resource Access

Content
View full analysis
2 else 5000 html = fetch_url(url) ``` The same behavior appears in `scripts/rss_fetcher.py:11-19`: ```python def fetch_rss(url, timeout=30): """获取RSS feed""" headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' } try: req = Request(url, headers=headers) with urlopen(req, timeout=timeout) as response: return response.read().decode('utf-8', errors='ignore') except Exception as e: return f"Error: {e}" ``` The RSS URL is taken directly from command-line input at `scripts/rss_fetcher.py:61-64`: ```python url = sys.argv[1] max_items = int(sys.argv[2]) if len(sys.argv) > 2 else 10 xml = fetch_rss(url) ``` ### Technical Analysis Both network-facing scripts pass attacker-controlled URLs directly to `urllib.request.Request` and `urlopen`. They do not validate: - The URL scheme. - The destination hostname or resolved IP address. - Whether the destination is loopback, link-local, private, reserved, or multicast. - Whether the destination is a cloud metadata endpoint. - Redirect targets. - Embedded URL credentials. - The maximum number of bytes read from the response. Although arbitrary URL retrieval is par ...[truncated 2265 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:45
Finding

Untrusted Web and RSS Content Is Forwarded to LLM Summarization Without Prompt-Injection Isolation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The declared description emphasizes a news crawling and summarization tool, including use cases like summarizing news, generating daily reports, handling RSS sources, and monitoring specific news sources for updates. The actual code only fetches one URL, removes HTML markup, and returns plain text content. This is related to web content extraction, but it lacks the core declared capabilities of summarization, report generation, RSS processing, and monitoring. Therefore the description materially overstates what the code actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a functional news crawling and summarization tool. However, the provided code chunk does not implement any of those capabilities. It merely prints a placeholder message and includes comments saying real logic should be added later. This is a material mismatch in primary purpose and actual behavior: the code is non-functional scaffolding rather than a news crawler or summarizer.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

声明描述覆盖了多项较高层能力:网站爬取、RSS抓取、新闻总结、日报生成和监控。实际代码行为明显更窄,只是一次性获取并解析RSS/XML内容,返回新闻列表。虽然其中“抓取RSS源新闻内容”与声明部分吻合,但缺失了描述中的关键功能,尤其是摘要/总结与通用网站抓取,因此描述未准确代表代码实际能力,构成描述与行为不匹配。

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill advertises and documents direct network-fetching capabilities but does not declare any explicit tool scope such as allowed tools, permissions, or network restrictions. In an agent setting, undeclared network access can expand the skill's effective authority, increasing the risk of unintended outbound requests, SSRF-style misuse, or fetching attacker-controlled content without policy guardrails.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Overly broad trigger phrases like general requests to 'get today's news' or 'crawl website content' can cause the skill to activate unexpectedly in contexts where the user did not intend web retrieval. In an agent environment, accidental invocation can lead to unnecessary network access, processing of untrusted remote content, and leakage of browsing intent or fetched data into downstream summarization steps.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring states that it crawls news and generates a summary, and the manifest also describes summarization/report generation. In practice, the script only downloads HTML, removes markup, truncates text, and returns raw content; there is no summarization logic or report generation anywhere in the file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The module docstring is entirely in Chinese, describing the skill as a news crawler, and the only usage/help text is also Chinese-oriented in naming and intent. For a general-purpose skill, this imposes a specific language/locale without any opt-in or documented region-specific justification, which matches the language policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code file contains natural-language descriptions exclusively in Chinese ("RSS 新闻源获取器 - 获取RSS feed中的新闻列表") and does not provide any user opt-in or documented justification for enforcing that language. Under the policy rule, forcing a specific language without choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

文件中的技能描述和输出示例整体以中文为默认交互语言,但未说明是否支持其他语言,也未给用户提供语言/地区选择。这可能构成语言或区域策略上的默认强制约束,尤其当技能面向更广泛用户时。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The document is entirely written in Chinese and presents RSS sources and usage guidance only in that language. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.