Back to skill

Security audit

招标情报采集

Security checks for vulnerabilities and agentic risk

Overview

This tender-intelligence skill has a coherent business purpose, but it asks for sensitive cookies/webhook access while the packaged code does not match the advertised automated collection and push behavior and delegates a report command to mutable code outside the reviewed package.

Review before installing. Only provide tender-site cookies or webhook URLs for low-privilege/dedicated accounts and approved internal channels. Treat the default report command as higher risk because it can run code from the local OpenClaw workspace outside this package; install only if you trust that workspace path and understand the current package appears to be a local report/search interface rather than the fully advertised automated collection and push system.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/generate-weekly-report.mjs:197
Finding

Unrestricted Overwrite of Caller-Selected Report Files

Content
View full analysis
/^\d+$/.test(a)) || '7'); const outputPath = args.find(a => a.endsWith('.md') || a.endsWith('.txt')) || null; const report = generateWeeklyReport(daysArg, outputPath); ``` ### Technical Analysis The script accepts any command-line argument ending in `.md` or `.txt` as its output path and passes it directly to `fs.writeFileSync`. The path is not resolved against a dedicated report directory, checked for traversal, restricted to relative filenames, or tested for an existing destination. `fs.writeFileSync` opens the destination in truncating write mode by default. Consequently, an existing writable file is replaced without warning. Absolute paths and traversal paths such as `../../state.md` are accepted as long as the resulting target ends in an allowed extension. The extension check does not establish a security boundary. It only limits the final filename suffix and does not prevent access to sensitive text-based state, documentation, Agent instructions, or configuration files. ### Attack Path 1. An attacker or untrusted automation gains influence over the arguments passed to `generate-weekly-report.mjs`. 2. The attacker supplies an absolute path or traversal path to an existing writable `.md` or `.txt` file. 3. The script identifies that argument as `outputPath`. 4. `generateWeeklyReport` passes the path unchanged to `fs.writeFileSync`. 5. The target file is truncated and replaced with generated report content. Example invocation: ```bash node scripts/generate-weekly-report.mjs 7 ../../target.md ``` ### Impact Assessment ...[truncated 531 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:383
Finding

Execution of Mutable Code Outside the Audited Skill Package

Content
View full analysis
1; const scriptName = isWeekly ? 'generate-weekly-report.mjs' : 'generate-report-v8.mjs'; const scriptDir = isWeekly ? path.join(SKILL_DIR, 'scripts') : path.join(WORKSPACE, 'scripts'); const scriptPath = path.join(scriptDir, scriptName); const procArgs = isWeekly ? [String(daysArg)] : []; console.log(`📄 生成${isWeekly ? `周报(近${daysArg}天)` : '日报'}...`); const child = spawn('node', [scriptPath, ...procArgs], { shell: true }); ``` ### Technical Analysis The normal daily report command, `node index.js --report`, selects `generate-report-v8.mjs` from the external hard-coded workspace directory: ```text C:\Users\Administrator\.openclaw\workspace\scripts ``` That script is not included in the audited project. Its contents therefore cannot be verified as part of this Skill and can change independently after installation or review. Invoking the documented report operation causes Node.js to execute whatever code currently exists at that external path. The process is also launched with `shell: true`. No direct shell injection through `daysArg` was confirmed because the forwarded weekly value is normalized through `parseInt`, while the script paths are constructed from constants. Nevertheless, a shell is unnecessary and increases execution complexity and platform-dependent attack surface. This creates a trust-boundary failure: a legitimate Skill command delegates execution to mutable code outside the reviewed package without integrity verification. ### Attack Path 1. An attacker, compromised local component, or another Skill obtains write access to the external workspace script directory. 2. The attacker creates or replaces `workspac ...[truncated 1136 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill advertises automated multi-source national tender collection and Feishu push alerts, but the described implementation appears to mainly search local cached JSON data with limited source coverage and no evident push logic. This is dangerous because users may grant sensitive cookies and webhook access under false assumptions about functionality, coverage, and data handling, leading to unnecessary credential exposure and operational misuse.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file states that collected tender intelligence will be pushed to Feishu, WeChat, and DingTalk, which implies transmission of data to third-party platforms. Under the markdown-specific warning rule, descriptions that affect user data or privacy should disclose such behavior, but no warning or caveat is provided here.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · CLAWHUB_LISTING.md (reported line 49)May include surrounding context.

