Back to skill

Security audit

PowPow રજીસ્ટ્રેશન — પરપોટો રજીસ્ટર કરો, પ્રવાસ વૃત્તાંત નકશા પર પિન કરો, ડિજિટલ હ્યુમન સાથે ચેટ કરો

Security checks for vulnerabilities and agentic risk

Overview

This looks like a real PowPow registration helper, but it handles account session tokens and payment pages in ways users should review before installing.

Install only if you are comfortable having the agent help create a PowPow account and send your email, chosen password, verification code, optional avatar/phone, and payment-order actions to PowPow. Use it on a trusted single-user machine, verify any payment page before paying, and run cleanup after the flow so the local token state 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:40
Finding

Predictable Shared Temporary File Exposes Session Credentials

Content
View full analysis

Vulnerability Details

File Location: scripts/powpow-register.mjs, lines 40–56, 203–211, and 420–424
Vulnerability Type: Predictable temporary file and symlink attack
Risk Level: Medium

Vulnerable Code

js
const STATE_FILE = join(tmpdir(), 'powpow-register-state.json');

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;
}
js
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(),
});
js
function cmdCleanup() {
  if (existsSync(STATE_FILE)) unlinkSync(STATE_FILE);
  ok('State file deleted');
}

Technical Analysis

The Skill stores workflow state at the fixed path powpow-register-state.json in the system-wide temporary directory. That state includes the user's email, account metadata, payment identifiers, and an authentication JWT.

Although writeFileSync() specifies mode 0600, that mode is reliably applied when creating a new file; it does not correct the permissions or ownership of an existing file. The write also follows symbolic links and does not use exclusive creation or no-follow protections.

On a multi-user host, an unrelated local user can create the predictable directory entry before the victim invokes the Skill. The entry can be an attacker-owned readable file or a symbolic link to another victim-writable target. The Skill does not verify that the path is a regular file owned by the current user before reading, writing, or deleting it.

A single global path also causes unrelated concurrent Skill invocations under the same account to share an ...[truncated 1670 chars]

Remediation
View remediation

Remediation Suggestions

  • Create a private, unpredictable per-run directory with mkdtempSync() and place the state file inside it.
  • Associate each state directory with a specific conversation or workflow instead of using one process-global filename.
  • Create the file atomically with exclusive creation semantics and reject pre-existing entries.
  • Use no-follow behavior where supported, or validate with lstat() that the path is a regular file rather than a symbolic link.
  • Verify file ownership, link count, and permission mode before every read and write.
  • Open the file through a descriptor with restrictive permissions and perform subsequent operations through that validated descriptor.
  • Remove the complete private temporary directory when the workflow ends or is aborted.
  • Avoid placing reusable bearer tokens in URL query parameters where possible; prefer a short-lived, single-use login exchange token.
  • Add automated tests covering symlink pre-creation, attacker-owned files, concurrent workflows, stale state, and cleanup failures.
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

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The natural-language instructions and descriptions in this file are exclusively in Gujarati, and the README does not indicate that the user can choose another language or that the skill is intentionally restricted to Gujarati speakers. This can violate language/locale policy when a specific language is effectively forced without opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README explicitly advertises agent-assisted registration, verification-code handling, and direct profile photo upload to an external service, but it does not clearly disclose to users that personal data, credentials, and media will be transmitted to PowPow. In a skill that intermediates account creation and payment-related flows, missing privacy and data-handling warnings can mislead users into sharing sensitive information without informed consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly instructs the agent to execute OS-level commands (start, open, xdg-open) on a file path returned by a script, which creates a trust boundary issue between the script output and the host system. If that path is malformed, attacker-influenced, or points to an unexpected handler/URI, the agent could trigger unintended local command execution or open untrusted content without clear user consent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file is written as a prescriptive conversation policy and requires the agent to maintain a specific communication style without mentioning any user opt-in or ability to choose another language/locale. Under the stated rule, forcing a specific language/locale behavior without user choice can be 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
90% confidence
Finding

The manifest explicitly sets the skill language to "gu", and the visible metadata and keywords are written in Gujarati. There is no indication that users can opt into another language or that the skill is intentionally restricted to a Gujarati-only regional use case, which creates a language/locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The file is primarily written in Gujarati, but several error cases are specified only in Chinese string literals such as Node 版本过低 and 邮箱验证码错误或已过期. This creates a language/locale policy issue because users or operators following this skill may be forced to interpret Chinese-language conditions without any documented choice or fallback.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill instructs the agent to write server-returned paymentHtml to a temporary local HTML file and open it via a system command. Even though this is intended to launch an official payment cashier, rendering arbitrary HTML from a backend response in a local browser context can expose users to phishing, script execution, or unsafe local-file behavior if the response is compromised or tampered with.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script claims session tokens are only kept temporarily and cleaned up at the end of the flow, but cmdLoginLink() embeds the bearer-equivalent token directly into a URL and prints it to stdout. URLs are commonly exposed through terminal scrollback, logs, shell history capture, chat transcripts, browser history, and referrer leakage, and cleanup is only manual via cleanup, so the effective token exposure is broader and longer-lived than advertised.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file is primarily written in Gujarati, but it embeds Chinese-only user-facing messages as canonical strings. That can violate a language/locale policy when the skill documentation effectively assumes a specific language without explicit user opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The file instructs the agent to fall back to externally hosted screenshot URLs when local packaged images are unavailable, but it does not mention that doing so triggers network access to third-party services. In a restricted or privacy-sensitive environment, this can leak usage metadata such as IP address, timing, and that this skill is being used, and may violate user or platform expectations about offline-only behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The generated HTML hard-codes lang="en" and an English-only page title for the PayPal redirect page. This is a natural-language locale choice embedded in the code with no user opt-in or documented justification, which matches the language/locale policy violation criteria.

Content

No source excerpt is available for this finding.