Back to skill

Security audit

xhs-topic-track

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Xiaohongshu public-data tool, but it handles API tokens, tokenized links, and saved results in ways that deserve review before installation.

Install only if you are comfortable sending Xiaohongshu keywords, note/profile URLs, and retrieved public data to the GUAIKEI third-party API. Use a limited or disposable GUAIKEI_API_TOKEN where possible, avoid passing sensitive URLs, and review or delete the local logs/ directory after use.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
src/api/search.js:20
Finding

API Credential Exposed in URL Query Strings

Content
View full analysis
{ return await postJson( "/api/xiaohongshu/note-search/keyword", { _: Date.now(), token: token }, { keyword, type, sort, time, limit }, ); }, ``` The common request implementation serializes the parameters, including `token`, into the request URL: ```js async function postJson(path, params, data) { if (!path || typeof path !== "string") { throw new Error("path 必须是非空字符串"); } if (!params || typeof params !== "object") { throw new Error("params 必须是对象"); } if (!data || typeof data !== "object") { throw new Error("data 必须是对象"); } const fullPath = `${path}?${querystring.stringify(params)}`; const jsonData = JSON.stringify(data); const options = { host: constants.BASE_URL, path: fullPath, method: "POST", headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(jsonData), }, }; return await request(options, jsonData); } async function getJson(path, params) { if (!path || typeof path !== "string") { throw new Error("path 必须是非空字符串"); } if (!params || typeof params !== "object") { throw new Error("params 必须是对象"); } params._ = Date.now(); const fullPath = `${path}?${querystring.stringify(params)}`; const options = { host: constants.BASE_URL, path: fullPath, method: "GET", headers: { "Content-Type": "application/json", }, }; return await request(options); } ``` ### T ...[truncated 1808 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/validate/url.js:21
Finding

Trusted URL Allowlist Bypass Through Substring Matching

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
src/xiaohongshu/detail-cli.js:130
Finding

Automatic Plaintext Retention of Access-Bearing URLs and Retrieved Data

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (46)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description is about keyword-based Xiaohongshu reputation monitoring: searching notes by brand/product name, pulling note details and comments, and using that data to identify positive/negative feedback. The supplied code instead implements two API wrappers for a different function: creating and querying a task to fetch a blogger's published notes from a provided blogger URL with a result limit. There is no keyword search, no comment retrieval, and no analysis of user evaluations or sentiment. This is a material purpose mismatch, not merely an implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description is for a business-facing Xiaohongshu口碑监测 capability, but the supplied code only provides a reusable CLI utility for parsing arguments and generating help text. While such a utility could support a larger monitoring tool, this chunk itself does not implement the declared behavior, access the implied resource (Xiaohongshu), or perform any data collection/analysis related to brand/product reputation monitoring. Therefore the code chunk does not accurately represent the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared purpose describes a data collection and monitoring workflow for Xiaohongshu content, including keyword search, fetching note details, and retrieving comments for reputation analysis. The actual code chunk does none of that. It performs local file output by creating directories and writing content into a logs folder. Filesystem write capability is not reflected in the declared permissions, and the behavior shown is materially different from the declared business function. While logging can be a supporting detail, this chunk by itself only demonstrates logging and no evidence of the claimed Xiaohongshu monitoring features, so this is a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description emphasizes keyword-based brand/product reputation monitoring on Xiaohongshu, including pulling note details and comments to discover positive and negative user feedback. The supplied code does something materially different: it is a command-line tool for fetching posts from a specific Xiaohongshu blogger/profile URL, with a configurable limit. It validates profile URLs, calls APIs to create/get a post task, prints structured JSON, and saves results to a local file. There is no visible keyword search flow, no explicit comment retrieval in this chunk, and no analysis of sentiment or product feedback. The primary purpose therefore does not accurately match the implementation shown.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description promises a broader reputation-monitoring workflow: searching Xiaohongshu by brand/product keywords, pulling note details and comments, and using that data to identify positive and negative feedback. The supplied code chunk only implements a command-line search entrypoint. It parses arguments, validates/cleans the keyword, calls API methods to create and fetch a search task, prints structured JSON results, and writes the output to a local log file. There is no visible implementation here for extracting note details, collecting comments, or analyzing user evaluations/sentiment. Because the actual behavior shown is substantially narrower than the declared purpose, and it also writes results to disk without that being reflected in the description, this is a mismatch.

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 41)May include surrounding context.

md
- "分析这条小红书笔记评论区的主要观点和负面反馈: node src/xiaohongshu/detail-cli.js --url 'https://www.xiaohongshu.com/explore/xxx?xsec_token=yyy' --limit 100"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- "分析这条小红书笔记评论区的主要观点和负面反馈: node src/xiaohongshu/detail-cli.js --url 'https://www.xiaohongshu.com/explore/xxx?xsec_token=yyy' --limit 100"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- "分析这条小红书笔记评论区的主要观点和负面反馈: node src/xiaohongshu/detail-cli.js --url 'https://www.xiaohongshu.com/explore/xxx?xsec_token=yyy' --limit 100"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- "看这个小红书博主最近 20 条作品都在发什么: node src/xiaohongshu/post-cli.js --url 'https://www.xiaohongshu.com/user/profile/xxx?xsec_token=yyy' --limit 20"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- "看这个小红书博主最近 20 条作品都在发什么: node src/xiaohongshu/post-cli.js --url 'https://www.xiaohongshu.com/user/profile/xxx?xsec_token=yyy' --limit 20"

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- "看这个小红书博主最近 20 条作品都在发什么: node src/xiaohongshu/post-cli.js --url 'https://www.xiaohongshu.com/user/profile/xxx?xsec_token=yyy' --limit 20"

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes a keyword-based reputation monitoring skill that searches Xiaohongshu notes for brand or product names, then pulls note details and comments for sentiment/use-experience analysis. This CLI instead requires a '小红书博主链接' profile URL and creates a '主页笔记' task, meaning it retrieves posts from a specific creator profile rather than performing keyword-based brand/product monitoring.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill’s natural-language description, trigger examples, and operating instructions are written entirely in Chinese and present Chinese phrasing as the expected mode of use, with no indication that other languages are supported or that the user may choose their preferred language. Under the policy, a locale or language constraint should either be optional or clearly documented and justified; that user-facing choice is missing here.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README materially expands the tool’s scope beyond the manifest’s stated use of brand/product keyword monitoring and note/comment sentiment tracking into competitor account surveillance, KOL screening, and trend prediction. This creates a security-relevant scope mismatch: users and platforms may grant trust or approval based on a narrower declared capability while the documentation promotes broader collection and analysis behaviors.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation mentions automatic saving to logs but does not clearly warn that user queries, monitored URLs, and fetched results may be written to disk by default. In this skill’s context, those inputs can reveal sensitive business intent such as competitor monitoring targets, campaign research, or product-reputation investigations, making silent logging more dangerous than in a generic utility.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This changelog forces a specific language/locale for users by presenting all natural-language content in Chinese only. The policy allows locale constraints only when users are given a choice or when the restriction is clearly documented and justified, neither of which appears here.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes a skill focused on searching Xiaohongshu notes by brand/product keywords, pulling note details and comments, and monitoring user sentiment and usage feedback. The changelog expands the skill’s described behavior to include monitoring a creator’s works, mining hot notes, competitor analysis, KOL screening, and trend monitoring, which are broader commercial-intelligence functions than the manifest claims.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation exposes a blogger-post monitoring capability that appears broader than the skill's declared scope of keyword-based note and comment monitoring. This scope expansion can cause users or orchestrators to invoke undeclared collection of public profile content, weakening least-privilege assumptions and increasing the chance of unreviewed data access paths being used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The document instructs users to configure GUAIKEI_API_TOKEN without clearly stating that the token authorizes requests to an external service and that user inputs and retrieved platform data may be transmitted there. This can lead to uninformed credential use and data-sharing assumptions, especially in a skill that processes social-media content and comments.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This file’s natural-language interface documentation is entirely in Chinese, including module and parameter descriptions, with no indication that language is configurable or optional. Under the policy, forcing a specific language without user opt-in is a locale/language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

All user-oriented natural-language documentation in this file is written only in Chinese, with no indication that language selection is optional or that the skill is intentionally limited to a Chinese-speaking context. Under the stated policy, forcing a specific language without user opt-in can be a locale-policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code contains natural-language comments and CLI-facing messages exclusively in Chinese, including errors and help text. Under the policy, forcing a specific language without offering a language choice or documenting a justified locale constraint is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The user-facing strings at L22-L25 are entirely in Chinese and there is no indication that the skill is China-specific or that users can opt into another language. This creates a natural-language policy concern because the skill imposes a specific language on all users without choice or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code emits all visible status and error messages in Chinese, including validation errors and success/failure output. The file provides no indication that the skill is intentionally China/Chinese-locale specific or that users can opt into another language, which conflicts with the policy against forcing a specific language without user choice.

Content

No source excerpt is available for this finding.