Back to skill

Security audit

Anti-SEO Researcher

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent consumer-research tool, but it needs review because its fallback scripts can fetch arbitrary search-result pages and feed untrusted web text into AI scoring prompts without strong containment.

Review this before installing in any environment with access to internal services or sensitive network locations. Prefer using a sandboxed runner, disable or restrict --fetch-content unless needed, and ensure AI scoring happens in a tool-free context that treats fetched page text only as untrusted evidence.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/web_search_fallback.py:97
Finding

Unrestricted Search-Result Fetching Enables Server-Side Request Forgery

Content
View full analysis
{e}", file=sys.stderr) return "" def fetch_page_content(url, max_length=5000): """Fetch page body text (for --fetch-content).""" html = fetch_url(url, timeout=20) if not html: return "" html = re.sub( r"]*>.*?", "", html, flags=re.DOTALL | re.IGNORECASE, ) html = re.sub( r"]*>.*?", "", html, flags=re.DOTALL | re.IGNORECASE, ) text = html_to_text(html) text = re.sub(r"\s+", " ", text).strip() return text[:max_length] ``` The unvalidated function is invoked on URLs extracted from external search-engine responses: ```python if args.fetch_content and unique_results: fetch_limit = min(args.fetch_limit, len(unique_results)) print( f"\n[FALLBACK] Fetching content for top {fetch_limit} results...", file=sys.stderr, ) for i, r in enumerate(unique_results[:fetch_limit]): print( f"[FALLBACK] ({i+1}/{fetch_limit}) {r['url']}", file=sys.stderr, ) r["content"] = fetch_page_content(r["url"]) time.sleep(0.5) ``` ### Technical ...[truncated 3029 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Warning
Location
scripts/ai_credibility_analyzer.py:277
Finding

Untrusted Web Content Is Directly Embedded into Agent-Executed Prompts

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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 (41)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a broad consumer research skill that searches the web, adapts by language/region, and supports product-buying decisions even without web_search via Bing scraping. This code instead analyzes supplied post text for credibility/soft-ad characteristics using an LLM prompt and caching. Its inputs are title/content/platform, and its outputs are authenticity scores and verdicts like 'real feedback' vs 'suspected advertorial.' While this could be a supporting component inside a larger consumer-research system, the supplied chunk itself does not implement the advertised search/research capabilities and has a materially different primary purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description emphasizes an end-to-end consumer research tool that can discover information via web_search or built-in Bing scraping, detect user language, and adapt to regional platforms/search strategies. This code chunk does none of that. It only consumes existing JSON files containing search results, category profiles, and optional safety results, then computes dimension scores, safety penalties, confidence levels, and recommendation verdicts. While this could be a supporting component within a larger consumer-research pipeline, the supplied code’s actual purpose is specifically post-processing/scoring, not search, scraping, localization, or language adaptation. Therefore the declared description materially overstates and misrepresents the behavior of this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a full anti-SEO consumer research tool that searches the web, adapts by language/region, and gracefully falls back to Bing scraping when search is unavailable. The supplied code does none of that. Instead, it is a downstream analysis component that reads previously scored search results from JSON, detects contradictory positive/negative evidence for product dimensions, and arbitrates those conflicts using heuristic weighting. While this could support a broader consumer research pipeline, the code chunk’s actual purpose is materially narrower and different from the declared skill behavior. Therefore this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description presents a broader end-user skill that actively conducts anti-SEO consumer research, detects language, adapts search strategies/platforms by region, and can fall back to Bing scraping if web_search is unavailable. The supplied code does none of that. It only consumes an input JSON of search results generated elsewhere, applies heuristic credibility scoring rules, optionally integrates with a separate AI analyzer for semantic scoring, and emits ranked/scored output plus statistics. While credibility scoring could be a supporting component of an anti-SEO research tool, the specific declared capabilities around search execution, language detection, regional platform adaptation, and Bing scraping are absent from this code chunk, making the description materially inaccurate for the supplied code.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The code is related to consumer product research, so there is partial alignment at a high level. However, the declared description emphasizes automatic language detection, regional platform adaptation, and fallback behavior when web_search is unavailable. None of those mechanisms are visible here. Instead, the code's concrete behavior is a specialized negative-research pipeline: it searches for complaints, defects, returns, long-term problems, ecommerce follow-up reviews, comment-section backlash, and safety/recall incidents. It also classifies source types and safety severity, and can fetch result page contents. Those are significant capabilities not disclosed in the description. Because the primary operational focus and implemented features differ materially from the stated description, this is a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The declared description presents a full consumer-research skill that can search the web, adapt by language/region, and gracefully fall back to built-in Bing scraping when web_search is unavailable. The provided code chunk does none of that. It only loads existing JSON result files, filters by credibility, extracts model names, aggregates sentiment-like signals, optionally merges safety/brand-score inputs, and formats a Markdown report. While this is related to consumer research reporting, the major advertised capabilities—search, fallback scraping, and language/regional adaptation—are absent. Therefore the description materially overstates and misrepresents what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The code is broadly related to consumer research and does adapt to regional platforms/search strategies when given a category profile, so the general theme matches. However, there are material description/behavior gaps. Most notably, the description explicitly says it 'automatically detects user language,' but the code does not detect language; it only applies locale settings from an externally supplied category_profile. It also claims graceful degradation to built-in Bing scraping when web_search is unavailable, but the code additionally falls back to DuckDuckGo, which is an undeclared search capability. Beyond search-engine result collection, the tool can optionally fetch and extract full page content from target URLs, and it includes separate indirect e-commerce review and social comment-section search modes—important functional capabilities absent from the declared purpose. These are substantive enough to count as a mismatch rather than mere implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The description presents a specialized consumer research skill with anti-SEO behavior, language detection, regional adaptation, and graceful fallback behavior. The supplied code instead implements a general-purpose search scraper/orchestrator: it performs HTML scraping of DuckDuckGo and Bing, optionally restricts by site, optionally fetches page text, and emits JSON. There is no code for consumer-product analysis, anti-SEO ranking logic, automatic language detection, regional platform selection, or adaptive search strategies. Also, the fallback design differs from the description: DuckDuckGo is the primary engine and Bing is only a secondary fallback. This is a material description-behavior mismatch rather than a mere implementation detail.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/SKILL_REFERENCE.md (reported line 184)May include surrounding context.

md
> The following brands had potential risk information in safety event searches

## Product Scores
<!-- Table headers dynamically generated from category_profile.evaluation_dimensions -->
| Product | [Dim 1] | [Dim 2] | ... | Safety | Overall | Confidence | Verdict |

## Research Conclusions

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'file_read' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'file_write' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The script makes unrestricted outbound HTTP requests to Bing, DuckDuckGo, and arbitrary result URLs via urllib, but the capability is not declared in permissions. In an agent-skill environment, undeclared network access is a security and governance issue because it expands the trust boundary, can transmit user queries to third parties, and can fetch unexpected remote content without explicit authorization.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README explicitly states that when web_search is unavailable, the skill will automatically run local Python scripts via execute_command and scrape DuckDuckGo/Bing results, but it does not require clear user consent or a warning before doing so. In an agent environment, automatic command execution and off-tool web scraping expand the trust boundary, reduce auditability, and can surprise users who expected only normal built-in search behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instructions require all subsequent queries and report text to match the detected language and region, based on automatic inference rather than an explicit user choice. This can violate language/locale policy because it removes user control over language selection and may force a locale the user did not request.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 199)May include surrounding context.

}

text

**Skip confirmation only if ALL conditions are met:**
1. Category is clear (e.g., "recommend a $200 gaming keyboard")
2. Budget is clear (has specific numbers or clear range)
3. Use case is clear (e.g., "for gaming", "for my baby")

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This line requires the report to be written in the user's language as specified by the generated profile, which itself is derived from automatic language detection. Because no opt-in or explicit language choice is offered, the skill imposes a language policy through inference alone.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JSON profile defines category names, descriptions, search templates, and indicators exclusively in Chinese, which can impose a fixed language/locale on downstream skill behavior. The file does not provide any user opt-in, alternative locale, or justification that the skill is intentionally region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs the agent to infer locale, language, and currency from the user's query and to drive all downstream behavior from that inference. This can cause incorrect regional assumptions, unintended personalization, and user confusion or privacy concerns when the system silently adapts behavior without confirmation or 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

The module docstring, usage text, CLI descriptions, prompt template, and output labels are written entirely in Chinese, and the prompt instructs the model in Chinese without any opt-in or locale selection mechanism. For a general-purpose credibility-analysis skill, this is a natural-language locale policy constraint that is neither optional nor justified as region-specific.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The analyzer packages post title, content, and platform into a prompt for an external/host AI workflow without any clear consent, warning, or data-minimization controls. If users analyze sensitive reviews, private text, or regulated data, this can cause unintended disclosure to a third-party model provider or logging system.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This code file contains user-facing natural-language descriptions, CLI help text, and runtime messages exclusively 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.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This Python file contains user-facing natural language in its top-level docstring and CLI help text entirely in Chinese, including usage guidance and output descriptions. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This code file includes natural-language descriptions, help text, and user-facing labels entirely in Chinese. Under the policy for natural-language violations, forcing a specific language without user opt-in can be a locale-policy issue when no alternative language choice or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code file contains natural-language instructions, CLI descriptions, and status messages that are exclusively in Chinese, starting with the module docstring and continuing through user-facing help text. Under the language/locale policy rule, forcing a specific language without user choice is a policy concern unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes an anti-SEO consumer research tool that adapts search strategies for purchase decisions, which reasonably covers product review and forum research. This file adds a separate capability for brand/model safety-event investigation, including recalls, regulatory actions, FDA/EFSA references, and official announcements, which is a broader investigative function than ordinary consumer-review deep dives.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.