Back to skill

Security audit

Restaurant Crosscheck CN

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent restaurant cross-checking purpose, but it needs Review because it uses authenticated scraping, persistent browser sessions, anti-detection guidance, and unsafe install practices with weak disclosure.

Install only if you are comfortable with a tool that scrapes third-party sites using your logged-in browser sessions. Use a dedicated account or profile, review platform terms, avoid command-line token login examples, prefer an isolated virtual environment, and delete ~/.local/share/restaurant-crosscheck/sessions when done or if the machine is shared.

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)

T08 · Insecure Dependencies

Warning
Location
setup.sh:16
Finding

Unpinned dependencies and system-wide package installation

Content
View full analysis
/dev/null || pip3 install playwright thefuzz # 安装浏览器 echo "" echo "🌐 安装 Chromium 浏览器(约 200MB)..." python3 -m playwright install chromium ``` The root dependency manifest also uses open-ended lower bounds: ```text playwright>=1.40.0 thefuzz>=0.20.0 ``` The secondary manifest similarly uses non-exact constraints: ```text requests>=2.31.0 beautifulsoup4>=4.12.0 lxml>=4.9.0 playwright>=1.40.0 pandas>=2.0.0 numpy>=1.24.0 thefuzz>=0.3.1 urllib3>=2.0.0 ``` ### Technical Analysis The installer asks `pip` to resolve the latest compatible versions of packages and their transitive dependencies at installation time. It also downloads Playwright's Chromium distribution without pinning or independently verifying a specific artifact hash. As a result, the effective code installed by the setup process can change after the Skill has been reviewed. This is a supply-chain hardening deficiency rather than evidence that any currently named package is malicious. The use of `--break-system-packages` is particularly unsafe because it permits modification of an externally managed system Python environment. This exceeds the minimum installation scope necessary for the Skill, which can operate inside an isolated virtual environment. ### Attack Path 1. A user executes `setup.sh`. 2. The script contacts configured Python package indexes and Playwright artifact servers. 3. `pip` resolves mutable package and transitive-dependency versions available at that time. 4. If an upstream release, dependency, package index, or distribution path has been compromised, malicious installation or runtime code is do ...[truncated 841 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/session_manager.py:27
Finding

Persistent authenticated browser profiles lack explicit restrictive permissions

