Back to skill

Security audit

初始版本:支持 28+ 新闻源、10+ LLM 模型、情感分析、图表生成、数据持久化、定时任务

Security checks across malware telemetry and agentic risk

Overview

The skill is not clearly malicious, but its main finance workflow can produce authoritative-looking reports from hardcoded articles and random sentiment labels.

Review this skill carefully before installing or using it. Treat the main.py output as prototype/demo output unless the mock news and random sentiment paths are replaced with real fetching and validated analysis. Do not rely on generated briefings for trading decisions, and only run provider-backed analysis after choosing which LLM service may receive your news text and API credentials.

SkillSpector

By NVIDIA
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 Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (35)

Description-Behavior Mismatch

Medium
Confidence
86% confidence
Finding
The documentation states that configuration is auto-loaded and that reports/raw data may be written to disk, which extends the skill from transient analysis into persistent local storage. Persistence increases privacy and data-handling risk because fetched articles, derived analysis, and potentially user-provided URLs or prompts can remain on disk without explicit consent or retention controls.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The code explicitly labels sentiment analysis as mock/TODO but still feeds randomized outputs into the main workflow and presents them in an investment briefing as if they were meaningful. In a finance-analysis skill, fabricated sentiment, confidence, and impact fields can mislead users into making trading or risk decisions based on false information.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The skill advertises professional financial-news sentiment and impact assessment, but the implementation assigns random sentiment, confidence, and market-impact values. This is dangerous because the output appears authoritative while being untethered to the actual news content, creating a strong risk of user deception in an investment context.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
Although the skill claims to fetch and analyze multi-source financial news, the main flow uses hard-coded sample articles instead of real fetched data. In this context, users may believe they are receiving current market intelligence when they are actually seeing stale or fabricated examples, which can directly distort financial decisions.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
Functions documented as generating full, industry, or stock reports all silently fall back to the brief report. This discrepancy can mislead users about the depth and specificity of analysis they are receiving, which is especially problematic for finance workflows where users may rely on promised granularity.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The document advertises SQLite persistence, data export, scheduled execution, and API key handling without any user-facing disclosure of retention, sensitive-data handling, export risks, or system-impact considerations. In a skill that aggregates external content and uses third-party LLM APIs, this omission can lead users to enable storage and automation without understanding privacy exposure, credential sensitivity, or the operational footprint on the host system.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The main usage sections promote automated fetching, report generation, persistence, and scheduling without prominently warning that the skill will access remote sources and write data locally. That weakens informed consent and makes risky operations feel routine, which is especially problematic when processing user-provided URLs and storing outputs/history. Users may expose local environment context or accumulate sensitive market research artifacts without realizing it.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
Saving raw data by default without a clear warning creates a real privacy and data-retention risk. Raw financial-news inputs may include user-supplied URLs, scraped article content, metadata, and analysis context that persist locally longer than users expect, increasing exposure if the host is shared or compromised.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The script sends user-supplied news text and file-derived content to third-party LLM providers, but it does not present an explicit consent step or warning at the point of transmission. In a finance-news skill, inputs may contain proprietary research, unpublished market-moving information, or sensitive internal summaries, so silent exfiltration to external APIs creates a real confidentiality and compliance risk.

Ssd 1

Medium
Confidence
97% confidence
Finding
User-controlled title, summary, and source fields are interpolated directly into the prompt, allowing a malicious article or supplied text to inject instructions that compete with or override the intended analysis task. Because the system then parses the model output as JSON and may use it downstream as trusted analysis, prompt injection can corrupt sentiment classifications, insert fabricated entities, or trigger denial of service through malformed output.

External Script Fetching

