Back to skill

Security audit

Stock Analysis

Security checks across malware telemetry and agentic risk

Overview

This is a coherent stock-analysis skill, but its optional Twitter/X scanners ask users to expose live session cookies to an external CLI with broader credential handling than the feature warrants.

Install only if you are comfortable with the Twitter/X scanner design. Prefer finance-only commands or hot_scanner.py --no-social unless you explicitly need social data. Do not provide AUTH_TOKEN or CT0 unless you understand they can grant access to your X session, keep .env out of shared folders and repositories, avoid granting Terminal Full Disk Access casually, and consider using a separate low-risk X account if you test the social features.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill advertises executable commands that invoke Python and shell tooling, access network-backed finance sources, and persist data to local files, yet it declares no explicit permissions. This creates a transparency and policy-enforcement gap: users and the host agent may not realize the skill can write files, read environment-derived credentials, and make outbound requests.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The script indiscriminately loads every key from a local .env file into the process environment before making network requests and launching a subprocess. In this context, that can expose unrelated secrets to child processes such as the bird CLI and unnecessarily broadens credential access beyond what is needed for stock analysis.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script loads arbitrary secrets from a local .env file into process environment variables and then later forwards that environment to an external CLI. In a skill advertised around Yahoo Finance analysis, silently collecting and exposing credentials for unrelated Twitter access materially increases secret exposure and expands capability beyond user expectations.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The hardcoded Bird CLI dependency gives the skill an external authenticated Twitter/X-search capability that is not justified by the stated Yahoo Finance-focused purpose. This is dangerous because it broadens data sources and outbound actions, potentially using local credentials and network access the user did not reasonably expect.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
This implementation materially exceeds the stated Yahoo Finance analysis scope by scraping Twitter/X rumor data and Google News RSS. Capability expansion is dangerous in agent skills because it changes the trust boundary, introduces additional external communications, and can collect or act on data the user did not authorize.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README instructs users to extract `AUTH_TOKEN` and `CT0` cookies from browser DevTools and store them in a `.env` file, but it does not warn that these are live session credentials equivalent to account access. If exposed through shell history, logs, backups, screenshots, or accidental commits, an attacker could hijack the user's Twitter/X session and misuse the connected account.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The watchlist and portfolio features write persistent user data under the user's home directory, but the command descriptions do not clearly warn that local state will be created and retained. This can surprise users, lead to unintended storage of potentially sensitive financial holdings, and make cleanup/retention expectations unclear.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The concept document presents the tool as producing clear BUY / HOLD / SELL signals early in the user-facing narrative, while the investment-risk disclaimer appears much later and is comparatively less prominent. In a financial-analysis skill, that framing can cause users to over-trust the output as actionable investment guidance, increasing the chance of harmful financial decisions without adequate upfront caution.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The documentation tells users to extract live Twitter/X session credentials from browser cookies and store them in a .env file or environment variables, but it does not warn that these are sensitive session tokens that can grant account access if exposed. This increases the chance of accidental leakage through shell history, logs, backups, screenshots, repo commits, or shared environments.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
Loading all values from .env without user visibility creates silent credential access and propagation. Because this script also performs outbound HTTP requests and executes an external CLI, the hidden import of arbitrary secrets materially increases the chance of accidental exposure or misuse.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The code silently reads a local .env file and uses those values to support authenticated external operations without any warning or consent mechanism. This creates a transparency and secret-handling problem: users may not realize local credentials will be consumed and potentially exposed to a subprocess.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script executes a local external CLI to perform Twitter searches and send queries off-host, but it does not clearly warn the user that this behavior will occur. In an agent skill context, silent execution of local tools plus outbound requests undermines informed consent and can surprise users about what code and services are involved.

Missing User Warnings

Low
Confidence
82% confidence
Finding
The function makes direct outbound HTTP requests to Google News without any explicit notice to the user. While ordinary network access is common, undisclosed external communication is still a policy and privacy concern for an agent skill, especially when the manifest emphasizes a different data source.

Ssd 3

High
Confidence
98% confidence
Finding
The skill explicitly instructs users to copy browser cookies from x.com and reuse them as AUTH_TOKEN and CT0, which are live authentication artifacts rather than normal API keys. If those values are stolen or mishandled, an attacker may be able to impersonate the user on Twitter/X, access account data, and abuse the session; the skill context makes this more dangerous because it operationalizes credential harvesting and storage for automation.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
for category, query in searches:
                try:
                    env = os.environ.copy()
                    result = subprocess.run(
                        [bird_bin, "search", query, "-n", "15", "--json"],
                        capture_output=True, text=True, timeout=30, env=env
Confidence
98% confidence
Finding
os.environ.copy()

Env Variable Harvesting

High
Category
Data Exfiltration
Content
for query in queries[:4]:  # Limit to avoid rate limits
        try:
            cmd = [BIRD_CLI, 'search', query, '-n', '10', '--json']
            env = os.environ.copy()
            
            result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env)
Confidence
96% confidence
Finding
os.environ.copy()

Env Variable Harvesting

High
Category
Data Exfiltration
Content
for query in queries[:3]:
        try:
            cmd = [BIRD_CLI, 'search', query, '-n', '15', '--json']
            env = os.environ.copy()
            
            result = subprocess.run(cmd, capture_output=True, text=True, timeout=30, env=env)
Confidence
96% confidence
Finding
os.environ.copy()

Credential Access

High
Category
Privilege Escalation
Content
from collections import defaultdict
from concurrent.futures import ThreadPoolExecutor, as_completed

# Load .env file if exists
ENV_FILE = Path(__file__).parent.parent / ".env"
if ENV_FILE.exists():
    with open(ENV_FILE) as f:
Confidence
95% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
from concurrent.futures import ThreadPoolExecutor, as_completed

# Load .env file if exists
ENV_FILE = Path(__file__).parent.parent / ".env"
if ENV_FILE.exists():
    with open(ENV_FILE) as f:
        for line in f:
Confidence
95% confidence
Finding
.env"

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.