Back to skill

Security audit

newsnow-reader

Security checks for vulnerabilities and agentic risk

Overview

The skill does fetch hot-news data, but it needs review because it automatically creates or collects cookies and also contacts an undocumented news endpoint.

Review before installing. Use this only if you are comfortable with third-party news sites receiving request metadata from your environment and with the skill automatically generating or acquiring cookies for platform access. Avoid running it from sensitive networks or proxies unless the Jin10 endpoint and cookie behavior are acceptable under your policies.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Note
Location
scripts/fetch_news.py:383
Finding
Undocumented Outbound Network Access to Jin10## Vulnerability Details **File Location**: `scripts/fetch_news.py:383`, `scripts/fetch_news.py:509` **Vulnerability Type**: Undocumented outbound network access **Risk Level**: Low ### Complete Code Snippet ```python def fetch_jin10_news(limit=20): """Fetch Jin10 flash news directly from API (newsnow-style)""" try: timestamp = int(time.time() * 1000) url = f"https://www.jin10.com/flash_newest.js?t={timestamp}" raw_data = http_request(url, timeout=30) ``` ```python fetchers = { "weibo": fetch_weibo_hot, "zhihu": fetch_zhihu_hot, "baidu": fetch_baidu_hot, "douyin": fetch_douyin_hot, "wallstreetcn": fetch_wallstreetcn_hot, "toutiao": fetch_toutiao_hot, "jin10": fetch_jin10_news, "thepaper": fetch_thepaper_hot, } ``` ### Technical Analysis The dispatcher accepts `jin10` as a source and invokes `fetch_jin10_news`, which sends an HTTPS request to `www.jin10.com`. However, `SKILL.md` does not identify Jin10 as a supported source and does not include `www.jin10.com` or `flash.jin10.com` in its network-request disclosure table. This creates a mismatch between the documented and actual outbound network behavior. It also contradicts the documentation's assertion that the Skill has no unexpected outbound endpoints. The request retrieves news data rather than executable code, so this finding is not remote payload execution. ### Attack Path 1. A user or agent invokes `scripts/fetch_news.py` with `jin10` as the source. 2. `fetch_news()` resolves the source through the `fetchers` dictionary. 3. `fetch_jin10_news()` constructs a URL under `https://www.jin10.com/`. 4. `http_request()` sends an outbound HTTPS request to the undocumented third party. 5. Jin10 receives network metadata including the source IP, request timestamp, and User-Agent. 6. Returned data is parsed and emitted as news output. ### Impact Assessment The issue does not provide local code execution, elevated privileges, persistence, or ac ...[truncated 300 chars]
Remediation
## Remediation Suggestions 1. Add Jin10 to the documented supported-source table and usage examples in `SKILL.md`. 2. Add `www.jin10.com` and `flash.jin10.com` to the network-request disclosure table. 3. Revise the claim that there are no unexpected outbound endpoints so it accurately reflects all implemented behavior. 4. Alternatively, remove `fetch_jin10_news` and its dispatcher entry if Jin10 is not intended to be supported. 5. Implement an explicit hostname allowlist in `http_request()` and keep it synchronized with the documented endpoint inventory. 6. Add an automated test that extracts outbound hostnames from the implementation and compares them with the documented allowlist.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
声明描述强调这是一个可用于阅读实时热门新闻、并支持多个指定平台的技能。但给定代码片段的实际作用只是接收现成的新闻数据(字符串或本地 JSON 文件),将其格式化为更美观的文本,或生成前 5 条摘要。代码中没有任何网络请求、平台 API 调用、爬取逻辑、数据源适配、平台区分处理或实时更新能力。因此,代码实现的核心能力只是“新闻数据展示格式化”,而不是声明所暗示的“支持多个平台的实时热门新闻读取/聚合”。这是目的和能力上的实质性不一致。

Missing User Warnings

High
Confidence
96% confidence
Finding
This code silently collects cookies from Douyin's login infrastructure and forwards them in subsequent requests without any clear user notice or consent. Because cookies are credential-like session artifacts, this creates a meaningful trust and privacy/security risk beyond ordinary content fetching.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill explicitly describes and encourages outbound HTTP requests to multiple third-party domains, but it does not declare any tool scope or permissions boundary for network access. This creates a transparency and governance gap: a reviewer or execution framework cannot easily constrain or pre-approve the network behavior, which is especially relevant because the skill also discusses automatic cookie generation/acquisition and operation in sensitive environments.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The manifest description and the entire user-facing documentation are written only in Chinese, with no indication that other languages are supported or that the user can choose their preferred locale. Under the policy for natural-language violations, a skill that effectively enforces a specific language without opt-in should be flagged unless the locale restriction is justified and documented.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
This code is not merely fetching public content; it adds behavior specifically intended to evade anti-scraping controls. In the context of a news reader, that makes the skill riskier because it normalizes covert access workarounds and may expose users or operators to account, platform, or compliance consequences.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The helper deliberately fabricates a cookie value and the surrounding comments explicitly state it is meant to avoid anti-scraping detection. Even though it does not steal a real credential, it implements access-evasion behavior inconsistent with a simple news-reading skill and can facilitate policy/TOS circumvention against the remote service.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
This code file makes outbound HTTP requests to several external domains via the shared request helper, which can transmit the user's IP, user agent, and request metadata. Although the code has error logging, it does not include any user disclosure, confirmation, or warning comment/docstring indicating that external network access will occur across these providers.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The Douyin fetcher performs an additional request to a login domain solely to obtain Set-Cookie values and then replays them to another endpoint. Harvesting and forwarding session-like cookies is credential-adjacent behavior and goes beyond what users would reasonably expect from a news-reading skill.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This Python file contains multiple user-facing strings in Chinese, such as fallback messages and formatted news headers, and does not provide any user opt-in or locale selection. That can violate language/locale policy because the skill effectively forces a specific language for its output.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The summary function returns Chinese-only status and heading text, again without any indication that the user can choose another language or that the skill is region-specific. This is a natural-language policy concern rather than a code security issue.

Natural-Language Policy Violations

Low
Confidence
90% confidence
Finding
This file includes user-facing natural-language strings such as Chinese labels and descriptions, but it does not provide any mechanism to choose language or locale. That can violate language/locale policy when a skill forces a specific language without user opt-in.

Static analysis

No suspicious patterns detected.