Back to skill

Security audit

Keyword Research

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward keyword research helper that sends user-provided search terms to autocomplete services, with some disclosure gaps but no evidence of hidden, destructive, or credential-seeking behavior.

Install only if you are comfortable having the keywords you enter sent to external autocomplete providers. Use --lang and --region if German defaults are not what you want, and be aware that the script includes Bing in the default all-sources mode.

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
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill advertises network-backed functionality but does not declare any explicit tool scope or allowed-tools boundary. That creates an authorization and transparency gap: an agent may invoke network-capable code without clear policy constraints, increasing the chance of unintended outbound requests, data exposure, or overbroad execution in environments that rely on manifest-declared permissions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger phrases are broad enough that the skill could activate for generic user requests about keywords, search behavior, or SEO without a clear boundary that external network fetching will occur. In an agentic environment, overbroad activation can cause unintended data transmission to third-party services and produce behavior the user did not specifically consent to.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The quick-usage examples and options table establish de as the default language and region, which effectively forces a locale preference unless the user overrides it. This is a language/locale policy concern because the file does not offer explicit opt-in or explain why German defaults are required for a region-specific use case.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Multiple functions and CLI arguments default to de, causing requests to external services to use German language/region unless the user explicitly overrides them. This is a natural-language locale policy concern because the skill imposes a specific language by default rather than prompting for or inferring user preference.

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 · scripts/fetch_suggestions.py (reported line 59)May include surrounding context.

python
return []

def fetch_bing(keyword, lang="de"):
    url = f"https://api.bing.com/osjson.aspx?query={urllib.parse.quote(keyword)}&language={lang}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=5) as r:

Static analysis

No suspicious patterns detected.