Content
View full analysis
Dict: if self.state_file.exists(): with open(self.state_file, 'r') as f: return json.load(f) return {"dianping": {"logged_in": False}, "xiaohongshu": {"logged_in": False}} def save_state(self, state: Dict): with open(self.state_file, 'w') as f: json.dump(state, f, indent=2) ``` A persistent authenticated browser context is then stored in those directories: ```python ctx = p.chromium.launch_persistent_context( str(session_dir), headless=False, args=BROWSER_ARGS, ) ``` The configured storage path is: ```python SESSION_BASE = os.path.expanduser("~/.local/share/restaurant-crosscheck/sessions") DIANPING_SESSION = os.path.join(SESSION_BASE, "dianping") XHS_SESSION = os.path.join(SESSION_BASE, "xiaohongshu") ``` The installer also creates the directories without setting permissions: ```bash mkdir -p ~/.local/share/restaurant-crosscheck/sessions/dianping mkdir -p ~/.local/share/restaurant-crosscheck/sessions ...[truncated 2388 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (80)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

Based on the supplied code chunk alone, the behavior does not substantiate the declared functionality. The script appears to be a demonstration wrapper that calls an external RestaurantCrossChecker class and prints outputs for two hardcoded examples. Because the actual implementation is not included, there is no evidence in this chunk that it cross-references Xiaohongshu and Dianping, fetches ratings and review counts, or computes confidence scores as described. This is a material description-behavior mismatch for the supplied code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

There is a clear description-behavior mismatch. The declared purpose describes an end-user restaurant analysis capability across Xiaohongshu and Dianping. However, the actual code chunk is purely a deployment utility for publishing the skill package to ClawHub. Its primary purpose is release management, not restaurant data retrieval or analysis. The code accesses local files and the ClawHub CLI/account state rather than restaurant platforms or geographic query inputs. This is not a supporting implementation detail of the declared functionality; it is an unrelated operational script.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Yes, this is a mismatch. The declared description promises substantial functional behavior: querying two external platforms, retrieving restaurant review metadata, comparing consistency, and generating validated recommendations. The actual supplied code does none of this; it is only a package initializer with a docstring and version number. While this could be a partial code sample, based on the supplied chunk alone the observable behavior does not substantiate the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a tool that automatically retrieves real ratings, review counts, and cross-platform evidence from Xiaohongshu and Dianping to validate restaurant quality. This code chunk does not perform network retrieval or scraping at all in its active path; instead, its only implemented search method is search_mock, which fabricates DianpingRestaurant and XiaohongshuPost objects with deterministic mock values. The CLI output even explicitly states that it is using simulated data and advises using another script for real data. While matching/scoring behavior is broadly aligned with the idea of cross-checking, the primary capability described—real cross-platform data fetching and validation by location—is absent from this code chunk, making the description materially inaccurate for this specific implementation.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents a dual-platform validation skill whose core value is comparing Xiaohongshu and Dianping results to assess restaurant quality and consistency. The supplied code implements only one platform-specific scraper for Dianping. Its actual behavior is limited to launching a persistent Chromium context, navigating Dianping search results, handling redirects, and parsing listing attributes. The missing cross-referencing and analysis are not minor omissions; they are central to the declared primary purpose. Additionally, while implementation details alone would not necessarily be a mismatch, the code clearly uses browser automation and persistent session storage despite the declaration listing no permissions, which is inconsistent with the described operational footprint.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose describes a dual-platform validation tool that cross-references Xiaohongshu and Dianping and analyzes consistency to produce trustworthy recommendations with confidence scores. This code chunk implements only a Dianping scraper. It does not access Xiaohongshu, does not merge or compare data from two platforms, and does not compute any confidence or consistency metrics. It also uses a persistent Playwright browser session to scrape Dianping, which is a notable resource/access behavior absent from the declared permissions. While fetching ratings and review counts from Dianping aligns partially with the description, the primary advertised behavior—cross-platform validation—is not implemented in this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose describes a dual-platform validation tool that compares Xiaohongshu and Dianping data to assess restaurant quality and consistency. This code chunk implements only the Xiaohongshu portion: it opens Xiaohongshu in a persistent Playwright browser context, searches for posts, scrolls, extracts note cards, parses likes, heuristically extracts restaurant names from titles, computes simple sentiment from title text, and merges duplicate mentions. There is no Dianping integration, no cross-referencing logic, no platform consistency analysis, no rating/review-count retrieval as described, and no confidence-score generation. The actual primary behavior is single-platform social-post scraping and lightweight text analysis, which is materially narrower and different from the declared validated cross-platform recommendation function.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose describes a dual-platform restaurant validation tool that cross-references Xiaohongshu and Dianping, gathers ratings and review counts, and analyzes consistency to provide confidence-scored recommendations. The supplied code chunk does not do that. It only scrapes Xiaohongshu search results, extracting engagement metrics (likes, saves, comments) from posts and performing heuristic restaurant-name extraction plus lightweight sentiment/keyword analysis. There is no Dianping integration, no cross-platform reconciliation, no explicit restaurant quality validation logic across sources, and no confidence score generation. The code’s primary purpose is materially narrower and different from the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The code is related to the declared domain: it does cross-platform restaurant matching and computes a consistency-style score between Dianping and Xiaohongshu data. However, the description claims a broader end-to-end capability: querying by location, automatically fetching platform data including ratings and review counts, and producing validated recommendations with confidence scores. This code chunk only implements the internal matching/scoring component over already-supplied lists of restaurant/post objects. It uses name normalization, optional fuzzy matching, engagement normalization, and consistency scoring, but contains no network access, scraping/API calls, location logic, review-count processing, or recommendation/confidence-generation pipeline. Therefore the description materially overstates what this specific code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents an analysis/recommendation skill that gathers restaurant data from Xiaohongshu and Dianping and compares results across platforms. The supplied code does not perform any of those tasks. Instead, it is solely an authentication/session utility: it launches browsers for manual login, persists session directories, tracks login timestamps, validates expiry, and resets sessions. While session management could be a supporting component of a broader scraping or comparison system, this chunk’s actual primary purpose is materially different from the declared purpose and adds an undeclared capability—interactive browser-based login/session persistence.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
See [scripts/requirements.txt](scripts/requirements.txt) for complete list.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document’s headings, instructions, warnings, and usage guidance are all presented in Chinese, which effectively forces a specific language for users of the skill. The stated policy flags language or locale constraints when they are imposed without user choice or explicit justification.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documentation describes persistent authenticated session storage and login-state management for third-party platforms, which expands the skill from simple review cross-checking into handling users' authenticated browser state. Stored cookies and localStorage can grant account access if exposed, so this creates meaningful security and privacy risk beyond the declared business purpose.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Claiming the system 'does not touch sensitive information' is misleading because the same document states it stores cookies, localStorage, and persistent session state. Authenticated session tokens are sensitive secrets; inaccurate security claims can cause users to underestimate risk and handle stored session data unsafely.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The statement that the skill does not collect personal information conflicts with its storage of authenticated platform session data, which can be linked to an identifiable user account and may expose account activity or identity. This mismatch creates privacy and compliance risk because users may not give informed consent for the actual data being retained.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documented auto-trigger conditions are very broad: any mention of a location, food/restaurants, and a recommendation request may invoke the skill during ordinary conversation. That can cause unintended tool execution, unnecessary external data access, and misleading behavior if the user did not explicitly ask for cross-platform restaurant validation. In this skill’s context, the danger is increased because the skill may perform scraping or launch browser-based workflows in the full version.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The guide instructs users to pass an API token directly on the command line using clawhub login --token "YOUR_TOKEN_HERE". This can expose the secret via shell history, process listings, terminal logs, or shared session tooling, creating a realistic credential leakage risk even though the file is only documentation.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · PUBLISH_GUIDE.md (reported line 220)May include surrounding context.

md
## 📖 参考资料

- **ClawHub 文档**: https://clawhub.com/docs
- **Skill 创建指南**: `/home/ubuntu/.npm-global/lib/node_modules/openclaw/skills/skill-creator/SKILL.md`
- **ClawHub CLI**: `clawhub --help`

---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The quickstart instructs users to authenticate to third-party services and save persistent login sessions for 1–2 weeks, but it does not explain where session artifacts are stored, how they are protected, or the privacy/security implications if those files are copied or exposed. In the context of a scraping/automation skill that accesses real user accounts on Dianping and Xiaohongshu, stored session tokens can enable unauthorized account access and expose personal data or platform activity.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file contains user-facing instructions exclusively in Chinese, including the title, steps, and warnings. The policy requires flagging language or locale constraints when the skill forces a specific language without user opt-in, and no alternative language option or justification is provided here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

The README is entirely in Chinese and all examples, outputs, and usage are presented only for Chinese-language/local-China contexts, with no indication that users may choose another language or locale. Under the stated policy, forcing a specific language or locale without opt-in can be a natural-language policy violation unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest says the skill is for cross-referencing restaurant recommendations to validate restaurant quality and consistency by location. In contrast, the README advertises use for massage, beauty, gyms, KTV, parent-child services, hotels, homestays, and scenic tickets, which is a materially broader domain than restaurants.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README states that authenticated platform sessions are saved automatically for 7 days but provides no warning about how those credentials/session artifacts are stored, protected, or invalidated. Persisted browser sessions can be stolen from disk, reused by other local users or malware, and may expose access to personal account data on Dianping or Xiaohongshu.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The examples suggest the skill may auto-trigger from broad natural-language requests like asking for recommended restaurants in an area, without precise activation constraints. Over-broad triggers increase the chance of unintended invocation, unnecessary external data access, and routing user requests to this skill when a simpler or safer response path would be more appropriate.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide names the skill as restaurant-review-crosscheck, but the documented invocation and binary name are restaurant-crosscheck. This inconsistency can cause the agent or operator to invoke the wrong executable or linked tool, creating confusion, accidental execution of an unintended program, or trust in output from a different component than the one reviewed.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.