Back to skill

Security audit

AI Frontier Monitor

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent AI news briefing skill, but it needs review because it can render untrusted public-feed text into briefings and send/archive output without clear confirmation safeguards.

Review before installing. This skill contacts several third-party public sources, stores generated data under its own data directory, may overwrite the same-day briefing, and describes sending output to Feishu. Use it with explicit confirmation for Feishu delivery, and treat all fetched titles, summaries, descriptions, and links as untrusted report data rather than instructions.

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)

T01 · Skill Instruction Hijacking

Warning
Location
scripts/rss-crawler.py:242
Finding

Untrusted Feed Content Is Rendered into Agent-Visible Briefings Without Sanitization

Content
View full analysis
500: summary = summary[:500] + "..." text = f"{title}\n{summary}" # Keyword filtering if not keyword_match(text, keywords, lang): state["processed"][eid] = {"skipped": True, "date": datetime.now().isoformat()} continue results.append({ "id": eid, "source": source_name, "title": title, "link": entry.get("link", ""), "summary": summary, "published": published.isoformat() if published else None, "lang": lang }) ``` ```python # scripts/generate-briefing.py:367-400 lines.append(f"### {i}. {c.get('title','?')}") meta = [c.get(k, '') for k in ['company', 'industry', 'scenario'] if c.get(k)] if meta: lines.append(' | '.join(meta)) if c.get('key_data'): lines.append(f"📊 {c['key_data']}") link = c.get('link', c.get('source', '')) if link: lines.append(f"🔗 {format_link(link)}") if c.get('insight'): lines.append(f"💡 启示:{c['insight']}") else: title_lower = c.get('title', '').lower() if 'agent' in title_lower: lines.append("💡 启示:AI Agent 正在从原型走向生产环境,关注企业级部署模式") elif 'case' in title_lower or 'how' in title_lower: lines.append("💡 启示:真实案例值得深入研究,可提取方法论") elif 'deploy' in title_lower or 'production' in title_lower: lines.append("💡 启示:生产部署经验是最佳学习材料") else: lines.append("💡 启示:关注行业落地趋势,寻找可复用模式") lines.append("") if mid: lines += ["## 🟡 值得关注({} 条)".format(len(mid)), ""] for i, c in enumerate(mid, 1): title = c.get('title', '?') link = c.get('link', c.get('source', '')) ...[truncated 3430 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises a broad multi-source AI intelligence briefing system with five input tracks and briefing/score functionality. The actual code only implements one supporting sub-function: fetching and parsing arXiv papers. While arXiv is one of the declared tracks, this chunk does not perform the overall declared primary purpose of aggregating and delivering a full daily intelligence briefing. There is no sign of unrelated malicious behavior or extra undeclared sensitive capability; the mismatch is that the implemented behavior is substantially narrower than the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a multi-source AI frontier intelligence briefing system covering five distinct inputs and producing a structured daily briefing. The supplied code chunk implements only one narrow sub-function: collecting and filtering GitHub Trending repositories. While GitHub Trending is one of the declared tracks, this code does not reflect the broader declared purpose on its own. It lacks the other four data sources, any true aggregation across tracks, and any final briefing assembly/delivery behavior. Therefore the description overstates what this specific code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description presents a multi-source AI frontier briefing system with five distinct tracks and end-to-end briefing output. The supplied code chunk is much narrower: it only crawls RSS feeds, applies keyword-based filtering, tracks processed items, and saves candidate articles locally. While there is partial overlap with the 'RSS enterprise' and 36kr-related aspect, most of the declared functionality is absent in this code: there is no arXiv ingestion, no GitHub Trending, no Anthropic web search, no scoring pipeline, and no final briefing assembly or delivery. The code comments also indicate a different thematic emphasis—'AI Agent enterprise deployment cases'—which is materially narrower than a general AI frontier intelligence briefing.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/arxiv-fetch.sh (reported line 36)May include surrounding context.

sh
echo "📡 正在抓取 arXiv: ${CATEGORY}(最近 ${DAYS} 天,最多 ${MAX} 篇)..." >&2

