Back to skill

Security audit

PowPow பதிவு — குமிழியைப் பதிவு செய்யுங்கள், பயணக் குறிப்புகளை வரைபடத்தில் பின் செய்யுங்கள், டிஜிட்டல் மனிதருடன் அரட்டையடியுங்கள்

Security checks for vulnerabilities and agentic risk

Overview

The skill’s PowPow registration and optional payment workflow is coherent, but it handles login tokens and payment checkout steps in ways that deserve review before installation.

Install only if you are comfortable letting the agent help create a PowPow account, send your email/username and optional avatar to global.powpow.online, generate one-click login links, and optionally create payment orders. Prefer using it on a single-user machine, verify the checkout destination before paying, and make sure cleanup is run after registration so the local login token is removed.

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/powpow-register.mjs:39
Finding

Predictable Shared Temporary State File Permits Session Token Disclosure

Content
View full analysis

Vulnerability Details

File Location: scripts/powpow-register.mjs, lines 39–55 and 203–211
Vulnerability Type: Predictable temporary file / local credential disclosure
Risk Level: Medium

Vulnerable Code

js
const BASE_URL = 'https://global.powpow.online';
const STATE_FILE = join(tmpdir(), 'powpow-register-state.json');
const PASSWORD_ENV = 'POWPOW_REGISTER_PASSWORD';

// ---------- 状态文件 ----------

function loadState() {
  try {
    return JSON.parse(readFileSync(STATE_FILE, 'utf8'));
  } catch {
    return {};
  }
}

function saveState(patch) {
  const s = { ...loadState(), ...patch };
  writeFileSync(STATE_FILE, JSON.stringify(s, null, 2), { mode: 0o600 });
  return s;
}

The registration flow subsequently stores the authenticated session token in this file:

js
const token = r.cookies['powpow_token'] || '';
if (!token) die('注册成功但未捕获到会话 cookie(平台响应异常)');
saveState({
  username: r.data?.user?.username || username,
  nickname: r.data?.user?.nickname || nickname,
  userId: r.data?.userId,
  token,
  step: 'registered-pending',
  registeredAt: new Date().toISOString(),
});

Technical Analysis

The script stores account state, including a PowPow JWT, at the fixed path powpow-register-state.json under the operating system's shared temporary directory. On common Unix-like systems, this resolves to a predictable path such as /tmp/powpow-register-state.json.

Although writeFileSync is passed mode 0600, that mode only controls permissions when Node.js creates a new file. It does not correct the ownership or permissions of an existing filesystem object. The write operation also does not request exclusive creation, reject symbolic links, or verify that the destination is a regular file owned by the current user.

Consequently, another local user who can create objects in the shared temporary directory may pre-create the predictable state path as an attacker-readable file or as a link to a suitable attacker-controlled destina ...[truncated 1916 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace the global fixed filename with a securely created, per-user random directory using mkdtempSync, with directory permissions restricted to the current user.
  • Create the state file atomically and exclusively using flags equivalent to O_CREAT | O_EXCL, with mode 0600.
  • Refuse to operate if secure exclusive initialization fails rather than opening a pre-existing path.
  • Before each read, write, or deletion, use link-safe filesystem operations and verify that the object:
    • is not a symbolic link;
    • is a regular file;
    • is owned by the effective user;
    • has restrictive permissions.
  • Where supported, use O_NOFOLLOW when opening the state file.
  • Keep the state directory and filename process- or workflow-specific so concurrent users and concurrent registrations cannot share or overwrite state.
  • Continue deleting session state after the workflow, but treat cleanup as defense in depth rather than the primary credential protection mechanism.
  • Consider avoiding persistent JWT storage entirely when the workflow can safely retain the token in process memory.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (22)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- மைய ஸ்கிரிப்ட் `scripts/powpow-register.mjs`: **பூஜ்ஜிய சார்புநிலை**, **Node ≥ 18** தேவை. தொடங்கும் முன் ஒரு முறை `node scripts/powpow-register.mjs status` இய

Natural-Language Policy Violations

High
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file is entirely in Tamil while the referenced UI labels and examples include Chinese, and it provides operational guidance without any instruction to match the user's language. That can cause the agent to force a language/script the user did not choose, increasing misunderstanding and making consent around sent content less clear.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill description and user-facing documentation are entirely in Tamil, with no indication that users may choose another language or locale. The policy explicitly calls for flagging language or locale constraints when they are imposed without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs the agent to create a payment order and then open the returned payment page using OS-level commands such as start/open/xdg-open. That causes local side effects and can launch a financial flow on the user's machine without an explicit, informed consent checkpoint immediately before execution, which increases phishing, surprise-action, and unsafe automation risk if the page path or destination is ever wrong, spoofed, or manipulated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The file instructs the agent to follow a fixed 'powpow' service tone and the entire skill is written to operate in a specific language context without offering user opt-in or alternatives. Under the policy, forcing a specific language or locale behavior without user choice is a natural-language policy concern unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest explicitly sets the skill language to "ta", while other metadata includes Chinese text, suggesting a fixed locale rather than a clearly justified region-specific tool. The file does not indicate that users can opt into another language or that the skill is intended only for Tamil-speaking users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documentation is presented primarily in Tamil with embedded Chinese, without any language-selection, translation, or opt-in mechanism. In a security-sensitive workflow involving credentials, JWT login links, payments, and account lifecycle actions, users or operators who cannot fully read the instructions may misunderstand sensitive steps, mishandle secrets, or be socially engineered into unsafe actions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file presents all operational instructions in Tamil and does not indicate that the user or operator can choose another language. Under the policy rule for natural-language violations, forcing a specific language without opt-in is a reportable issue unless the locale restriction is clearly justified, which is not stated here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This documentation forces a specific language/locale for all readers, and there is no indication that users can choose another language or that Tamil is an explicitly justified regional requirement. The policy specifically calls for flagging language or locale constraints when they are imposed without user opt-in.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The instruction to send screenshots 'as needed at runtime' and when the user 'wants to see' the result is broad and underspecified, which can cause the agent to push images without clear user consent or necessity. In a skill context, this can lead to over-sharing attachments, confusing UX, and unbounded invocation behavior, especially when paired with fallback remote URLs.

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 file contains natural-language instructions, usage text, and operational messages only in Chinese, including the header documentation and runtime output. Under the policy, forcing a specific language without opt-in is a locale/language policy violation unless the constraint is explicitly justified or user choice is offered.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The header comment states that the JWT token is deleted when the process ends, but the implementation only removes the state file when the user explicitly runs cleanup. This can leave valid session tokens and account metadata in a predictable temp-directory file longer than users expect, increasing exposure to local credential theft or accidental reuse on shared systems.

Content

No source excerpt is available for this finding.