md
- ⏰ **Real-time freshness** — Daily automated collection, tenders delivered within the same day they appear. Never miss a bid deadline.
- 🎯 **90%+ coverage** — Integrates 4 major data sources (Qianlima · Zhongxiang · Jianyu · Gansu CCPC), keyword-driven capture for maximum relevant tenders.
- 🔔 **Proactive push** — Daily briefings sent directly to Feishu, WeChat, or DingTalk — stay informed without checking websites.
- 📊 **Dual perspective** — Sales mode (what should I act on today?) + Management mode (what's the market trend?)
- 🇨🇳 **Nationwide scope** — Keyword-based nationwide search, expanding data sources province by province

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The skill markets first-time Feishu push notifications but does not clearly warn users that collected tender data may be automatically transmitted to an external notification channel on a schedule. This can cause unintended data disclosure to Feishu recipients or channels, especially where tender searches, business interests, or regional focus are commercially sensitive.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description and the entire user-facing documentation are written only in Chinese, and the examples/instructions assume Chinese-language interaction. There is no indication that users may choose another language or that the skill is intentionally restricted to a China-only compliance or locale-specific use case.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill requires sensitive session cookies for multiple external services and a Feishu webhook URL, but the description does not warn users that these values are secrets with account/session and notification-channel security implications. This increases the risk of users supplying high-privilege credentials without understanding exposure, storage, rotation, or misuse consequences.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The user-facing manual consistently forces a single language/locale experience in Chinese, and there is no indication that users may choose another language or that the skill is restricted to a Chinese-speaking region for compliance or operational reasons. This matches the policy category for language or locale constraints without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The title and entire document are presented as a prescriptive specification in Chinese, and there is no indication that language selection is optional or configurable. Under the policy rule, forcing a specific language or locale without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes an automated nationwide tender-intelligence tool that collects from four data sources every day and pushes alerts to Feishu. In this file, the documented behavior and implemented logic are limited to reading local JSON files, searching them, and generating console reports, with the actual loaded dataset coming only from 千里马 via loadQianlimaData at L38-L73 and no Feishu integration present.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The module header describes a limited read-only local data access pattern, but later code adds side effects beyond that scope. Specifically, it writes to user-keywords.txt in the --set-keyword path at L424-L433 and spawns separate Node processes to execute report scripts at L381-L395, which contradicts the stated lightweight read/search-only description.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill spawns a Node subprocess with shell: true to execute report scripts from workspace-controlled paths. In an agent environment, invoking external scripts expands the trust boundary: if the referenced script or workspace contents are replaced, tampered with, or unexpectedly writable by another process, the skill becomes a launcher for arbitrary code execution under the user's context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill writes to a persistent local configuration file (user-keywords.txt) without any confirmation, dry-run mode, or explicit prior warning beyond command semantics. In a tool/agent setting, silent state changes can be abused to persist unwanted configuration, influence later searches and outputs, or overwrite user expectations about a read-only skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The document explicitly recommends Chrome CDP with cookie reuse for an authenticated site and notes a multi-day cookie lifetime, but provides no guidance on protecting session tokens, limiting access, or handling account permissions. In a scraping/automation skill, this can lead to credential theft, session hijacking, unauthorized access persistence, or accidental leakage of privileged browser data if operators store, share, or automate against live authenticated sessions insecurely.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script's user-facing description and generated report content are entirely fixed in Chinese, including headings and usage text, and later explicitly formats timestamps with the zh-CN locale. This imposes a specific language/locale on all users without offering an opt-in or configuration mechanism, which matches the policy-violation category for language or locale restrictions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description is entirely in Chinese and targets a national Chinese market, but it does not indicate whether other languages are supported or whether the language choice is intentional and user-selectable. Under the policy for natural-language violations, forcing a specific language without user opt-in can be a violation unless clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The natural-language metadata and default value are entirely Chinese-specific, with _default set to 甘肃 and no indication that users can choose another language or locale. Under the policy rule for language/locale constraints, this appears to impose a specific locale without documented opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This JSON manifest contains natural-language description and changelog fields entirely in Chinese, with no indication that the skill is region-specific or that users may choose another language. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

Natural-language strings and user-facing output throughout the file are written in Chinese, and there is no indication that users may choose another language. This can violate language/locale policy when a skill imposes a specific language without opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The entire skill reference is presented only in Chinese, with no indication that the user can choose another language or locale. Under the stated policy, forcing a specific language without opt-in is a natural-language policy issue unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.