Back to skill

Security audit

Guaikei Kuaishou Hashtag Video Fetcher

Security checks across malware telemetry and agentic risk

Overview

This skill coherently fetches public Kuaishou data through a disclosed third-party API, but users should know it automatically saves results locally.

Install only if you are comfortable sending Kuaishou queries, target URLs, and your GUAIKEI_API_TOKEN to the Guaikei API, and with successful results being saved under logs/. Treat those logs as potentially sensitive research or personal-data records and delete or protect them when no longer needed.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/utils/log.js:24
Finding
Automatic Plaintext Persistence of Collected Kuaishou Data## Vulnerability Details **File Location**: `scripts/utils/log.js:24-34` **Vulnerability Type**: Automatic plaintext storage of potentially sensitive collected data **Risk Level**: Medium ### Vulnerable Code ```js const outputFilename = path.join( path.dirname(__filename), "..", "..", "logs", safeFilename, ); try { await fs.promises.mkdir(path.dirname(outputFilename), { recursive: true }); await fs.promises.writeFile(outputFilename, content); ``` Successful commands pass their complete output to this function automatically: ```js await log.taskWrite( `${startTime}_${keyword}_${sort}_${time}_${duration}_${limit}_search.json`, JSON.stringify(finalOutput, null, 2), ); ``` Equivalent automatic writes occur in: - `scripts/kuaishou/search-cli.js:208-211` - `scripts/kuaishou/post-cli.js:181-186` - `scripts/kuaishou/comment-cli.js:161-166` ### Technical Analysis Every successful search, creator-post query, or comment query is automatically written to the project’s `logs/` directory. The persisted JSON can contain search interests, requested profile or video identifiers, public creator details, commenter identities, comment text, interaction metadata, and other complete API response fields. The implementation does not require explicit user consent before persistence, does not provide a retention or deletion mechanism, and does not request restrictive permissions when creating the directory or file. Consequently, effective access is governed by the process umask and surrounding filesystem permissions. Search terms and target identifiers may also appear in filenames, exposing research activity through directory listings even without opening the files. Local persistence is not required to fulfill the declared core behavior of returning structured JSON through standard output. The automatic write therefore exceeds the minimum filesystem privileges needed for the operation. ### Atta ...[truncated 1400 chars]
Remediation
## Remediation Suggestions 1. Default to returning results through standard output without writing them to disk. 2. Make persistence explicitly opt-in through an option such as `--output` or `--save`. 3. Create the log directory with mode `0700` and result files with mode `0600`, while accounting for platform compatibility. 4. Use non-sensitive random identifiers in filenames rather than keywords, profile identifiers, or video identifiers. 5. Document exactly which data is stored, where it is stored, and how long it is retained. 6. Add configurable retention and secure cleanup controls. 7. Avoid retaining complete API responses when only a limited subset is needed. 8. Warn users before saving data that can identify creators, commenters, targets, or research interests. Example hardened write behavior: ```js await fs.promises.mkdir(path.dirname(outputFilename), { recursive: true, mode: 0o700, }); await fs.promises.writeFile(outputFilename, content, { encoding: "utf8", mode: 0o600, flag: "wx", }); ``` This hardening should supplement, not replace, making local persistence opt-in.

SkillSpector

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

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The CLI writes fetched comment data to a local JSON file automatically after completing the request, but the user-facing flow does not clearly disclose this persistence or offer a way to opt out. Persisting potentially sensitive or regulated data increases the risk of unintended retention, local disclosure, or later access by other users/processes on the system.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The README states that all task results are automatically saved to a logs/ directory, but it does not clearly warn users that scraped content, queried keywords, target profile URLs, and comment data may be written to local disk. In a data-scraping and competitor-monitoring tool, this can create unintended retention of potentially sensitive business intelligence or personal data, increasing exposure if the workstation, repository, or log directory is shared or later exfiltrated.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script silently saves retrieved comment data to disk without a user-facing warning, even though users may reasonably expect a CLI to print results only to stdout. This can create privacy and compliance issues because comment content and request metadata remain on disk after execution without informed consent.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The script writes the full fetched result set to a local JSON file derived from the queried profile identifier without any explicit consent, disclosure, or opt-in control. Because the results may contain scraped profile/post data and execution metadata, this creates a local data exposure risk on shared systems or in automated environments where users may not realize persistent artifacts are being created.

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

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:15