Back to skill

Security audit

thumbtack-mcp

Security checks for vulnerabilities and agentic risk

Overview

This skill is a read-only Thumbtack lookup helper that clearly discloses its shell and network use, with no evidence of hidden persistence, credential access, destructive behavior, or remote code execution.

Install only if you are comfortable with the agent making outbound anonymous requests to Thumbtack and parsing the returned pages locally. Keep profile URLs limited to real Thumbtack pages, and do not use it for account messages, quotes, projects, or any logged-in Thumbtack surface.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (10)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · SKILL.md (reported line 3)May include surrounding context.

md
---
name: thumbtack
description: "Query thumbtack.com from a shell — search local service pros by trade and zip, and read pro profiles with ratings, reviews, credentials, business hours and pricing. Uses plain curl against Thumbtack's SSR pages and its anonymous GraphQL endpoint; no API key, no login, no browser extension. Use when you want Thumbtack data without an MCP server, in a script, or one-shot."
---

# Thumbtack access (curl)

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

The skill instructs piping content fetched from an arbitrary <profile-url> directly into a local Node-based parser. Although the fetched data is treated as input rather than executed as code, accepting a user-supplied URL broadens the behavior from Thumbtack-only retrieval to generic remote content ingestion, which can enable SSRF-like misuse, unexpected internal network access, or parser abuse if the URL is not constrained.

Content

Scanner excerpt · SKILL.md (reported line 44)May include surrounding context.

Read a pro profile — the ld+json path is simplest:

sh
curl -sSL -A "$UA" "<profile-url>" | node "$TT" ldjson | jq '.["@graph"][0]'

For credentials, business hours, payment methods and specialties use

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · references/discovery.md (reported line 16)May include surrounding context.

Thumbtack canonicalises loose slugs by redirect. Ask it rather than guessing:

sh
curl -sSL -o /dev/null -A "$UA" -w '%{url_effective}\n' \
  "https://www.thumbtack.com/k/plumbing/near-me?zip_code=28203"
# https://www.thumbtack.com/k/plumbers/near-me?zip_code=28203   <- canonical slug is "plumbers"

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · references/discovery.md (reported line 63)May include surrounding context.

Pro profile — summary (ld+json, simplest)

sh
curl -sSL -A "$UA" "$PROFILE_URL" | node "$TT" ldjson | jq -c '.["@graph"][0] | {
   name, description,
   rating: (.aggregateRating.ratingValue*100|round/100),
   reviews: .aggregateRating.reviewCount,

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · references/discovery.md (reported line 86)May include surrounding context.

Pro profile — summary (ld+json, simplest)

sh
curl -sSL -A "$UA" "$PROFILE_URL" | node "$TT" ldjson | jq -c '.["@graph"][0] | {
   name, description,
   rating: (.aggregateRating.ratingValue*100|round/100),
   reviews: .aggregateRating.reviewCount,

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · references/discovery.md (reported line 97)May include surrounding context.

Pro profile — summary (ld+json, simplest)

sh
curl -sSL -A "$UA" "$PROFILE_URL" | node "$TT" ldjson | jq -c '.["@graph"][0] | {
   name, description,
   rating: (.aggregateRating.ratingValue*100|round/100),
   reviews: .aggregateRating.reviewCount,

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · tt-extract.mjs (reported line 3)May include surrounding context.

js
#!/usr/bin/env node
// Extract Thumbtack SSR data stores from a page on stdin.
// Usage: curl -sSL <url> | node tt-extract.mjs next|apollo|ldjson
const mode = process.argv[2] || 'next';
let html = '';
process.stdin.setEncoding('utf8');

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill explicitly instructs use of shell commands (curl, jq, node) but does not declare any tool restrictions or allowed-tools scope. That creates an avoidable trust gap: an agent may execute networked shell operations without an explicit permission boundary, increasing the chance of unintended external access or abuse if the skill is invoked in a broader automation context.

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 · references/discovery.md (reported line 129)May include surrounding context.

Useful for paging past the SSR page's 10 results / fixed review window.

sh
curl -sS -X POST https://app.thumbtack.com/graphql -A "$UA" \
  -H 'content-type: application/json' -H 'origin: https://www.thumbtack.com' \
  -d '{"query":"query{__typename}"}'
# {"data":{"__typename":"Query"}}

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 · references/discovery.md (reported line 145)May include surrounding context.

jq -c '{query:"query SP($input: ServicePageInput!){ servicePage(input:$input){ __typename shareableURL hasVerifiedPhoneNumber sections{ __typename } } }", variables: .}' vars.json > q.json

curl -sS -X POST https://app.thumbtack.com/graphql -A "$UA"
-H 'content-type: application/json' -H 'origin: https://www.thumbtack.com' -d @q.json

text

Static analysis

No suspicious patterns detected.