Back to skill

Security audit

Noon 商品数量统计

Security checks for vulnerabilities and agentic risk

Overview

This skill is narrowly scoped to counting Noon search results, but it uses stealth browser automation and claims CAPTCHA bypass against a third-party site without enough user-facing caution.

Review before installing. Only run this if you are allowed to automate noon.com and accept the risk of bot-detection evasion, blocking, or terms-of-service issues. Install dependencies in a sandbox or pinned/locked environment rather than running the documented unpinned npm install directly.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:51
Finding

Unpinned Third-Party Dependencies Installed Without Lockfile Integrity Controls

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:51-59
Vulnerability Type: Unpinned third-party dependency installation
Risk Level: Medium

Vulnerable Code

markdown
## Dependencies

- puppeteer-extra
- puppeteer-extra-plugin-stealth
- puppeteer

## Install dependencies

```bash
cd ~/.openclaw/workspace/skills/noon-product-count
npm install puppeteer-extra puppeteer-extra-plugin-stealth puppeteer
text

### Technical Analysis

The installation instructions retrieve three npm packages without specifying reviewed versions. The audited project also contains no `package.json` or package lockfile, so npm resolves mutable current versions and their transitive dependencies whenever the command is run.

This prevents reproducible installation and makes the effective dependency code differ from the code reviewed during this audit. npm packages may also define lifecycle scripts that execute during installation with the permissions of the user running npm.

There is no evidence that the named packages are currently malicious. The vulnerability is the absence of version pinning, lockfile integrity metadata, and dependency provenance controls.

### Attack Path

1. An attacker compromises a listed package, one of its transitive dependencies, a maintainer account, or the npm registry path used by the victim.
2. The attacker publishes a malicious version that remains compatible with npm's unconstrained resolution.
3. A user follows the documented command:
   `npm install puppeteer-extra puppeteer-extra-plugin-stealth puppeteer`.
4. npm resolves and downloads the attacker-controlled release because no reviewed version or lockfile constrains resolution.
5. Malicious code executes through an npm lifecycle script during installation or when `index.js` imports and uses the compromised package.
6. The payload operates with the filesystem, process, and network privileges of the user who invoked npm or the Skill.

### Impact Assessment

Successful exploitation
...[truncated 453 chars]
Remediation
View remediation

Remediation Suggestions

  1. Add a package.json containing exact, reviewed dependency versions rather than unconstrained package names.
  2. Generate and commit a package-lock.json so direct and transitive dependency versions and integrity hashes are reproducible.
  3. Replace the documented installation command with npm ci, which installs strictly from the committed lockfile and fails when the manifest and lockfile disagree.
  4. Review package provenance, maintainers, lifecycle scripts, and transitive dependencies before approving versions.
  5. Run dependency auditing and update scanning in CI, but apply upgrades only after review and testing.
  6. Use a trusted registry and protect npm configuration from registry substitution or dependency-confusion sources.
  7. Where operationally feasible, install dependencies with lifecycle scripts disabled first (npm ci --ignore-scripts), review required scripts, and execute only explicitly approved installation steps.
  8. Run the Skill under a dedicated, least-privileged account or sandbox with restricted filesystem and network access.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documentation explicitly references stealth browser automation and automatic reCAPTCHA bypass against a third-party site, but does not warn users about the legal, ethical, and account/IP-ban risks of using detection evasion and CAPTCHA circumvention. This omission is security-relevant because it hides high-risk behavior behind an innocuous product-counting description, increasing the chance of unauthorized or policy-violating use.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill imports and enables puppeteer-extra-plugin-stealth and also disables AutomationControlled, which are explicit browser evasion measures. For a tool whose stated purpose is only to count public search results, these anti-detection techniques are unnecessary and increase abuse potential by helping the agent bypass bot defenses, rate limits, or site anti-automation controls.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This JavaScript file contains comments, usage text, status messages, and error strings exclusively in Chinese, including the CLI guidance shown to users. Under the policy rule for natural-language violations, forcing a specific language without user opt-in is a locale/language policy issue when no alternative or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description states that the user must input an Arabic keyword, which imposes a language constraint in natural language. The file does not offer an opt-in choice of language or explain why Arabic-only input is a necessary, justified locale restriction.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.