High
Category
Supply Chain
Content
### Q: 本地模型怎么安装?
```bash
# 1. 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 2. 下载模型
ollama pull llama3.1
Confidence
98% confidence
Finding
The documentation instructs users to execute a remote installer directly via `curl ... | sh`, which runs network-fetched code immediately without prior inspection or integrity verification. If the remote host, transport path, or installer content is compromised, users could execute arbitrary shell commands on their systems.

Unpinned Dependencies

Low
Category
Supply Chain
Content
## 基础依赖(必需)
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
Confidence
95% confidence
Finding
Using a lower-bound version specifier like requests>=2.31.0 allows future unreviewed versions to be installed, which can introduce breaking changes or newly disclosed vulnerabilities into the supply chain. In a skill that fetches external news content over the network, dependency drift increases operational and security risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
## 基础依赖(必需)
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
Confidence
95% confidence
Finding
beautifulsoup4>=4.12.0 is not reproducible and permits automatic upgrades to untested releases. This weakens supply-chain control for a parser handling arbitrary third-party HTML from news sources.

Unpinned Dependencies

Low
Category
Supply Chain
Content
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
```
Confidence
96% confidence
Finding
lxml>=4.9.0 allows installation of any later version, making builds non-deterministic and increasing exposure to dependency compromise or vulnerable releases. Because lxml parses attacker-controlled remote content, dependency hygiene matters more here.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
```
Confidence
95% confidence
Finding
jinja2>=3.1.0 permits unbounded upgrades and undermines reproducible deployments. Template engines are sensitive components, so uncontrolled version drift can introduce security regressions or sandbox-related flaws.

Unpinned Dependencies

Low
Category
Supply Chain
Content
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
```

## LLM API 依赖(可选,根据使用模型安装)
Confidence
96% confidence
Finding
pyyaml>=6.0 enables non-deterministic dependency resolution and may pull versions with unsafe behavior or known deserialization issues. If YAML is ever used with untrusted input elsewhere in the skill, weak dependency control compounds risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
### OpenAI (GPT 系列)
```txt
openai>=1.0.0
```

### Anthropic (Claude 系列)
Confidence
93% confidence
Finding
openai>=1.0.0 is an unpinned dependency and allows arbitrary future releases. Although this is an SDK rather than a parser, lack of pinning still creates supply-chain and stability risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
### Anthropic (Claude 系列)
```txt
anthropic>=0.18.0
```

### 阿里通义千问
Confidence
93% confidence
Finding
anthropic>=0.18.0 permits uncontrolled upgrades and non-reproducible environments. Even optional SDK dependencies should be pinned when distributed as a skill requirement set.

Unpinned Dependencies

Low
Category
Supply Chain
Content
### 阿里通义千问
```txt
dashscope>=1.14.0
```

### 百度文心一言
Confidence
92% confidence
Finding
dashscope>=1.14.0 is unpinned, which weakens reproducibility and makes downstream users inherit unreviewed releases automatically. This is a software supply-chain hygiene issue.

Unpinned Dependencies

Low
Category
Supply Chain
Content
### 百度文心一言
```txt
qianfan>=0.3.0
```

### 智谱 AI (GLM 系列)
Confidence
92% confidence
Finding
qianfan>=0.3.0 allows arbitrary later versions to be selected during installation. That can unexpectedly introduce vulnerable or incompatible code into the runtime environment.

Unpinned Dependencies

Low
Category
Supply Chain
Content
### 智谱 AI (GLM 系列)
```txt
zhipuai>=2.0.0
```

### Ollama (本地模型)
Confidence
92% confidence
Finding
zhipuai>=2.0.0 is not pinned, so environments are not reproducible and may drift to insecure releases. This is lower severity than direct code flaws but still a real supply-chain concern.

Unpinned Dependencies

Low
Category
Supply Chain
Content
## 完整安装(所有模型支持)
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
Confidence
95% confidence
Finding
The repeated requests>=2.31.0 entry in the 'full install' section preserves the same non-deterministic dependency risk. Duplicated loose constraints across install paths broaden the chance of insecure deployments.

Unpinned Dependencies

Low
Category
Supply Chain
Content
## 完整安装(所有模型支持)
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
Confidence
95% confidence
Finding
The repeated beautifulsoup4>=4.12.0 entry remains an unpinned parser dependency in an installation path likely to be copied by users. That makes the risk practical rather than merely theoretical.

Unpinned Dependencies

Low
Category
Supply Chain
Content
```txt
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
openai>=1.0.0
Confidence
96% confidence
Finding
The repeated lxml>=4.9.0 entry keeps HTML/XML parsing on an unbounded version path. Because the tool ingests remote web content, parser dependency reproducibility is important to security posture.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
jinja2>=3.1.0
pyyaml>=6.0
openai>=1.0.0
anthropic>=0.18.0
Confidence
95% confidence
Finding
The repeated jinja2>=3.1.0 entry continues the risk of unreviewed template engine upgrades. Template libraries can be security-sensitive if later used with user-influenced content.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.