Back to skill

Security audit

WeChat Official Accounts User Published Posts API

Security checks for vulnerabilities and agentic risk

Overview

This skill is a narrow JustOneAPI wrapper for one WeChat Official Accounts lookup endpoint, but users should treat its API token carefully because it is passed on the command line and in the request URL.

Install only if you trust JustOneAPI with this lookup and can use a narrowly scoped, revocable token. Avoid sharing the token in chat or logs, be aware that the current helper passes it via CLI and URL query string, and rotate the token if command or request logs may have captured 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:65
Finding

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` ```js function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => 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 "getUserPost" --token "$JUST_ONE_API_TOKEN" --params-json '{"wxid":""}' ``` ### Technical Analysis The Skill receives the JustOneAPI credential through `--toke ...[truncated 2841 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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
Findings (8)

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

This finding is a real issue in context because the code handles an access token and exposes it via a URL query parameter rather than a protected channel within the request metadata. The skill itself is not stealing or exfiltrating the token beyond making the intended API call, so this is credential exposure by insecure design rather than active credential theft.

Content

Scanner excerpt · bin/run.mjs (reported line 20)May include surrounding context.

js
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
97% confidence
Finding

This skill requests credential material ('token') to call a third-party API, which creates a real credential-handling risk. Even if the token is intended for legitimate API access, collecting and transmitting it through a skill expands the attack surface and may enable credential leakage or misuse if the skill runtime, logs, or integrations are compromised.

Content

Scanner excerpt · generated/operations.json (reported line 15)May include surrounding context.

json
"parameters": [
        {
          "defaultValue": null,
          "description": "Access token for the API.",
          "enumValues": [],
          "location": "query",
          "name": "token",

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · generated/operations.md (reported line 19)May include surrounding context.

md
| Name | In | Required | Type | Default | Description |
| --- | --- | --- | --- | --- | --- |
| `token` | `query` | yes | `string` | n/a | Access token for the API. |
| `wxid` | `query` | yes | `string` | n/a | The ID of the Weixin Official Account (e.g., 'rmrbwx'). |

### Request body

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes a network-capable helper (node {baseDir}/bin/run.mjs) that sends requests to an external API, but the manifest does not declare any tool scope such as permissions or allowed-tools. This weakens least-privilege enforcement and makes the skill's external communication behavior implicit rather than explicitly authorized, which can enable unintended data egress or execution in environments that rely on manifest-declared scopes for policy control.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill defines the API access token as a query parameter and later appends all query parameters directly to the request URL. Tokens in URLs are commonly exposed through logs, browser/history artifacts, proxy caches, analytics, and upstream server access logs, making credential leakage more likely than if the token were sent in an Authorization header.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest explicitly requires an API access token as a query parameter but does not warn that credentials will be transmitted to an external service. Sending tokens in query strings is risky because they may be exposed through logs, browser history, analytics, proxies, or downstream monitoring systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file documents a required token parameter for accessing the API, but it does not warn users that the value is a sensitive credential or advise careful handling. Because markdown files should disclose behaviors affecting privacy or system integrity, omission of any warning around credential use is a quality and safety gap.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This manifest-style JSON describes the skill's function in broad terms but does not define any specific activation phrases, exclusion conditions, or limits on when the skill should be invoked. For manifest files, that can create ambiguity about when this skill should activate versus other general WeChat-related skills.

Content

No source excerpt is available for this finding.