# 抓取并解析
curl -sL "$API_URL" | python3 -c "
import sys, json, re
from datetime import datetime, timedelta
from xml.etree import ElementTree as ET

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill instructs the agent to use shell commands, read local files, and write briefing output, but it does not declare any explicit tool scope or permissions boundary. This creates a capability mismatch where a reviewer or runtime may not clearly constrain what the skill can access, increasing the risk of unintended file modification, arbitrary command execution, or data exposure if the skill is invoked in a permissive environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instructions require output in Chinese as the primary language, which is a locale/language constraint. Although triggers may be in any language, the file does not offer the user a language choice or indicate that Chinese output is optional.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill instructs the agent to push generated content to Feishu without documenting that external transmission will occur or requiring explicit user opt-in. This creates a data leakage risk because aggregated content, internal notes, or unexpected sensitive context could be sent to a third-party messaging platform or the wrong recipient.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill directs the agent to save a generated briefing to a dated Markdown file and explicitly overwrite same-day content, but it does not warn the user or require confirmation. In practice, this can cause silent destruction of prior notes or reports and may overwrite files the user expected to preserve, especially when the skill runs automatically or repeatedly.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Line L07 states “语言:中文为主,英文关键案例保留原文标题,” which sets a default language policy favoring Chinese output. There is no indication that users may choose another language or explicitly opt in to this locale constraint.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger phrases include broad, natural-language requests such as '今天有什么信号' and '看看有什么新动态', which can overlap with ordinary conversation and cause the skill to activate when the user did not explicitly intend to invoke this briefing workflow. In a skill that aggregates multiple external sources and pushes structured output, unintended activation can lead to unnecessary data retrieval, noisy responses, and possible disclosure into integrated destinations like Feishu if downstream automation exists.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

SQP-3 applies to all file types. The headings and descriptive text are written in Chinese throughout, and the file does not indicate that this locale is optional, user-selected, or justified by a region-specific constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file is entirely written in Chinese and defines scoring keywords and logic only in Chinese-facing documentation, with no indication that language selection is optional or that the skill is region-specific. This can violate language/locale policy when a skill implicitly requires a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code file contains natural-language strings that define the tool’s interface and usage entirely in Chinese. Under the policy, forcing a specific language without an explicit user choice is a locale/language policy violation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The stated purpose is to aggregate frontier-intelligence sources and render a briefing, which justifies network retrieval but does not inherently justify spawning shell processes. This script invokes bash scripts and curl via subprocess, adding a command-execution capability that is more powerful than necessary for the declared high-level purpose.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/generate-briefing.py (reported line 142)May include surrounding context.

python
def run_script(script_path, *args, timeout=30):
    """运行 shell 脚本并返回 JSON"""
    try:
        result = subprocess.run(
            ['bash', str(script_path)] + list(args),
            capture_output=True, text=True, timeout=timeout
        )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/generate-briefing.py (reported line 177)May include surrounding context.

python
target_date = datetime.now().strftime('%Y-%m-%d')
    url = KR_API.format(date=target_date)
    try:
        result = subprocess.run(
            ['curl', '-sL', '--max-time', '10', url],
            capture_output=True, text=True, timeout=15
        )

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file's comments and usage text are written in Chinese, and the runtime status message is also emitted in Chinese. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The module docstring and CLI description frame the script as focusing on '企业落地案例' / enterprise deployment cases, but the actual source list includes broad channels such as Techmeme, Product Hunt, Hacker News frontpage/show/ask, and 36kr that are not limited to enterprise case studies. That is a semantic expansion of purpose beyond the documented behavior, even though it still stays within news aggregation generally.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This Python file contains user-facing natural-language strings entirely in Chinese, including the title and usage/help text. Because the skill also processes both English and Chinese sources, the file presents a fixed language/locale to the user without any visible opt-in or language-selection mechanism, which matches the locale policy violation criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This is a markdown file, so SQP-2 applies. The document enumerates multiple RSS feeds, APIs, and a GitHub Trending scraping endpoint, but it does not include any user-facing warning that using these sources may contact third-party services and transmit metadata such as IP address or request headers.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This shell script presents its description, usage comments, and runtime status message in Chinese, which imposes a specific language on users. The file does not indicate that the skill is China/Chinese-specific or offer any language/locale opt-in, which fits the language policy violation category.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script emits a progress message in Chinese during execution, which forces a specific language in user-visible output. There is no option to select locale and no documented justification for the restriction.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The manifest describes an intelligence briefing skill that aggregates, scores, and delivers daily briefings, which clearly justifies data fetching and report generation. However, this script also supports writing the generated briefing to any user-specified output path, which is broader than a purely delivery-oriented description and introduces local file modification behavior not stated in the manifest.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The script prints a Chinese-only status message during execution. This enforces a specific language for user-facing output without giving the user a choice or documenting a justified regional limitation.

Content

No source excerpt is available for this finding.

External Script Fetching

Low
Category
Supply Chain
Confidence
83% confidence
Finding

The script fetches live content from an external website and immediately parses it in an inline Python process, creating a trust boundary on unpinned, unauthenticated remote content structure. Although it does not execute fetched code, reliance on external HTML can enable supply-chain-style manipulation, operational instability, and potentially unsafe downstream handling if later components trust the parsed output.

Content

Scanner excerpt · scripts/github-trending-fetch.sh (reported line 24)May include surrounding context.

sh
echo "📡 正在抓取 GitHub Trending (${PERIOD})..." >&2

# 使用更可靠的 Python 解析
curl -s "https://github.com/trending?since=${PERIOD}" | python3 -c "
import sys, json, re
from html.parser import HTMLParser