Back to skill

Security audit

Google Maps Scraper (Apify)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Apify-based Google Maps scraping helper, but users should treat its contact/review scraping and Apify token handling carefully.

Install from a trusted source, prefer a pinned installer version, run it without elevated OS privileges, provide APIFY_TOKEN through a protected environment or secret manager rather than command-line arguments, set budget limits, and only enable contact enrichment or reviewer personal data when you have a lawful, explicit need.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/google_maps_scraper_actor.py:132
Finding

Apify API Token Exposed Through URL Query Parameters and Command-Line Arguments

Content
View full analysis
dict[str, Any]: params: dict[str, str | int | float] = { "token": token, "timeout": timeout_sec, "clean": "true", } if budget_usd is not None: if budget_usd <= 0: raise SkillError("--budget-usd must be > 0.") params["maxTotalChargeUsd"] = budget_usd url = ( f"https://api.apify.com/v2/acts/{urllib.parse.quote(actor_id, safe='')}/run-sync-get-dataset-items" f"?{urllib.parse.urlencode(params)}" ) ``` The CLI also accepts the credential directly: ```python common.add_argument("--apify-token", help="Apify API token (fallback: APIFY_TOKEN env)") ``` The troubleshooting documentation recommends the same insecure option: ```bash --apify-token 'apify_api_xxx' ``` ### Technical Analysis The implementation inserts `APIFY_TOKEN` into the request URL as the `token` query parameter. Although the request uses HTTPS, placing credentials in URLs increases their exposure because complete URLs may be retained by HTTP diagnostics, reverse proxies, API gateway logs, monitoring systems, exception reports, or debugging tools. The optional `--apify-token` argument creates an additional local disclosure channel. Command-line arguments can be retained in shell history and may be visible to other local users through process-inspection facilities while the process is running. The token is sent only to the declared Apify API endpoint, so the outbound authentication request is necessary for the Skill's functionality. The vulnerability is the transport location and credential-input mechanism, not the existence of the authenticated netw ...[truncated 1310 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
README.md:145
Finding

Unpinned npx Installation Executes a Mutable Third-Party Dependency

Content
View full analysis
Remediation
View remediation
add \ hundevmode/apify-google-maps-scraper-agent-skill \ --skill google-maps-scraper-apify ``` 2. Verify the exact package name and publisher and document the expected registry source. 3. Where supported, verify package integrity using a lockfile, checksum, provenance attestation, or signed release. 4. Prefer a previously installed, organization-approved CLI over downloading and executing a package during installation. 5. Document that the installation command executes third-party code and advise users not to run it from a privileged account. 6. Periodically review and update the pinned version through a controlled dependency-update process. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (15)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The README explicitly promotes use of scrapeReviewsPersonalData for review collection without providing a prominent privacy, legal, or data-minimization warning in the usage section itself. In a data-scraping skill, this increases the chance that agents or users will collect personal data by default or without adequate authorization, creating privacy, compliance, and misuse risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill documents use of environment credentials, file reads, and outbound network access but does not declare an explicit tool scope or allowed-tools boundary. That creates unnecessary privilege ambiguity: an agent/runtime may permit broader capabilities than intended, increasing the risk of secret exposure, unintended file access, or unauthorized external requests if the skill is invoked in a permissive environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill is explicitly designed to collect business contact data, optional website emails/phones/social links, and potentially reviewer profile data, but the top-level description does not warn that personal or contact data may be collected and returned. This omission can lead users or downstream agents to gather and process personal data without informed consent, appropriate minimization, or compliance review.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide explicitly promotes scraping company contacts and dataset export of emails and social profiles, but provides no privacy, consent, or lawful-use guidance. In a lead-generation context, this can facilitate collection and downstream misuse of personal or quasi-personal contact data at scale, increasing compliance and abuse risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The review and image options expose collection of personal-data-adjacent content such as review metadata and image authors, yet the guide presents them as routine toggles without warning about privacy implications. This normalizes harvesting user-generated content and attribution data that may be subject to legal, ethical, or policy restrictions when collected at scale.

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/google_maps_scraper_actor.py (reported line 144)May include surrounding context.

python
params["maxTotalChargeUsd"] = budget_usd

    url = (
        f"https://api.apify.com/v2/acts/{urllib.parse.quote(actor_id, safe='')}/run-sync-get-dataset-items"
        f"?{urllib.parse.urlencode(params)}"
    )
    body = json.dumps(payload).encode("utf-8")

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · LICENSE (reported line 12)May include surrounding context.

text
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The sample inputs set "language": "en" in recommended payloads, which imposes a specific language/locale choice in natural-language guidance. The file does not state that English is optional or invite the user to choose a language, so this appears to violate the language/locale policy requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

A second recommended payload explicitly sets "language": "en", again indicating a fixed language preference in the skill's natural-language guidance. Because no user choice or justification is provided, this is a repeat instance of the same locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The configuration sets the language to "en", which is a natural-language locale constraint. Because this file provides no indication that the user can choose a different language or that the English-only setting is required for a justified region-specific purpose, it may violate the language/locale policy.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This code sends the assembled payload, which may include user-provided search strings, locations, and optional scraped contact/review parameters, to the external Apify API. Although the script's purpose is to run an Apify actor, there is no confirmation prompt or explicit user-facing notice at the point of transmission that input data is being sent to a third-party service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The quick-search command sets --language to en by default, which forces a specific language/locale choice when the user does not explicitly select one. The file does not document this as a justified region-specific constraint or require opt-in before applying the English default.

Content

No source excerpt is available for this finding.