Back to skill

Security audit

AI Intel Daily

Security checks for vulnerabilities and agentic risk

Overview

This skill coherently fetches public AI news, translates it to Chinese, and writes a local digest, with some ordinary integration risks to review before use.

Install this only if you are comfortable with outbound network access to the listed RSS sources and Google Translate. Treat generated article text and links as untrusted external content, and consider pinning dependencies and adding Markdown escaping or URL validation before using it in automated agent workflows.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
fetch_ai_news_improved.py:153
Finding
Untrusted RSS Content Is Rendered as Agent-Facing Markdown Without Neutralization## Vulnerability Details **File Location**: `fetch_ai_news_improved.py`, lines 153-155 and 217-221 **Vulnerability Type**: Indirect prompt injection and unsafe Markdown generation **Risk Level**: Medium ### Vulnerable Code ```python title = entry.get("title", "无标题") link = entry.get("link", "") summary = entry.get("summary", entry.get("description", "")) ``` ```python lines.append(f"**{trans['title']}**") if trans["summary"]: lines.append(f"> {trans['summary'][:200]}") if orig["link"]: lines.append(f"🔗 [原文链接]({orig['link']})") ``` ### Technical Analysis Article titles, summaries, and links originate from external RSS feeds. These values are incorporated into the generated Markdown without escaping Markdown control characters or validating URL schemes. Although HTML tags are removed from summaries elsewhere in the script, HTML removal does not neutralize Markdown syntax, instruction-like text, embedded links, or malformed link destinations. Titles and summaries are also sent through translation, but translation is not a security boundary and may preserve attacker-controlled instructions and formatting. The generated digest is written to `latest_digest.md` and printed to standard output for OpenClaw consumption. Consequently, external feed content can cross from an untrusted network source into an agent-facing context. A downstream AI agent could interpret malicious article content as instructions instead of treating it exclusively as quoted data. ### Attack Path 1. An attacker gains control of, compromises, or successfully submits content to one of the configured RSS sources. 2. The attacker publishes an article with a crafted title, summary, or link containing Markdown manipulation, instruction-like content, or a deceptive URL. 3. `fetch_feeds()` retrieves the crafted RSS entry and stores its fields without Markdown escaping or URL-scheme validation. 4. The title and summary pass through the translation service, which may preserve the malicious ...[truncated 1054 chars]
Remediation
## Remediation Suggestions 1. Treat every RSS field as untrusted data and explicitly separate it from agent instructions. 2. Escape Markdown metacharacters in titles and summaries before rendering them. 3. Validate article URLs with a strict parser and allow only expected schemes such as `https` and, if required, `http`. 4. Reject control characters, malformed URLs, and dangerous or unexpected schemes such as `javascript`, `data`, and `file`. 5. Place external article content inside clearly delimited data sections with an explicit statement that downstream agents must not follow instructions contained in those sections. 6. Consider producing structured JSON for agent consumption instead of free-form Markdown, with fields marked as untrusted external content. 7. Apply length limits before sending content to translation and again after translation. 8. Configure downstream agents not to execute commands, invoke tools, disclose data, or alter objectives based solely on instructions found in fetched articles.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:51
Finding
Dependency Installation Is Not Fully Version-Locked or Integrity-Verified## Vulnerability Details **File Location**: `SKILL.md`, line 51 **Vulnerability Type**: Unpinned and integrity-unverified third-party dependencies **Risk Level**: Medium ### Vulnerable Code ```bash cd skills/aipm-news-digest && python3 -m venv venv && ./venv/bin/pip install feedparser googletrans==4.0.0-rc1 ``` ### Technical Analysis The documented setup command installs `feedparser` without a version constraint. This means the installed code can change over time without any corresponding change to the audited project. The `googletrans` dependency is version-pinned, but it uses a release-candidate version and is not protected by a cryptographic hash. Neither dependency is installed from a hash-locked requirements file. Package installation can execute package build or installation logic under the privileges of the user running `pip`. This creates a supply-chain exposure: the source code reviewed during this audit does not fully determine the dependency code that users will execute when following the setup instructions. No evidence was found that either named package is currently malicious; the issue is the absence of reproducible version and integrity controls. ### Attack Path 1. A user follows the installation command in `SKILL.md`. 2. `pip` resolves the current available version of the unpinned `feedparser` package and downloads distributions without checking project-maintained hashes. 3. If the package index, dependency account, release artifact, or a future resolved release is compromised, malicious installation or runtime code is delivered. 4. The malicious package code executes during installation or when imported by `fetch_ai_news_improved.py`. 5. The code runs with the permissions of the user invoking the setup command or script. ### Impact Assessment Successful exploitation would provide code execution with the privileges of the installing or running user. The potential scope includes files, environment variables, network acces ...[truncated 402 chars]
Remediation
## Remediation Suggestions 1. Pin every direct and transitive dependency to an audited exact version. 2. Maintain a lock file or requirements file containing cryptographic hashes for all distributions. 3. Install dependencies with hash enforcement, such as `pip install --require-hashes -r requirements.txt`. 4. Prefer maintained stable releases over release-candidate packages where practical. 5. Review dependency metadata, maintainers, release history, and known vulnerability advisories before updating locked versions. 6. Perform dependency updates through a controlled review process rather than resolving the newest package at installation time. 7. Use a trusted package index and consider restricting outbound package resolution in production environments. 8. Run installation and execution as a dedicated, least-privileged user or inside an appropriately isolated environment.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The description states the skill 'Auto-translates to Chinese', which imposes a specific language behavior by default. Under the policy, forcing a language/locale without user opt-in is a natural-language policy violation unless the constraint is explicitly justified or optional.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
This line says the tool fetches news and '翻译成中文摘要' (translates into Chinese summaries), presenting Chinese as the fixed output language. There is no indication that users may opt for another language or disable translation, which conflicts with the language/locale policy.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The file description says it translates AI news into Chinese, and the translation call hard-codes the destination locale to zh-cn. This imposes a specific language choice without any visible opt-in or alternative, which matches the language/locale policy violation criteria.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code sends every fetched article title and summary to googletrans, which relies on an external translation service, without any disclosure, consent, or configuration to disable that transfer. Even though the RSS content is generally public, outbound transmission of aggregated content may violate user expectations, organizational data-handling rules, or network egress policies, especially in enterprise environments.

Static analysis

No suspicious patterns detected.