Back to skill

Security audit

PowPow ପଞ୍ଜୀକରଣ — ବବୁଲ ରେଜିଷ୍ଟର କରନ୍ତୁ, ଯାତ୍ରା ବିବରଣୀକୁ ମାନଚିତ୍ରରେ ପିନ୍ କରନ୍ତୁ, ଡିଜିଟାଲ୍ ମଣିଷଙ୍କ ସହ କଥା ହୁଅନ୍ତୁ

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its stated registration purpose, but it handles login tokens and payment flows with a shared local state file that could mix different users or sessions.

Review this skill before installing in shared or multi-user agent environments. It should be acceptable only where users knowingly want an agent to create a PowPow account, handle verification codes, generate login links, and optionally start payment orders; avoid concurrent use by different users under the same OS account unless the state-file design is fixed.

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

Error
Location
scripts/powpow-register.mjs:40
Finding

Process-Global State File Enables Cross-User Session Confusion

Content
View full analysis

Vulnerability Details

File Location: scripts/powpow-register.mjs, lines 40–56, 205–228, and 391
Vulnerability Type: Shared mutable state and cross-user credential confusion
Risk Level: High

Technical Analysis

The script stores every registration workflow in one fixed file under the operating system's temporary directory:

javascript
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;
}

Successful registration writes the account's bearer session token into this shared state:

javascript
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(),
});

The login-link command subsequently reads whichever token is currently present and places it into a one-click authentication URL:

javascript
function cmdLoginLink() {
  const state = requireState('token');
  const target = arg('target') || 'pending';
  const redirect = target === 'home' ? '/' : '/subscription';
  const url = `${BASE_URL}/api/auth/me?token=${encodeURIComponent(state.token)}&redirect=${encodeURIComponent(redirect)}`;
  ok(
    target === 'home' ? '登录链接(直达首页;免费测试期内点开即用,测试期结束则会落到订阅页)' : 'pending 登录链接(直达订阅页,用于支付流程)',
    { url }
  );
}

Refreshed credentials are also written to the same global state:

` ...[truncated 2593 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace the fixed state filename with a cryptographically random, per-workflow state directory and file.
  2. Require every stateful command to receive an opaque workflow identifier that cannot be guessed by another user.
  3. Bind each workflow to the initiating Agent conversation and user identity, then reject commands where that ownership does not match.
  4. Do not merge unverified patches into shared state. Maintain a complete, schema-validated state object for each isolated workflow.
  5. Create state files atomically using exclusive creation flags and retain restrictive permissions such as 0600.
  6. Separate sensitive credentials from non-sensitive workflow metadata. Prefer an Agent-provided secret store for JWTs where available.
  7. Before generating login links, creating orders, querying payments, or refreshing credentials, verify that the stored account and workflow belong to the current user.
  8. Delete only the current workflow's state during cleanup rather than deleting a process-global file.
  9. Add concurrency tests that interleave two independent registration and payment workflows and verify that no email, token, username, or order identifier crosses between them.
  10. Consider returning a short-lived, single-use login artifact instead of exposing a reusable bearer JWT in a URL.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (28)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

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

md
---
name: powpow-register
description: ଉପଯୋଗକର୍ତାମାନଙ୍କୁ PowPow (Bubble) ରେଜିଷ୍ଟ୍ରେଶନ ଏବଂ ୱାନ-କ୍ଲିକ ଲଗଇନ ସଂଳାପ ଭିତରେ ସମ୍ପୂର୍ଣ୍ଣ କରିବାରେ ସାହାଯ୍ୟ କରେ। ଏଜେଣ୍ଟ ତାଙ୍କ ପାଇଁ ଫର୍ମ ପୂରଣ କରେ (ଅଭାଟାର ଅପଲୋଡ୍ ସହିତ) ଏବଂ ଇମେଲ ଭେରିଫିକେଶନ କୋଡ୍ ପଠାଏ; ଉପଯୋଗକର୍ତା କେବଳ ମୌଳିକ ସୂଚନା ଦିଅନ୍ତ�

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` ଚଲାଇ

Hidden Instructions

