Back to skill

Security audit

Indeed Monitor

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly performs Indeed lead scraping, but it needs Review because it can use a local Chrome profile and append scraped lead data to a hard-coded personal file with under-disclosed scope.

Review before installing. Use an isolated browser profile rather than a personal Chrome profile, avoid --save unless you are comfortable appending to the hard-coded master lead file, and treat all saved lead text as untrusted scraped content until the output path and Markdown sanitization are fixed.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
monitor.py:277
Finding

Unsanitized Indeed Content Persisted into the Markdown Lead Database

Content
View full analysis
Remediation
View remediation
`. - Neutralize Markdown link and image syntax where rendered links are unnecessary. 3. Enforce maximum lengths and an allowlist of expected characters for company names, titles, and locations. 4. Prefer a structured storage format such as JSON or properly generated CSV. If Markdown is required, generate it from validated structured data using a safe serialization function. 5. Label scraped text as untrusted external content when supplying it to an AI system. Keep data fields separate from system or task instructions and instruct the downstream agent never to follow instructions contained in lead records. 6. Consider rejecting records containing control characters, embedded URLs, multiline content, or instruction-like payloads. For example: ```python def escape_markdown_cell(value, max_length=200): value = str(value or "") value = value.replace("\r", " ").replace("\n", " ") value = value.replace("\\", "\\\\").replace("|", "\\|") value = value.replace("<", "<").replace(">", ">") return value[:max_length] for lead in all_leads: company = escape_markdown_cell(lead["company"]) title = escape_markdown_cell(lead["title"]) location = escape_markdown_cell(lead["location"]) signals = escape_markdown_cell(", ".join(lead.get("pain_signals", []))) f.write(f"| {company} | {title} | {location} | {signals} |\n") ``` ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
monitor_browser.py:190
Finding

Unsanitized Browser-Scraped Content Persisted into the Markdown Lead Database

Content
View full analysis
Remediation
View remediation
", ">") return value[:max_length] for lead in all_leads: company = escape_markdown_cell(lead["company"]) title = escape_markdown_cell(lead["title"]) location = escape_markdown_cell(lead["location"]) signals = escape_markdown_cell(", ".join(lead.get("signals", []))) f.write(f"| {company} | {title} | {location} | {signals} |\n") ``` ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (17)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill claims to monitor target areas and output enriched lead information, but the documented behavior includes undeclared writes to a specific local path, lacks the promised phone enrichment, and only generates simplistic signals over hardcoded searches. In a lead-generation skill, this context makes the discrepancy more concerning because it affects data provenance, user expectations, and hidden persistence of potentially sensitive business intelligence.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The skill claims to monitor target areas and output enriched lead information, but the documented behavior includes undeclared writes to a specific local path, lacks the promised phone enrichment, and only generates simplistic signals over hardcoded searches. In a lead-generation skill, this context makes the discrepancy more concerning because it affects data provenance, user expectations, and hidden persistence of potentially sensitive business intelligence.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill advertises executable commands that use network access, shell execution, and optional file writes, but the manifest declares no explicit tool scope or permissions. This is dangerous because users and enforcement systems cannot accurately constrain what the skill is allowed to do, increasing the chance of unintended data access, filesystem modification, or unreviewed external communications.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The top-level docstring asserts that each posting is a confirmed lead. In practice, the code merely scrapes search results, filters names, and assigns heuristic scores based on title and company-name keywords, which does not substantiate a confirmed-lead claim.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest says the skill outputs an enriched lead list with company name, phone when available, location, and pain point summary. In the implementation, parsing and saved output never attempt to collect phone numbers or perform any enrichment beyond simple title/company/location extraction and heuristic scoring, so the actual behavior is materially narrower than described.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · monitor.py (reported line 49)May include surrounding context.

python
def fetch(url):
    r = subprocess.run(
        ["python3", SCRAPLING_SCRIPT, "web", url],
        capture_output=True, text=True, timeout=30
    )

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

When --save is used, the script persists scraped lead data to a fixed master file path with no validation, no preview/consent beyond the flag, and no controls around data classification or retention. In this skill context, the data is business lead information rather than high-sensitivity secrets, which lowers severity, but silent persistence to a shared internal file can still create privacy, governance, and unauthorized-disclosure risk if the file is broadly accessible or synced.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · monitor_browser.py (reported line 55)May include surrounding context.

python
def openclaw_snapshot(target_id):
    """Get aria snapshot of current browser tab."""
    r = subprocess.run(
        ["node", "-e", f"""
const {{OpenClawBrowser}} = require('/opt/homebrew/lib/node_modules/openclaw/dist/tools/browser.js');
// Just use curl to the local API

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The code invokes external local tooling through subprocess to reach browser-related functionality that is broader than simple lead monitoring. In an agent environment, undeclared access to local executables and relay components expands capability scope and can be abused to interact with host resources beyond the user's expectations.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · monitor_browser.py (reported line 70)May include surrounding context.

python
import time
    url = f"https://www.indeed.com/jobs?q={query.replace(' ', '+')}&l={location.replace(' ', '+').replace(',', '%2C')}&sort=date&fromage=7"
    
    subprocess.run(
        ["openclaw", "browser", "navigate", "--url", url, "--profile", "chrome"],
        capture_output=True, text=True, timeout=20
    )

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This skill can drive a local Chrome profile and capture snapshots, giving it visibility into browser state and page content beyond the narrow task of lead collection. That is especially risky in agent contexts because a real user profile may contain authenticated sessions, personal data, or unrelated tabs, so browser-control capability materially increases privacy and lateral-access risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code performs browser automation and page snapshotting without an explicit user warning or consent prompt, despite interacting with a local browser profile. In practice, this can surprise users and expose page contents or authenticated context to the skill without informed approval.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · monitor_browser.py (reported line 76)May include surrounding context.

python
)
    time.sleep(2)
    
    s = subprocess.run(
        ["openclaw", "browser", "snapshot", "--profile", "chrome", "--compact"],
        capture_output=True, text=True, timeout=20
    )

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill appends data to a fixed local path outside its apparent declared output boundary, which can modify user data stores without clear disclosure or runtime confirmation. In an agent setting, undeclared file writes are dangerous because they create persistence side effects and can contaminate sensitive local notes or operational files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Appending to a hard-coded local master file creates persistent changes to user data without a prior warning about the exact file being modified. In an agent ecosystem, silent writes are dangerous because they can overwrite, pollute, or leak information into files the user did not expect the skill to touch.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest scope is limited to receptionist, customer service representative, and front desk roles. The parser additionally treats office manager, call center, and administrative assistant titles as targets, expanding the monitored role set beyond the stated purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The natural-language signal Bilingual needed → Sofia angle operationalizes language-related targeting in a fixed way without offering any user choice or documented justification. This can be interpreted as enforcing a language/locale-related preference in the skill's behavior rather than leaving such criteria to explicit user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.