Back to skill

Security audit

free_google_search_with_browser

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Google-search helper that opens a visible browser and sends the user's query to Google, with some install and privacy cautions but no artifact-backed malicious behavior.

Install only in an isolated environment you are comfortable using for live web browsing. Expect it to open a visible browser, send search queries to Google, download browser/dependency artifacts during setup, and create a local scrapling_storage.db file. Avoid sensitive queries unless you accept that exposure, and prefer pinned dependencies before production use.

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
requirements.txt:1
Finding
Unpinned Third-Party Dependencies Permit Unreviewed Supply-Chain Updates<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:1-6`; installation instructions at `SKILL.md:24-28` **Vulnerability Type**: Unpinned third-party dependencies and browser artifacts **Risk Level**: Medium ### Vulnerable Code `requirements.txt:1-6`: ```text scrapling>=0.4.2 curl_cffi>=0.14.0 playwright>=1.58.0 patchright>=1.58.2 msgspec>=0.20.0 browserforge>=1.2.4 ``` `SKILL.md:24-28`: ```bash To install dependencies: ```bash pip install -r requirements.txt playwright install # Required for browser automation. If slow, consider downloading manually. ``` ``` ### Technical Analysis Every Python dependency uses an open-ended minimum-version constraint. Consequently, `pip install -r requirements.txt` may install future releases that were not available or reviewed when this Skill was audited. The dependency graph is also not locked, so compatible transitive dependencies can change independently. The separate `playwright install` command downloads executable browser artifacts without documenting a pinned browser revision, integrity verification process, or trusted artifact policy. While downloading dependencies is necessary to install the declared search functionality, allowing versions and executable artifacts to vary exceeds the minimum reproducibility needed for that functionality. This is a supply-chain weakness rather than evidence that the currently named packages are malicious. Exploitation requires compromise of a package, maintainer account, distribution channel, dependency resolution path, or downloaded browser artifact. ### Attack Path 1. An attacker compromises the release process or distribution account of a listed direct dependency, one of its transitive dependencies, or a browser artifact source. 2. The attacker publishes a malicious version satisfying the open-ended constraints, such as a version newer than `scrapling 0.4.2`. 3. A user follows `SKILL.md` and executes `pip install -r requirements.txt` or `playwright in ...[truncated 1023 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace open-ended constraints with exact versions that have been reviewed and tested, for example `package==x.y.z`. 2. Generate and commit a dependency lock file covering direct and transitive dependencies. 3. Require package hashes during installation, such as a hash-locked requirements file used with `pip install --require-hashes`. 4. Review dependency provenance, release signatures, maintainers, and vulnerability advisories before accepting updates. 5. Pin the Playwright package and corresponding browser revision. Verify downloaded browser artifacts through supported checksums, signatures, or an internally controlled artifact repository. 6. Install dependencies in an isolated virtual environment or container under an unprivileged account. Do not run installation commands as root or administrator. 7. Route dependency upgrades through an explicit review and testing process rather than accepting newly published compatible releases automatically. 8. Consider using a trusted internal package mirror and denying unexpected package indexes to reduce dependency-confusion and repository-compromise exposure. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (12)

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill clearly performs live network access to Google, but the manifest does not declare any tool scope or permission boundary for that capability. This is dangerous because the agent may invoke external network activity without explicit policy visibility, review, or user consent controls, increasing the chance of unintended data disclosure or unauthorized browsing behavior.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The invocation description says to use the skill when the user asks to 'search Google or find information online,' which is broad enough to trigger on many unrelated requests. Overly broad activation increases the risk that the agent will launch a browser and contact external services unexpectedly, potentially exposing prompts, queries, or browsing activity without the user understanding that this specific skill is being used.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill documentation describes browser automation and structured search, but it does not prominently warn users that it launches a visible browser window and sends live requests to Google. This lack of disclosure is risky because users may unintentionally reveal sensitive queries or be surprised by UI/browser side effects in their environment.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill explicitly enables anti-bot/captcha evasion by calling the fetcher with `solve_cloudflare=True` and using a stealth-oriented browser fetcher for a basic Google search workflow. That exceeds what is necessary for ordinary search functionality and can facilitate bypass of site protections, increasing legal, abuse, and policy risk if reused against other targets or if Google presents protective challenges.

Missing User Warnings

Low
Confidence
86% confidence
Finding
The code silently configures persistent local storage in `scrapling_storage.db` without disclosure or controls. Even if intended for scraper state, this can leave behind browsing/session artifacts on disk, create privacy or forensic concerns, and cause unexpected file writes in environments that assume the skill is read-only.

Unpinned Dependencies

Low
Category
Supply Chain
Content
scrapling>=0.4.2
curl_cffi>=0.14.0
playwright>=1.58.0
patchright>=1.58.2
Confidence
96% confidence
Finding
The dependency is specified with a lower bound only, which allows future builds to resolve to different versions over time. This weakens supply-chain integrity and reproducibility, and can unexpectedly introduce vulnerable or breaking releases into a skill that performs web access.

Unpinned Dependencies

Low
Category
Supply Chain
Content
scrapling>=0.4.2
curl_cffi>=0.14.0
playwright>=1.58.0
patchright>=1.58.2
msgspec>=0.20.0
Confidence
99% confidence
Finding
The curl_cffi dependency is unpinned, so installations may pull in different versions, including versions affected by known advisories. Because this skill performs external web requests and browser-like behavior, an unsafe curl_cffi release could increase exposure to SSRF or bundled libcurl vulnerabilities.

Unverifiable Dependency: curl_cffi has 3 known advisory(ies) (GHSA-3vpc-4p9p-47hc (curl_cffi bundles a version of libcurl affected by High Severity vulnerability); CVE-2026-33752 (curl_cffi: Redirect-based SSRF leads to internal network access in curl_cffi (wi); CVE-2026-33752 (curl_cffi: Redirect-based SSRF leads to internal network access in curl_cffi (wi)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
98% confidence
Finding
The manifest does not pin curl_cffi, and the package has known advisories including a redirect-based SSRF issue and bundled libcurl exposure. In a skill designed to search the web and fetch remote content, that context makes the risk more relevant because attacker-controlled URLs or redirects could potentially be leveraged to reach internal resources or vulnerable network paths.

Unpinned Dependencies

Low
Category
Supply Chain
Content
scrapling>=0.4.2
curl_cffi>=0.14.0
playwright>=1.58.0
patchright>=1.58.2
msgspec>=0.20.0
browserforge>=1.2.4
Confidence
95% confidence
Finding
An unpinned playwright dependency permits non-reproducible installs and unreviewed upstream changes. In a browser automation skill, that can introduce unexpected security or stability regressions without any source-code change in the skill itself.

Unpinned Dependencies

Low
Category
Supply Chain
Content
scrapling>=0.4.2
curl_cffi>=0.14.0
playwright>=1.58.0
patchright>=1.58.2
msgspec>=0.20.0
browserforge>=1.2.4
Confidence
95% confidence
Finding
The patchright package is unpinned, creating supply-chain risk from version drift and making it hard to verify which code is installed. Given that this package appears related to browser automation/patching, unexpected upstream changes could materially alter security-sensitive browser behavior.

Unpinned Dependencies

Low
Category
Supply Chain
Content
curl_cffi>=0.14.0
playwright>=1.58.0
patchright>=1.58.2
msgspec>=0.20.0
browserforge>=1.2.4
Confidence
94% confidence
Finding
msgspec is also unpinned, so builds are not deterministic and may silently consume newer versions. While this is lower risk than a networking library, it still contributes to supply-chain uncertainty and can introduce vulnerabilities or incompatible behavior.

Unpinned Dependencies

Low
Category
Supply Chain
Content
playwright>=1.58.0
patchright>=1.58.2
msgspec>=0.20.0
browserforge>=1.2.4
Confidence
95% confidence
Finding
browserforge is unpinned, which allows unnoticed version changes in a package likely involved in browser fingerprinting or emulation. In a skill that launches a browser and accesses online content, that increases supply-chain and behavioral risk, especially if the dependency changes stealth or network-handling features.

Static analysis

No suspicious patterns detected.