High
Category
Prompt Injection
Confidence
60% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
| ଇଣ୍ଟରଫେସ୍ | ପଦ୍ଧତି | ବିବରଣୀ |
|---|---|---|
| `/api/payment/alipay/create-order` | POST | `Authorization: Bearer <JWT>` ଆବଶ୍ୟକ (pending ଉପଭୋକ୍ତା ଯଥେଷ୍ଟ)। body `{package}` → ଫେରାଏ `{paymentHtml, outTradeNo, amount, planName}`; `paymentHtml` ହେଉଛି Alipay ଗେଟ୍‌ୱେ କୁ ସ୍ୱୟଂ ଦାଖଲ ହେଉଥିବା ଫର୍ମ ପୃଷ୍ଠା |
| `/api/payment/alipay/query` | GET `?outTradeNo=` | ସମାନ ଭାବେ Bearer ଯାଞ୍ଚ। `paid` / `pending` / `closed` / `unknown` ଫେରାଏ |
| `/api/payment/alipay/notify` | POST (Alipay ସର୍ଭର କଲବ୍ୟାକ୍) | ପାଞ୍ଚ ଉପାଦାନ ସିଗ୍ନେଚର ଯାଞ୍ଚ (ସିଗ୍ନେଚର, app_id, ଦାମ୍ ସମାନ, TRADE_SUCCESS/TRADE_FINISHED, ବ୍ୟବସାୟୀ ଅନନ୍ୟତା) → **ଅଦ୍ୱିତୀୟ** ଅର୍ଡର ଅପଡେଟ୍ + ସବସ୍କ୍ରିପସନ୍ ନିର୍ମାଣ + ଆକାଉଣ୍ଟ ସକ୍ରିୟ। skill କେବେ ବି ଏହି ଇଣ୍ଟରଫେସ୍ ସ୍ପର୍ଶ କରେ ନାହିଁ |
| `/payment/alipay/return` | ବ୍ରାଉଜର ରିଟର୍ନ ପୃଷ୍ଠା | ପବ୍ଲିକ୍ ପାଥ, ପେମେଣ୍ଟ ପରେ「支付成功」ନିଶ୍ଚିତକରଣ ଦେଖାଏ, ପୃଷ୍ଠା ଭିତରେ ବ୍ୟାକେଣ୍ଡ ପ୍ରକୃତ ଅବସ୍ଥା ପୋଲ୍ କରେ |

Hidden Instructions

High
Category
Prompt Injection
Confidence
60% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/agent-flow.md (reported line 81)May include surrounding context.

md
| ଇଣ୍ଟରଫେସ୍ | ପଦ୍ଧତି | ବିବରଣୀ |
|---|---|---|
| `/api/payment/alipay/create-order` | POST | `Authorization: Bearer <JWT>` ଆବଶ୍ୟକ (pending ଉପଭୋକ୍ତା ଯଥେଷ୍ଟ)। body `{package}` → ଫେରାଏ `{paymentHtml, outTradeNo, amount, planName}`; `paymentHtml` ହେଉଛି Alipay ଗେଟ୍‌ୱେ କୁ ସ୍ୱୟଂ ଦାଖଲ ହେଉଥିବା ଫର୍ମ ପୃଷ୍ଠା |
| `/api/payment/alipay/query` | GET `?outTradeNo=` | ସମାନ ଭାବେ Bearer ଯାଞ୍ଚ। `paid` / `pending` / `closed` / `unknown` ଫେରାଏ |
| `/api/payment/alipay/notify` | POST (Alipay ସର୍ଭର କଲବ୍ୟାକ୍) | ପାଞ୍ଚ ଉପାଦାନ ସିଗ୍ନେଚର ଯାଞ୍ଚ (ସିଗ୍ନେଚର, app_id, ଦାମ୍ ସମାନ, TRADE_SUCCESS/TRADE_FINISHED, ବ୍ୟବସାୟୀ ଅନନ୍ୟତା) → **ଅଦ୍ୱିତୀୟ** ଅର୍ଡର ଅପଡେଟ୍ + ସବସ୍କ୍ରିପସନ୍ ନିର୍ମାଣ + ଆକାଉଣ୍ଟ ସକ୍ରିୟ। skill କେବେ ବି ଏହି ଇଣ୍ଟରଫେସ୍ ସ୍ପର୍ଶ କରେ ନାହିଁ |
| `/payment/alipay/return` | ବ୍ରାଉଜର ରିଟର୍ନ ପୃଷ୍ଠା | ପବ୍ଲିକ୍ ପାଥ, ପେମେଣ୍ଟ ପରେ「支付成功」ନିଶ୍ଚିତକରଣ ଦେଖାଏ, ପୃଷ୍ଠା ଭିତରେ ବ୍ୟାକେଣ୍ଡ ପ୍ରକୃତ ଅବସ୍ଥା ପୋଲ୍ କରେ |

Hidden Instructions

High
Category
Prompt Injection
Confidence
60% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/payment-and-activation.md (reported line 28)May include surrounding context.

