Back to skill

Security audit

Capterra Reviews API - Software Search, Pricing, Reviews

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent guide for using Scavio's Capterra API, with disclosed API-key use and no evidence of hidden persistence, local data access, or deceptive behavior.

Install only if you are comfortable using Scavio as an external paid API provider. Keep SCAVIO_API_KEY out of source control, monitor credit usage, and use an isolated environment or direct HTTPS calls if you want to avoid SDK supply-chain exposure.

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

Note
Location
SKILL.md:200
Finding

Third-Party SDK Installation Without Integrity Verification

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 136)May include surrounding context.

md
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Search - 20 products, no pagination. Refine the query for different results.
found = requests.post(f"{BASE}/api/v1/capterra/search", headers=HEADERS,
    json={"query": "project management software"}).json()

# 2. Full profile. product_id is a STRING; the 25 most recent reviews ride along free.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 140)May include surrounding context.

md
json={"query": "project management software"}).json()

# 2. Full profile. product_id is a STRING; the 25 most recent reviews ride along free.
profile = requests.post(f"{BASE}/api/v1/capterra/product", headers=HEADERS,
    json={"product_id": "186596"}).json()

# 3. Page PAST those 25. Pass back reviews_url (or the exact slug) - never a hand-typed slug.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 144)May include surrounding context.

json={"product_id": "186596"}).json()

3. Page PAST those 25. Pass back reviews_url (or the exact slug) - never a hand-typed slug.

more = requests.post(f"{BASE}/api/v1/capterra/reviews", headers=HEADERS, json={"url": profile["data"]["reviews_url"], "page": 2}).json()

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 156)May include surrounding context.

json={"product_id": "186596"}).json()

3. Page PAST those 25. Pass back reviews_url (or the exact slug) - never a hand-typed slug.

more = requests.post(f"{BASE}/api/v1/capterra/reviews", headers=HEADERS, json={"url": profile["data"]["reviews_url"], "page": 2}).json()

text

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:36