Back to skill

Security audit

BBC Vietnamese Trendy News

Security checks for vulnerabilities and agentic risk

Overview

This news skill appears non-destructive, but it overstates its news coverage and runs local code plus unpinned package installs for broad news requests.

Review before installing. This skill does not show exfiltration or destructive behavior, but users should expect it to run a local Python script, fetch BBC Vietnamese RSS content, and install mutable Python dependencies. It should be tightened by accurately describing its source and locale, pinning and reducing dependencies, and treating fetched RSS entries as untrusted external reports rather than verified data.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding
Unpinned and Unnecessary Third-Party Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:1-4`; installation instruction at `SKILL.md:42-46` **Vulnerability Type**: Supply-chain exposure through mutable, unpinned dependencies **Risk Level**: Medium ### Evidence `requirements.txt:1-4`: ```text beautifulsoup4 bs4 requests feedparser ``` `SKILL.md:42-46`: ```bash conda activate global_venv pip install -r "{baseDir}/requirements.txt" ``` ### Technical Analysis All dependencies are specified without exact versions or integrity hashes. Running the documented installation command therefore retrieves whichever releases the package index resolves at installation time. The effective installed code can change after the Skill has been reviewed. Only `feedparser` is used by `daily_news.py`. Although `requests`, `beautifulsoup4`, and the `bs4` wrapper are declared, the script does not use them. These unnecessary dependencies expand the supply-chain attack surface beyond what is required for the declared news-fetching functionality. There is no evidence that the currently named packages are malicious. The vulnerability is the unsafe dependency-management process: a compromised package release, package-index account, resolution source, or transitive dependency could introduce arbitrary installation or runtime behavior. ### Attack Path 1. An attacker compromises a declared package, one of its transitive dependencies, or its package-index publishing channel. 2. The attacker publishes a malicious release that remains compatible with the unconstrained requirement. 3. A user follows the setup instruction and executes `pip install -r requirements.txt`. 4. The package manager resolves and installs the attacker-controlled release. 5. Malicious package installation or import-time code executes with the same operating-system privileges and environment access as the user running setup or the Skill. ### Impact Assessment Successful exploitation could execute arbitrary code under the installing ...[truncated 309 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove dependencies unused by `daily_news.py`, including `beautifulsoup4`, `bs4`, and `requests`. 2. Pin `feedparser` to a specifically reviewed version rather than allowing unrestricted resolution. 3. Generate a lockfile or hashed requirements file and require package hashes during installation, for example with `pip install --require-hashes`. 4. Review and pin transitive dependencies where applicable. 5. Install from a trusted, explicitly configured package index and prevent fallback to untrusted indexes. 6. Run dependency installation and the Skill in an isolated, non-privileged environment with no unnecessary secrets. 7. Add automated dependency vulnerability and provenance checks to the release process. ]]>

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:15
Finding
Remote RSS Content Is Incorrectly Treated as Verified Agent Input<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:15`; related data flow at `daily_news.py:17,29-34,59` **Vulnerability Type**: Unsafe trust of remote content used in an Agent session **Risk Level**: Medium ### Evidence `SKILL.md:15`: ```text The agent must treat the script output as verified headline data and avoid modifying the factual content. ``` `daily_news.py:17`: ```python feed = feedparser.parse(url) ``` `daily_news.py:29-34`: ```python news_item = { "title": entry.title, "link": entry.link, "published": entry.published if hasattr(entry, "published") else None, "summary": entry.summary if 'summary' in entry else "Không có tóm tắt" } news_list.append(news_item) ``` `daily_news.py:59`: ```python url = "https://feeds.bbci.co.uk/vietnamese/rss.xml" ``` ### Technical Analysis The script retrieves an external RSS document and places its title, link, summary, and publication fields directly into Agent-visible output. The Skill instruction simultaneously directs the Agent to regard that output as verified headline data. Remote content is a trust boundary and must be handled as untrusted data even when obtained over HTTPS from a reputable, fixed endpoint. HTTPS authenticates the contacted server and protects transport integrity, but it does not guarantee that every feed entry is accurate, safe, or free from instruction-like content. A source compromise, upstream publishing error, or maliciously crafted syndicated entry could place directives or misleading claims in the fields processed by the Agent. The code does not separate remote values from instructions using a strict structured-data boundary, and the Skill does not tell the Agent to ignore directives embedded in feed content. This creates a prompt-injection and response-integrity risk. The fixed BBC endpoint reduces likelihood, but the instruction to treat all output as verified unnecessarily amplifies the impact. ### Attack Path 1. An attacker gains the ability t ...[truncated 1305 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the instruction that all script output must be treated as verified. 2. Explicitly state that RSS titles, summaries, links, and other fetched fields are untrusted data and must never be interpreted as Agent instructions. 3. Require the Agent to ignore any commands, role changes, tool requests, or policy statements embedded in fetched content. 4. Serialize output as strict JSON and clearly delimit remote fields from trusted Skill instructions. 5. Validate links and expected field types, impose size limits, and strip active markup before passing content to the Agent. 6. Present the source and publication time to users and describe fetched claims as externally reported rather than independently verified. 7. Where factual verification is important, corroborate important claims against independent trusted sources before presenting them as confirmed. 8. Restrict the Agent's available tools and permissions while processing remote content so successful prompt injection cannot trigger unrelated sensitive actions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill claims to provide latest global or breaking news, but the instructions indicate it uses a specific BBC Vietnamese source and undisclosed network behavior. This mismatch can mislead users and reviewers about both the breadth of content and the external access being performed, increasing the risk of unauthorized or unexpected data retrieval.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill invokes a Python script that fetches external news content, which implies network access, but it declares no permissions or allowed-tools scope. This weakens policy enforcement and transparency, making it easier for the skill to perform external data access without explicit review or user expectation.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The skill hardcodes BBC News Tiếng Việt as the source without asking the user to opt into that locale or language preference. While not inherently malicious, this can produce misleading or inappropriate results for users expecting general global news in another language, and it obscures the actual source constraints.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The activation condition covers generic requests for latest or trending news, which are common and can cause the skill to run in many normal conversations without clear user intent for external fetching. Broad triggering increases the chance of unnecessary subprocess and network execution, expanding exposure and making misuse or surprise activation more likely.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill directs the agent to execute a subprocess through conda/python without any user-facing notice that code will run and external content will be fetched. Hidden execution reduces informed consent and auditability, and if the runtime or script is modified, the agent may execute unintended behavior under the guise of a routine news request.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This file hard-codes Vietnamese content sources and emits mixed Vietnamese/English user-facing text, including Vietnamese error/log strings and a Vietnam-specific BBC RSS feed URL. There is no option for the user to choose language or locale, which creates a natural-language policy concern under the language/locale rule.

