Back to skill

Security audit

Job Lead Radar

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward job-board scraping skill whose network requests, local output file, and optional cron usage match its stated purpose.

Install in a virtual environment, pin or review the `scrapling` dependency before use, and only run or schedule it when you are comfortable sending the chosen job query to the listed third-party job sites and storing results/logs locally.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:61
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:61
Vulnerability Type: Unpinned third-party dependency and supply-chain risk
Risk Level: Medium

Vulnerable Code

markdown
## Dependencies

- Python 3.7+
- `scrapling` (`pip install scrapling`)

The installed package is subsequently imported and trusted by the application:

python
try:
    from scrapling.fetchers import Fetcher
except ImportError:
    print("ERROR: scrapling not installed. Run: pip install scrapling")
    sys.exit(1)

Technical Analysis

The installation instructions use pip install scrapling without specifying a reviewed version, cryptographic hash, lockfile, or trusted package index. Consequently, each installation may resolve to whichever package release is current at that time rather than to the version reviewed with this project.

Python packages can execute code during package building or installation, and their imported modules execute initialization code when loaded. The script imports scrapling.fetchers at startup and instantiates its Fetcher class, placing the dependency within the application's trusted execution path.

This issue does not establish that the current scrapling package is malicious. It creates a supply-chain exposure if the upstream project, maintainer account, release process, distribution infrastructure, or a future release is compromised.

Attack Path

  1. An attacker compromises the upstream package maintainer account, build pipeline, or package distribution channel.
  2. The attacker publishes a malicious or backdoored release under the expected scrapling package name.
  3. A user follows the documented command and runs pip install scrapling.
  4. Because no version or hash is pinned, the package installer resolves and installs the attacker-controlled release.
  5. Malicious code may run during installation or when scripts/scrape.py imports scrapling.fetchers.
  6. The ...[truncated 777 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin scrapling to a specifically reviewed version rather than installing the latest available release:
    text
    scrapling==REVIEWED_VERSION
    
  2. Store dependencies in a committed requirements or lock file.
  3. Generate and verify cryptographic hashes, then install with hash enforcement:
    bash
    python -m pip install --require-hashes -r requirements.txt
    
  4. Explicitly use the intended package index and avoid untrusted extra indexes:
    bash
    python -m pip install --index-url https://pypi.org/simple --require-hashes -r requirements.txt
    
  5. Review the pinned package version and its transitive dependencies before release.
  6. Run the scraper in a dedicated virtual environment or restricted container under a non-privileged account.
  7. Use automated dependency monitoring, but require review and testing before updating the lockfile.
  8. Update SKILL.md and the import-error message in scripts/scrape.py so they direct users to the locked installation procedure instead of an unrestricted pip install scrapling command.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger phrases are broad enough to match many ordinary job-related requests, increasing the chance the skill is invoked when the user did not explicitly intend web scraping or scheduled monitoring. Because the skill can perform network scraping and write outputs/logs locally, accidental invocation expands the attack surface and may cause unintended data collection or external requests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The skill documentation describes output locations, but it does not clearly warn users up front that execution creates or appends local artifacts such as job_leads.json and cron/log files. This reduces informed consent and can lead to unexpected persistence of scraped data, disk usage, or exposure of sensitive search activity on shared systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The script writes collected data to job_leads.json, which is a file write operation covered by SQP-2. Although there is a print after saving, the top-level docstring and usage instructions do not warn users in advance that running the script will create or overwrite a file in the script directory.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code file makes outbound HTTP requests to third-party services using the provided search query, which is a safety-relevant network operation under SQP-2. While the script prints which site it is scraping, it does not clearly warn the user that it will contact external services and transmit their query to those sites.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.