T08 · Insecure Dependencies
- Location
scripts/install.js:19- Finding
Unpinned Third-Party Components Are Downloaded and Installed as Executable Skills
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This city-planning skill is mostly coherent, but its installer and generated reports create review-worthy supply-chain and local-file risks.
Install only if you are comfortable with it modifying your OpenClaw skills directory, installing unpinned third-party components, using browser automation for social-media pages, and saving route/property/accessibility reports locally. Review scripts/install.js before running it, avoid running it with elevated privileges, and treat generated HTML reports as network-enabled pages rather than fully offline files.
scripts/install.js:19Unpinned Third-Party Components Are Downloaded and Installed as Executable Skills
scripts/install.js:52Shell Command Injection Through Exported Installer Functions
scripts/dispatcher.js:449Output Path Traversal Permits Arbitrary User-Writable File Overwrite
assets/templates/base_card.html:6Generated Local Reports Execute Mutable Remote JavaScript
The documented feature set emphasizes maps and lifestyle planning, but the observed behavior includes specialized Xiaohongshu scraping, CLI-style grabbing, and writing extracted results to local files, while some headline features are not evidently implemented. Such overclaiming and under-disclosure can conceal riskier data collection or filesystem behavior behind a friendlier description.
The documented feature set emphasizes maps and lifestyle planning, but the observed behavior includes specialized Xiaohongshu scraping, CLI-style grabbing, and writing extracted results to local files, while some headline features are not evidently implemented. Such overclaiming and under-disclosure can conceal riskier data collection or filesystem behavior behind a friendlier description.
Referenced artifact was not completely inspected
- 脚本 `scripts/xiaohongshu-grabber.js` 专门处理此类链接
Referenced artifact was not completely inspected
node scripts/install.js
The skill advertises installation steps and capabilities that involve shell execution, network access, and environment interaction, yet it declares no explicit tool scope or permissions. In a skill ecosystem, missing scope boundaries increases the chance the agent can invoke more powerful tools than users expect, especially when the skill also writes local files and installs dependencies.
The activation phrasing is broad enough to match ordinary conversation such as expressing fatigue or wanting to go out, which can cause the skill to trigger unexpectedly. In a skill that may scrape websites, install dependencies, or write local files, accidental activation increases the likelihood of surprising side effects without clear user intent.
The skill explicitly instructs use of a browser automation component to handle platforms with anti-scraping protections and frames a dedicated script as handling such links. In context, this goes beyond ordinary city-assistant behavior and creates a mechanism for bypassing site defenses, which can expose users to legal, account, and platform-abuse risks.
The skill uses softened language to describe handling links from platforms with strong anti-crawling controls while recommending special tooling to get around those controls. Euphemistic framing is risky because it obscures that the behavior is effectively anti-scraping bypass, making users less likely to recognize the security and compliance implications.
The skill states that it saves generated HTML cards locally but does not describe filenames, output paths, overwrite behavior, or whether untrusted content may be embedded in those files. Silent local file creation can lead to user confusion, data clobbering, or persistence of scraped content on disk beyond user expectations.
Using npx skills without a pinned version makes the installation path non-deterministic and vulnerable to supply-chain risk if the fetched package changes or is compromised. Because this is presented as a recommended install path, users may unknowingly execute unreviewed code from the network.
The HTML document is explicitly marked with lang="zh-CN", which enforces a specific language/locale in the rendered output. Under the policy rules, forcing a locale without offering user choice or documenting a justified regional constraint is a natural-language policy violation.
The HTML root sets lang="zh-CN", which forces a specific language/locale in the rendered output. This is a natural-language policy concern because the template does not indicate user opt-in, fallback behavior, or a documented region-specific justification for restricting output to Simplified Chinese.
The HTML document hard-codes lang="zh-CN", which imposes a specific language/locale setting. Under the policy, forcing a locale without user opt-in or a clearly documented region-specific justification is a natural-language policy concern.
The template sets lang="zh-CN" and uses Chinese labels throughout the interface, which imposes a specific language/locale on all users. Under the policy, locale-specific behavior should either offer user opt-in/choice or be clearly documented as a justified region-specific constraint.
The title and operating instructions are entirely in Chinese and line 3 states that all requests must be routed according to this document, but there is no indication that users may choose another language. This constitutes a language/locale constraint without opt-in or justification.
The trigger phrases for '情绪盲盒模式' are very broad and map common conversational language directly into a data-fetching workflow. In this skill, broad intent capture matters because activation can lead to autonomous web fetching, route generation, and file creation without confirming user intent, making unintended tool use and data handling more likely.
The workflow directs the agent to write generated HTML files locally and provide the path, but it does not require informing the user beforehand that persistent files will be created. Silent local persistence is risky because outputs may contain scraped content, location data, or inferred accessibility/property preferences that remain on disk after the interaction.
The manifest describes a city concierge focused on mood-based outings, link-to-itinerary conversion, housing radar, and accessibility support. However, the '硬核管家模式' is defined to automatically trigger broad surrounding-facility scans and commute analysis without further user instruction, turning a housing query into a more expansive neighborhood profiling workflow than the concise description suggests.
The housing workflow says that once certain intent is recognized, the agent should automatically perform a five-dimensional neighborhood scan '无需用户吩咐'. In a property-evaluation context, this expands data collection and analysis beyond the user's explicit request boundary and can infer personal priorities such as commute and family needs without consent, which is risky even if not overtly malicious.
The workflow explicitly instructs the agent to perform web scraping and downstream analysis immediately after detecting accessibility-related trigger words, while avoiding follow-up questions. In this context, that can cause unconsented collection, inference, and processing of sensitive health- or disability-adjacent information based on a single keyword, increasing privacy risk and the chance of acting on incorrect assumptions.
The routing rules rely on underspecified keyword matching across multiple modes, with no negative examples, precedence rules, or ambiguity handling. In this skill, misrouting is security-relevant because each mode can trigger different external fetches, analysis flows, and local file writes, so a casual phrase may cause the wrong workflow to run and process unnecessary data.
The global rules make local file creation mandatory for all modes without any user-facing disclosure. Because these modes process itinerary, property, and accessibility-related information, mandatory undisclosed persistence increases privacy exposure and creates unnecessary retention of potentially sensitive derived data.
The skill’s stated purpose is city guidance using maps and web scraping, but this code derives filesystem locations from HOME/USERPROFILE and operates in a persistent workspace directory. That local environment and filesystem access is not an obvious requirement of route planning or housing/accessibility assistance as described in the manifest.
The manifest describes a city-life assistant focused on map- and web-based planning features such as mood suggestions, link-based route generation, housing radar, and accessibility support. This file implements a generic file-export pipeline that writes rendered HTML to the local workspace, which is a broader document-generation/output behavior not clearly reflected in the manifest description.
The installer provisions agent-browser and explicitly frames it as necessary for anti-crawl sites, expanding the skill's capabilities well beyond a normal city-assistant function into full browser automation. That increases the attack surface substantially, since a browser automation skill can access authenticated web sessions, interact with arbitrary sites, and be repurposed for unintended automation or data access.