Back to skill

Security audit

Zhihu Keyword Search API

Security checks for vulnerabilities and agentic risk

Overview

This skill is a narrow Zhihu search API wrapper, with a real but disclosed credential-handling risk around passing the API token in the command line and query string.

Install only if you are comfortable sending Zhihu search terms and your JustOneAPI token to JustOneAPI. Prefer a narrowly scoped or disposable token if available, avoid sharing logs or process listings from runs, and rotate the token if you suspect command history, monitoring, or URL logs exposed it.

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
bin/run.mjs:211
Finding

API Credential Exposed Through URL Query String and Command-Line Arguments

Content
View full analysis
item.location === "query")) { const value = params[parameter.name]; if (value === undefined) { continue; } appendValue(url.searchParams, parameter.name, value); } } ``` The documented invocation also supplies the credential as a command-line argument: ```bash node {baseDir}/bin/run.mjs --operation "searchZhihuV1" --token "$JUST_ONE_API_TOKEN" --params-json '{"keyword":""}' ``` ### Technical Analysis The operation manifest defines `token` as a query parameter. `injectToken()` copies the credential supplied through `--token` into the parameter object, after which `applyQueryParams()` serializes it into the request URL. The resulting request has the effective form: ```text https://api.justoneapi.com/api/zhihu/search/v1?token=&keyword=&offset=0 ``` HTTPS protects the request URL from passive network observers while it is in transit, and the destination is statically restricted to ...[truncated 2291 chars]
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (2)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) that sends user-provided query parameters and an API token to an external service, but it does not declare any explicit tool scope such as permissions or allowed-tools. This weakens sandboxing and review controls because an agent may be allowed to perform outbound network actions without a machine-readable restriction policy, increasing the chance of unintended or over-broad external access.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

This manifest-style JSON describes the skill only as calling a Zhihu keyword search with a keyword, but it provides no explicit trigger phrases, scope limits, or negative examples. In a manifest file, this kind of generic description can make it unclear when the skill should activate versus when a general search-related request should not invoke it.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.secret_argv_exposure

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
SKILL.md:42