Back to skill

Security audit

ai-content-creator-pro

Security checks for vulnerabilities and agentic risk

Overview

The skill discloses a paid local buyout workflow, but its payment credential handling is weak and its activation script is currently broken, so users should review it before installing.

Install only if you are comfortable with a local paid-access workflow that writes order and credential files under your OpenClaw home directory. Do not include passwords, private drafts, client data, or other sensitive text in the question argument. The publisher should fix the service.py syntax error, harden payment receipt validation, and store only minimally necessary credential data with restrictive permissions.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/service.py:49
Finding

Local Payment Verification Can Be Forged to Bypass the Buyout Gate

Content
View full analysis
bool: """Check if user has already bought out this skill.""" return os.path.isfile(_BUYOUT_FILE) def write_buyout(order_no: str, credential: str): """Record buyout credential after first successful payment.""" print(f"[BUYOUT] Writing credential to {_BUYOUT_FILE}") os.makedirs(_BUYOUT_DIR, exist_ok=True) data = {"slug": SLUG, "order_no": order_no, "credential": credential, "timestamp": int(time.time())} with open(_BUYOUT_FILE, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) def is_credential_valid(order_data: dict) -> bool: credential = order_data.get("payCredential") if not credential: return False credential_ts = order_data.get("credentialTimestamp") if credential_ts and time.time() - credential_ts > CREDENTIAL_TTL: return False return True ``` ```python if __name__ == "__main__": # Check buyout first if has_buyout(): print("=" * 60) print(" ai-content-creator-pro - Buyout Active") print("=" * 60) print("Buyout credential found. Skipping payment.\n") print("The AI model will now deliver multi-platform content creation.") print("=" * 60) print("PAY_STATUS: SUCCESS") print("BUYOUT: true") sys.exit(0) # First-time use: need payment parser = argparse.ArgumentParser(description="Verify buyout payment for ai-content-creator-pro") parser.add_argument("order_no", help="Order number from Phase 1") args = parser.parse_args() indicator = compute_indicator(SLUG) try: order_data = _load_order(indicator, args.order_no) except Exception as e: print("PAY_STATUS: ERROR") print(f"ERROR_INFO: Order file ...[truncated 2641 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/service.py:53
Finding

Payment Credential Is Stored in Plaintext Without Explicit Restrictive Permissions

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:98
Finding

Documented Sandbox Workflow Executes a Registry-Hosted npm Package at Runtime

Content
View full analysis
-i -v 1.0.12 ``` ### Technical Analysis The documented sandbox payment workflow uses `npx --yes` to retrieve and execute a package from an external npm registry. Pinning version `1.0.0` reduces accidental version drift but does not provide independent integrity verification and does not eliminate risks from package-account compromise, registry compromise, compromised transitive dependencies, or installation lifecycle scripts. The `--yes` option suppresses the normal interactive installation confirmation. Consequently, following the documented workflow may download and execute third-party code with the permissions of the user or Agent running the Skill. This is not evidence that the named package is malicious. The confirmed issue is that the workflow creates a runtime supply-chain execution boundary without a documented integrity pin, signature check, vendored artifact, or isolated execution environment. ### Attack Path 1. An attacker compromises the referenced npm package, its publisher account, a transitive dependency, or the package distribution channel. 2. A user or Agent follows the documented sandbox payment command. 3. `npx --yes` retrieves the package and dependencies from the configured registry. 4. npm installation hooks or the invoked CLI execute the compromised code. 5. The code runs with the invoking user's privileges and can access resources available to that process. ### Impact Assessment A compromised dependency could execute arbitrary code with the privileges of the Skill runner. Depending on the runtime environment, this could expose local files, environment variables such as payment configuration, OpenClaw order and credential data, and any other resources acces ...[truncated 167 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the implemented behavior does not actually provide the advertised generation/adaptation capability while still accessing local order and credential storage, users may grant filesystem access under false assumptions. Even without overtly malicious code, hidden or under-disclosed local state changes create trust and auditability problems.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the implemented behavior does not actually provide the advertised generation/adaptation capability while still accessing local order and credential storage, users may grant filesystem access under false assumptions. Even without overtly malicious code, hidden or under-disclosed local state changes create trust and auditability problems.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Line L030 instructs the skill to always interact with the user in Chinese. This is a natural-language locale policy constraint that does not offer the user a language choice or document a justified region-specific limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The module docstring states pricing and payment flow in Chinese/yuan terms ("pay 楼9.90 once" / local clawtip payment processing) as a fixed assumption, and the runtime messaging repeats a single-currency payment model. There is no natural-language indication that this skill is region-specific or that users may choose another language/locale, which can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
89% confidence
Finding

The script persists the user-supplied question and payment metadata to a predictable location under the user's home directory, and also echoes the question to stdout. Because the question may contain sensitive consultation content, this creates avoidable local data exposure through shell history/log capture, backups, or other local users/processes with access to the account.

Content

Scanner excerpt · scripts/create_order.py (reported line 121)May include surrounding context.

python
return order_data

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Create ai-content-creator-pro buyout order")
    parser.add_argument("question", help="User question / consultation content")
    args = parser.parse_args()
    indicator = compute_indicator(SLUG)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The service script does not implement the advertised content-creation capability; instead, it enforces a local payment/buyout workflow, reads order artifacts from the user's home directory, and persists a credential for future bypass of payment checks. This hidden monetization gate is a supply-chain trust issue because the skill behavior materially differs from its manifest and can manipulate users into payment-related flows rather than performing the promised function.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring states "pay 楼9.90 once," which imposes a specific locale/language context in user-facing text. There is no indication that the skill is region-specific or that users can opt into this locale, so it conflicts with the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.