Back to skill

Security audit

Competitive Intelligence Agent

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed competitive-intelligence monitor with expected scraping, local storage, and optional report delivery, but users should configure it carefully and treat scraped content as untrusted.

Before installing, confirm you are allowed to scrape each configured source, replace placeholder competitor and delivery settings, keep Slack/email/Telegram secrets protected, minimize retention of raw data and screenshots, and add safeguards so external page or review text is treated only as evidence, not as instructions to the model.

Vulnerability Patterns
  • 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
  • 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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
reference/config/analysis.yaml:9
Finding

Untrusted Scraped Content Is Embedded Directly into Model Prompts

Content
View full analysis

Vulnerability Details

File Location: reference/config/analysis.yaml:9-25, 35-47, 54-66, 75-87
Vulnerability Type: Prompt injection through untrusted external content
Risk Level: Medium

Vulnerable Code

yaml
pricing_analysis:
  prompt: |
    Compare {{our_pricing}} to {{competitor_pricing}} for {{competitor_name}}.

    Our pricing:
    {{our_pricing}}

    Competitor pricing:
    {{competitor_pricing}}

    Analyze:
    1. Price comparison by tier (where are we higher/lower?)
    2. Feature gaps at each price point
    3. Value proposition differences
    4. Recommended adjustments (specific prices or features to change)
    5. Overall market positioning observation

    Output as structured analysis with specific numbers and actionable recommendations.

sentiment_analysis:
  prompt: |
    Analyze the sentiment of these {{platform}} reviews for {{competitor_name}}:

    {{reviews}}

    For each review, classify as: positive, negative, or neutral.
    Then summarize:
    - Overall sentiment score (0-1, where 1 is most positive)
    - Top 3 praise themes (what people love)
    - Top 3 complaint themes (what people hate)
    - Any mentions of {{our_company_name}} (direct comparisons)
    - Key opportunities for us (competitor weaknesses)

product_gap_analysis:
  prompt: |
    Compare the product offerings of {{our_company_name}} vs {{competitor_name}}.

    Our features: {{our_features}}
    Competitor features: {{competitor_features}}

    Identify:
    1. Features only we have (our moat)
    2. Features only they have (their moat)
    3. Features we both have (table stakes)
    4. Potential features to build (gap opportunities)
    5. Features to sunset (no longer competitive)

    Rank gap opportunities by impact (High/Medium/Low).

trend_analysis:
  prompt: |
    Analyze 4-week trends for {{competitor_name}}:

    Historical data:
    {{trend_data}}

    Identify:
    1. Significant trends (upward or downward)
    2. Correlations (e.g
...[truncated 2848 chars]
Remediation
View remediation

Remediation Suggestions

  1. Treat all scraped and user-generated material as untrusted data, regardless of its source.
  2. Place external content inside explicit boundaries, such as structured JSON fields or uniquely generated delimiters, rather than concatenating it into instructional prose.
  3. Add a strong instruction before external content stating that text inside the data boundary is evidence to analyze and that any commands, role changes, tool requests, or policy statements within it must not be followed.
  4. Parse scraped pages into a strict schema and retain only expected fields. Reject unexpected markup, control text, oversized values, and fields that do not match the schema.
  5. Separate data extraction from reasoning. Use deterministic parsers for prices, ratings, dates, and counts before passing normalized values to the model.
  6. Run analyzers without shell, filesystem, network, delivery, or secret access unless each capability is essential. Require explicit authorization before performing side effects.
  7. Validate generated reports before delivery. Detect instruction-following artifacts, unexpected secret-like material, external links, and unsupported claims.
  8. Preserve source provenance so every generated claim can be traced to its originating URL and collected value.
  9. Add adversarial tests containing prompt-injection payloads in pricing pages, reviews, features, and trend data, and verify that the model treats them solely as quoted evidence.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

The skill's declared description understates its actual behavior: it also monitors news and hiring, stores screenshots as evidence, and supports multiple report/export modes beyond a single concise weekly briefing. This matters because users and reviewers may grant consent or approval based on an incomplete understanding of what data is collected, retained, and shared, which can lead to unexpected surveillance or data handling.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README advertises continuous scraping, monitoring, and delivery to third-party channels like Slack, email, and Telegram, but does not warn users about legal, privacy, rate-limit, or terms-of-service risks. This can lead operators to deploy the skill in ways that collect or transmit third-party data without appropriate consent, review, or safeguards.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is designed for continuous monitoring and scheduled delivery to Slack, email, Telegram, or files, but the description does not prominently warn that collected intelligence and potentially sensitive internal comparisons may be transmitted to third-party services. In practice, this can leak confidential business analysis, monitored targets, or internal pricing comparisons if operators enable external delivery without understanding the exposure.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 173)May include surrounding context.

md
example: "div.pricing-card span.price"
    - type: "api_endpoint"
      description: "Check for public pricing API"
      example: "https://api.competitor.com/v1/pricing"
    - type: "playwright"
      description: "Full browser render for JS-heavy pricing pages"
  comparison:

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script collects 'news and hiring' data even though the skill metadata says it monitors pricing, social media, online reviews, and product changes. This creates a scope mismatch: operators and users may authorize the skill expecting one set of data-collection behaviors while the script performs broader intelligence gathering, which can violate least-privilege expectations and internal policy controls.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The South Africa-specific focus is not inherently unsafe, but the README presents locale-specific monitoring of regional review platforms without explaining why this scope exists or making it a clear opt-in choice. That can cause users to unintentionally process region-specific data sources with different legal, contractual, or privacy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The field name absolute_zar encodes a specific locale/currency assumption in the alerting policy. In this file there is no accompanying note that the skill is South Africa-specific or that users can opt into or change the locale, which can violate language/locale policy requirements.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.