md
| ଇଣ୍ଟରଫେସ୍ | ପଦ୍ଧତି | ବିବରଣୀ |
|---|---|---|
| `/api/payment/alipay/create-order` | POST | `Authorization: Bearer <JWT>` ଆବଶ୍ୟକ (pending ଉପଭୋକ୍ତା ଯଥେଷ୍ଟ)। body `{package}` → ଫେରାଏ `{paymentHtml, outTradeNo, amount, planName}`; `paymentHtml` ହେଉଛି Alipay ଗେଟ୍‌ୱେ କୁ ସ୍ୱୟଂ ଦାଖଲ ହେଉଥିବା ଫର୍ମ ପୃଷ୍ଠା |
| `/api/payment/alipay/query` | GET `?outTradeNo=` | ସମାନ ଭାବେ Bearer ଯାଞ୍ଚ। `paid` / `pending` / `closed` / `unknown` ଫେରାଏ |
| `/api/payment/alipay/notify` | POST (Alipay ସର୍ଭର କଲବ୍ୟାକ୍) | ପାଞ୍ଚ ଉପାଦାନ ସିଗ୍ନେଚର ଯାଞ୍ଚ (ସିଗ୍ନେଚର, app_id, ଦାମ୍ ସମାନ, TRADE_SUCCESS/TRADE_FINISHED, ବ୍ୟବସାୟୀ ଅନନ୍ୟତା) → **ଅଦ୍ୱିତୀୟ** ଅର୍ଡର ଅପଡେଟ୍ + ସବସ୍କ୍ରିପସନ୍ ନିର୍ମାଣ + ଆକାଉଣ୍ଟ ସକ୍ରିୟ। skill କେବେ ବି ଏହି ଇଣ୍ଟରଫେସ୍ ସ୍ପର୍ଶ କରେ ନାହିଁ |
| `/payment/alipay/return` | ବ୍ରାଉଜର ରିଟର୍ନ ପୃଷ୍ଠା | ପବ୍ଲିକ୍ ପାଥ, ପେମେଣ୍ଟ ପରେ「支付成功」ନିଶ୍ଚିତକରଣ ଦେଖାଏ, ପୃଷ୍ଠା ଭିତରେ ବ୍ୟାକେଣ୍ଡ ପ୍ରକୃତ ଅବସ୍ଥା ପୋଲ୍ କରେ |

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description is written entirely in Odia and presents the skill as operating in that language, with no statement that users may choose another language or locale. This can violate language/locale policy because it implicitly constrains communication to a specific language without documented opt-in or justification.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill clearly performs network actions and handles secrets via environment variables, but the manifest does not declare an explicit tool scope or permissions boundary. That omission weakens reviewability and can let a host grant broader capabilities than users or operators expect for a registration helper that handles credentials and payment-adjacent actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill collects and transmits sensitive data including email, password, verification codes, and optionally phone and avatar, yet the description lacks a prominent privacy and data-handling disclosure. Users may not realize the agent will process account credentials and contact data on their behalf, reducing informed consent for a sensitive workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill describes initiating subscription and payment flows without a prominent early warning that it may open external payment pages and create payment orders. In a registration context, this increases the risk of surprising users with external financial actions or conditioning them to approve payment-related transitions automatically.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill instructs the agent to invoke local OS commands (start, open, xdg-open) on a file path returned by a script, which expands from registration assistance into arbitrary local command execution. If the returned path or surrounding flow is compromised, this can trigger unintended application launches or open attacker-controlled content on the user's machine.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The listing advertises capabilities like travel-detail map pinning and digital-human chat that are outside the described registration/login scope. This scope inflation can mislead users and routing systems into invoking the skill for unrelated tasks, increasing the chance of overcollection of user data or misuse of the agent in contexts it was not designed or reviewed for.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

Broad invocation keywords without scope limits can cause the skill to trigger in contexts where the user did not intend account registration assistance. In a skill that handles signup, verification codes, and optional payment flows, accidental invocation raises the risk of collecting personal data or initiating sensitive actions under ambiguous user intent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The listing sets "language": "or", which indicates a forced locale/language setting in the manifest. There is no accompanying text explaining that this skill is region-specific or offering the user an opt-in or alternative language, so this may violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Natural-language policy violations apply to all file types, including markdown. This file forces a specific language for all instructions and operational guidance, and nowhere indicates that users may choose another language or that Odia is required for a region-specific purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The entire instruction file is written in Odia, while several user-facing strings and guidance assume Chinese-language payment flows and region-specific handling. There is no indication that users or agents can opt into another language or locale, which creates a natural-language policy concern under the language/locale rule.

Content

No source excerpt is available for this finding.