Back to skill

Security audit

AIPM DeepNews Daily

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says: it fetches public AI news feeds, translates them to Chinese, and writes a local digest, with no evidence of hidden execution, credential access, or exfiltration.

Install this only if you are comfortable with automatic network access to the listed RSS feeds and with public article titles and summaries being sent to Google Translate. Treat the generated Markdown as untrusted news content, especially before feeding it to another agent or following links, and consider pinning dependencies before operational use.

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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:47
Finding
Unpinned Third-Party Dependency Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:47` **Vulnerability Type**: Software supply-chain risk from an unpinned dependency **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 installation command installs `feedparser` without an exact version constraint or package integrity hash. Consequently, the resolved package can change between installations without any corresponding change to the reviewed Skill. Although `googletrans` is version-pinned, it is pinned to a release-candidate version and neither dependency is verified using cryptographic hashes. Python package installation and subsequent imports may execute package-controlled code. A compromised package release, package-index account, dependency, or configured package repository could therefore introduce code that was not included in this audit. No evidence was found that either named package is currently malicious. The vulnerability is the mutable and unverifiable dependency installation process. ### Attack Path 1. An attacker compromises the package publisher, package-index account, upstream dependency, or package source used by `pip`. 2. The attacker publishes a malicious version that satisfies the unconstrained `feedparser` requirement, or replaces another dependency artifact available through the installation source. 3. A user follows the Setup command in `SKILL.md`. 4. `pip` downloads and installs the attacker-controlled artifact without validating it against an audit-approved hash. 5. Malicious package code runs during installation or when the application imports and invokes the dependency. ### Impact Assessment Malicious dependency code would execute with the privileges of the user running `pip` or the news-fetching script. Within those privileges, it could read or modify user-accessible files, access environment vari ...[truncated 326 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin every direct and transitive dependency to an exact, reviewed version. 2. Generate and commit a lock file containing cryptographic hashes for all artifacts. 3. Install with hash verification, such as `pip install --require-hashes -r requirements.txt`. 4. Replace the release-candidate translation package with a maintained stable dependency where feasible. 5. Configure `pip` to use only an approved package index over TLS. 6. Add automated dependency vulnerability and provenance scanning to the release process. 7. Re-review and regenerate the lock file whenever a dependency is upgraded. 8. Run the application in a minimally privileged virtual environment or container without unnecessary access to credentials or sensitive files. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
fetch_ai_news_improved.py:150
Finding
Untrusted RSS Content Is Emitted as Unsanitized Markdown<![CDATA[ ## Vulnerability Details **File Location**: `fetch_ai_news_improved.py:150-152, 203-208, 247-250` **Vulnerability Type**: Improper neutralization of externally controlled content in Markdown output **Risk Level**: Medium ### Vulnerable Code Remote RSS fields are accepted and only HTML-like tags are removed from the summary: ```python title = entry.get("title", "无标题") link = entry.get("link", "") summary = entry.get("summary", entry.get("description", "")) # 清理 HTML 标签 summary = re.sub(r"<[^>]+>", "", summary).strip() ``` The resulting external content is interpolated directly into Markdown: ```python for source, items in grouped.items(): lines.append(f"### 📌 {source}\n") for orig, trans in items: lines.append(f"**{trans['title']}**") if trans["summary"]: lines.append(f"> {trans['summary'][:200]}") if orig["link"]: lines.append(f"🔗 [原文链接]({orig['link']})") lines.append("") ``` The generated content is then written to disk and printed for downstream consumption: ```python # 保存到文件 OUTPUT_FILE.write_text(digest, encoding="utf-8") # 输出到 stdout(供 OpenClaw 读取) print(digest) ``` ### Technical Analysis Article titles, summaries, and links originate from remote RSS feeds. Removing substrings that resemble HTML tags with a regular expression does not neutralize Markdown syntax and does not validate link schemes or destinations. Titles are not sanitized at all, summaries retain Markdown control characters, and links are inserted directly into a Markdown URL context. A malicious or compromised feed could therefore inject headings, links, images, formatting boundaries, deceptive text, or instruction-like content into `latest_digest.md` and standard output. Translation does not provide a security boundary because translated content may preserve Markdown syntax or hostile semantic instructions. The output is documented as being consumed by OpenClaw. If a downstream AI agent treats article ...[truncated 1899 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Treat every RSS field as untrusted external data. 2. Escape Markdown metacharacters contextually in titles and summaries before interpolation, including backslashes, brackets, parentheses, emphasis markers, heading markers, and backticks. 3. Validate article links with a URL parser and allow only explicitly approved schemes such as `https` and, if required, `http`. 4. Reject malformed URLs and dangerous or unexpected schemes. 5. Use a maintained HTML parser and sanitizer rather than a regular expression if HTML input must be processed. 6. Render external article text inside clearly delimited data sections and label it as untrusted content. 7. Ensure downstream AI-agent instructions explicitly prohibit following commands or changing behavior based on text contained in fetched articles. 8. Apply least privilege to downstream agents and require confirmation for sensitive tool calls or external actions. 9. Add tests containing hostile Markdown, embedded images, nested links, malformed URLs, and prompt-injection phrases to verify that they remain inert. 10. Where supported, configure Markdown renderers to disable raw HTML and automatic loading of remote resources. ]]>
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
90% confidence
Finding
The skill advertises operational behavior that implies local file state such as deduplication caches and cleanup, yet it declares no explicit tool scope or permissions. This can cause users or orchestrators to underestimate that the skill may read/write local files, weakening transparency and consent around persistent state and filesystem access.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The skill is designed to automatically translate output into Chinese and presents this as default behavior without indicating user choice or opt-in. Automatic translation can transmit fetched content to an external translation service and can also alter meaning, creating privacy, compliance, and integrity risks for users who expected raw-source or untranslated output.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The module description states that it fetches AI news and translates it into Chinese, and the implementation hard-codes `dest="zh-cn"`. This imposes a specific language/locale without any apparent user opt-in or documented regional justification, which matches the language-policy violation criteria.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill fetches content from multiple external RSS feeds and then sends article titles and summaries to the googletrans service for translation, but there is no user-facing disclosure or consent flow explaining that content will be transmitted to third parties. This creates a privacy and transparency risk, especially because fetched content may include tracking URLs, unexpected sensitive text, or organizationally restricted material when the skill is repurposed or extended.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The skill description says it fetches from many RSS sources and uses translation services, but it does not prominently warn users that running it triggers automatic outbound network requests to numerous third parties. This is a transparency and privacy issue because queries, fetched content, metadata, or translated text may be sent to external services without explicit user awareness.

Static analysis

No suspicious patterns detected.