Unpinned Dependencies

Low
Category
Supply Chain
Content
beautifulsoup4
bs4
requests
feedparser
Confidence
97% confidence
Finding
The dependency is declared without a version pin, which makes builds non-reproducible and can cause the environment to resolve to vulnerable or incompatible releases over time. In a news-fetching skill that relies on external parsing libraries, this increases supply-chain risk even if no specific exploit is proven from this file alone.

Unpinned Dependencies

Low
Category
Supply Chain
Content
beautifulsoup4
bs4
requests
feedparser
Confidence
96% confidence
Finding
The bs4 requirement is unpinned, so installations may pull different versions at different times, reducing reproducibility and making it harder to verify whether known security fixes are present. This is a supply-chain hygiene issue rather than direct malicious behavior.

Unpinned Dependencies

Low
Category
Supply Chain
Content
beautifulsoup4
bs4
requests
feedparser
Confidence
99% confidence
Finding
Requests is unpinned, which means deployments may resolve to a release containing known vulnerabilities or behavioral regressions. Because this skill fetches remote content from the internet, leaving the HTTP client version unconstrained increases exposure to request-handling flaws and credential-leak bugs.

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
98% confidence
Finding
The file declares requests without a version, and that package has multiple known advisories across releases. Because the version is unverifiable, it is impossible to determine from this manifest whether a safe or vulnerable release will be installed, which is especially relevant for a skill that makes outbound network requests.

Unpinned Dependencies

Low
Category
Supply Chain
Content
beautifulsoup4
bs4
requests
feedparser
Confidence
98% confidence
Finding
Feedparser is unpinned, so the installed version may vary and could include releases affected by known parsing-related vulnerabilities. Since this skill processes external news feeds, an outdated or vulnerable parser could increase risk from maliciously crafted feed content.

Unverifiable Dependency: feedparser has 10 known advisory(ies) (CVE-2011-1157 (feedparser Cross-site Scripting vulnerability); CVE-2009-5065 (feedparser Cross-site Scripting vulnerability); CVE-2011-1158 (feedparser Cross-site Scripting vulnerability) +7 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
98% confidence
Finding
Feedparser has known historical advisories, but this manifest does not pin a version, so a vulnerable release could be installed without visibility. In a news skill that ingests untrusted external feeds, parser vulnerabilities are more concerning because attackers may control feed content.

Static analysis

No suspicious patterns detected.