Back to skill

Security audit

Content Fetch Skill

Security checks for vulnerabilities and agentic risk

Overview

This scraping skill is not clearly malicious, but it needs review because it can use cookies or browser sessions to scrape broad web targets while weakening browser security protections.

Review this before installing. Use it only in an isolated, low-privilege environment, avoid internal or sensitive URLs, do not attach it to your everyday logged-in Chrome profile, and treat cookie files as account credentials. Expect scraped text, screenshots, images, and configuration to remain on disk under the skill directory unless you clean them up.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
workflow.py:114
Finding

Arbitrary URL Fetching Enables Server-Side Request Forgery

Content
View full analysis
tuple[str, dict]: try: parsed_url = urlparse(url) domain = parsed_url.netloc.lower() fetch_site_config = config.get('fetch_site', {}) for site_key, site_config in fetch_site_config.items(): if site_key == 'proxy' or site_key == 'general': continue site_domain = site_config.get('domain', '').lower() if site_domain and site_domain in domain: return site_key, site_config if 'general' in fetch_site_config: return 'general', fetch_site_config['general'] except Exception: pass return 'unknown', {} ``` ```python def is_valid_url(url: str) -> bool: """Simple validation that the URL is valid.""" try: p = urlparse(url) return p.scheme in ('http', 'https') and bool(p.netloc) except Exception: return False ``` ```python page = await context.new_page() print(f"Visiting target page: {url}") response: Optional[Response] = await page.goto( url, timeout=60000, wait_until='domcontentloaded' ) ``` ### Technical Analysis The URL validation only verifies that the scheme is HTTP or HTTPS and that a network location exists. It does not resolve or classify the destination address. Consequently, loopback, private, link-local, reserved, and cloud metadata addresses are accepted. Any URL that does not match a configured site is automatically sent to the general scraper. That scraper uses Chromium to navigate directly to the supplied URL, executes the returned page, extracts its text and images, and saves a screenshot. The implementation also does not revalidate the destination after DNS resolution or HTTP ...[truncated 1536 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/scrape_twitter.py:80
Finding

Chromium Is Launched with Critical Browser Security Protections Disabled

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/scrape_general.py:128
Finding

Unbounded Remote Image Downloads Permit Memory and Disk Exhaustion

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:10
Finding

Runtime Dependencies and Browser Artifacts Are Not Version-Pinned

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (50)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The reported inclusion of proxy support, cookie injection, and anti-detection behavior without clear disclosure creates a meaningful transparency and consent failure. In a scraping skill, these capabilities can facilitate access to logged-in or rate-limited content and obscure the automation, which makes misuse or policy circumvention easier if the user is not fully informed.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The reported inclusion of proxy support, cookie injection, and anti-detection behavior without clear disclosure creates a meaningful transparency and consent failure. In a scraping skill, these capabilities can facilitate access to logged-in or rate-limited content and obscure the automation, which makes misuse or policy circumvention easier if the user is not fully informed.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The reported inclusion of proxy support, cookie injection, and anti-detection behavior without clear disclosure creates a meaningful transparency and consent failure. In a scraping skill, these capabilities can facilitate access to logged-in or rate-limited content and obscure the automation, which makes misuse or policy circumvention easier if the user is not fully informed.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The reported inclusion of proxy support, cookie injection, and anti-detection behavior without clear disclosure creates a meaningful transparency and consent failure. In a scraping skill, these capabilities can facilitate access to logged-in or rate-limited content and obscure the automation, which makes misuse or policy circumvention easier if the user is not fully informed.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The reported inclusion of proxy support, cookie injection, and anti-detection behavior without clear disclosure creates a meaningful transparency and consent failure. In a scraping skill, these capabilities can facilitate access to logged-in or rate-limited content and obscure the automation, which makes misuse or policy circumvention easier if the user is not fully informed.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code can attach to an already running Chrome instance over the DevTools remote debugging interface and then reuse that browser's authenticated context. This enables the scraper to inherit all active sessions in that browser, which can expose unrelated authenticated data and turns the tool into a session-riding mechanism rather than a scoped content fetcher.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill explicitly instructs use of authentication cookies and stores scraped outputs on disk, but provides no warning about safeguarding cookie files, limiting their scope, or handling potentially sensitive scraped data. In a scraping skill, this increases the chance users expose live session tokens, persist private content unintentionally, or write sensitive material to insecure locations.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares broad capabilities to read local cookie files, write configuration and output artifacts, and access arbitrary remote URLs, but it does not define an explicit tool scope such as allowed tools, permitted network domains, or write boundaries. This increases the blast radius of accidental or abusive invocation because the agent can perform local file I/O and outbound requests without a clearly documented least-privilege boundary.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Very broad trigger phrases like '抓取网页', '获取网页内容', or '下载文章' increase the chance of accidental invocation for ordinary browsing or summarization requests. When the skill performs network access and local writes, unintended activation can lead to unnecessary scraping, storage of third-party content, or use of sensitive configuration such as cookies or proxies.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation states that configuration, screenshots, JSON results, and downloaded images are written locally, but it does not prominently require user acknowledgement of those persistent side effects. This is risky because scraped content, screenshots, and configuration may contain sensitive URLs, page contents, or identifiers that remain on disk after the task completes.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Describing support for '任意网页' without boundaries makes the skill more dangerous because it implies unrestricted fetching across arbitrary sites. In combination with screenshotting, image downloads, cookie support, and proxy support, that broad scope can enable collection from sensitive, login-gated, or policy-restricted pages with insufficient user awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Requesting users to provide exported login cookies is security-sensitive because cookies can grant direct access to authenticated sessions and may expose private data or account actions if mishandled. The skill mentions how to supply cookies but does not adequately warn that these files are credentials, should be narrowly scoped, protected, and never reused casually across tasks.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/troubleshooting.md (reported line 32)May include surrounding context.

md
ss -tlnp | grep 7890

# 测试代理连接
curl -x http://127.0.0.1:7890 -s --connect-timeout 10 http://ip.sb

# 测试 X.com 访问
curl -x http://127.0.0.1:7890 -s -o /dev/null -w "%{http_code}" https://x.com

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/troubleshooting.md (reported line 151)May include surrounding context.

bash
# 1. 启动代理
cd /home/gem/workspace/agent/workspace/mihomo
nohup ./mihomo -d . > /tmp/mihomo.log 2>&1 &

# 2. 等待代理启动
sleep 3

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/troubleshooting.md (reported line 157)May include surrounding context.

md
sleep 3

# 3. 切换到稳定节点
curl -s -X PUT "http://127.0.0.1:9090/proxies/Proxy" \
  -H "Content-Type: application/json" \
  -d '{"name":"JMS-VMess-4"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The example command embeds username, password, and email arguments directly on the command line. Command-line secrets can leak through shell history, process listings, logs, and transcripts, which is especially risky in shared or monitored environments.

Content

No source excerpt is available for this finding.

Unbounded Output

Medium
Category
Output Handling
Confidence
75% confidence
Finding

Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.

Content

Scanner excerpt · scripts/scrape_general.py (reported line 75)May include surrounding context.

python
elements = await page.locator(selector).all()
            if elements:
                # 找到最长的内容块
                max_length = 0
                best_element = None
                for elem in elements:
                    text = await elem.text_content(timeout=1000)

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script deliberately tampers with browser fingerprint signals such as navigator.webdriver, plugins, and languages to evade bot detection. For a content-fetching skill, this is not necessary for basic functionality and creates misuse potential by helping bypass site anti-automation controls and terms-enforcement mechanisms.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code forces Chinese-oriented language settings in the browser fingerprint without user choice, which can alter server responses, affect extracted content, and misrepresent the client identity to target sites. In combination with the anti-detection logic, this strengthens the impression of intentional spoofing rather than ordinary localization.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code sets the Accept-Language header to prefer zh-CN and also overrides navigator.languages to Chinese-first values. This is a natural-language locale policy issue because the skill imposes a specific language environment without offering the user a choice or documenting a justified regional restriction.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code silently loads a cookie file into the browser context, which can import authenticated session state without any validation, consent check, or scope restriction. In this skill context, that increases the risk of scraping private or account-scoped content and of mishandling sensitive session material if operators provide real browser cookies.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The scraper saves a full-page screenshot automatically, which can capture account information, personalized recommendations, visible identifiers, or other sensitive page elements beyond the target article body. In a content-fetching skill that may operate with loaded cookies, this becomes more dangerous because the screenshot can preserve authenticated or personalized content to disk unintentionally.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The browser context sets an explicit Accept-Language header of 'zh-CN,zh;q=0.9,en;q=0.8', which imposes a locale preference rather than allowing user opt-in or configuration. This matches the policy concern for language/locale constraints in code.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code accepts an arbitrary local cookie file and imports all cookies into the browser context, enabling the scraper to operate with an existing authenticated session rather than only public access. In this skill context, that increases the risk of unauthorized access to account-scoped content and misuse of sensitive local session material if a caller can influence the cookie path.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script injects fingerprint-spoofing logic to hide automation and mimic a real browser environment, including overriding navigator.webdriver, plugins, languages, platform, and window.chrome. For a content-fetch skill, this goes beyond normal automation and can facilitate bypass of bot-detection or site access controls, making the scraper materially more dangerous in context.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.