Back to skill

Security audit

千川抖店日报一键生成

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed business-report automation tool with sensitive but purpose-aligned session use and Feishu writes.

Install only if you are comfortable giving the tool an Ocean Engine authenticated session and Feishu write access to the configured spreadsheet. Keep storage_state.json, config.json, reports, and Feishu secrets private; prefer STORAGE_STATE_BASE64, pin dependencies with a lockfile, and avoid exporting untrusted table values until formula escaping is added.

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
report.js:4
Finding

Spreadsheet Formula Injection Through Unsanitized Scraped Values

Content
View full analysis
{ const line = headers.map(h => { const v = r[h] === undefined ? '' : String(r[h]).replace(/"/g, '""'); return `"${v}"`; }).join(','); lines.push(line); }); return lines.join('\n'); } ``` ```javascript function rowsToSheetValues(rows, headers, aliases) { return rows.map(row => { const lookup = buildLookup(row); return headers.map(header => valueForHeader(lookup, header, aliases)); }); } async function appendValues(spreadsheetToken, range, values, token) { const { data } = await axios.post( `${FEISHU_BASE_URL}/sheets/v2/spreadsheets/${spreadsheetToken}/values_append`, { valueRange: { range, values } }, { ...FEISHU_REQUEST, headers: feishuHeaders(token) } ); if (data.code !== 0) { throw new Error(`写入飞书表格失败: ${data.msg || data.code}`); } return data.data || {}; } ``` ### Technical Analysis Values collected from the remote Ocean Engine table are treated as trusted spreadsheet content. The CSV exporter escapes double quotes but does not neutralize fields beginning with spreadsheet formula prefixes such as `=`, `+`, `-`, or `@`. Enclosing such a value in double quotes does not prevent spreadsheet applications from interpreting it as a formula. The Feishu export path similarly maps scraped values directly into the API request without distinguishing text from formulas or applying formula-prefix validation. If the destination spreadsheet interprets submitted strings as formulas, an attacker-controlled table value can become active spreadsheet content. Exploitation depends on an att ...[truncated 1259 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
package.json:9
Finding

Unpinned Dependencies and Missing Lockfile Reduce Supply-Chain Integrity

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (11)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code writes both CSV and Markdown report files to the local filesystem, including sampled row data and target URL details, but provides no confirmation prompt, logging, or inline disclosure about this persistence. Because file creation can affect user data handling and system state, the absence of any user-visible warning meets the missing-warning criterion for code files.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The generated Markdown report uses fixed Chinese headings and status text such as '每日报告' and '未抓到表格数据', which imposes a specific language regardless of user preference. This is a natural-language locale policy concern because the code does not offer any language selection or explain a region-specific requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Multiple user-visible strings in thrown errors and warnings are written only in Chinese, which imposes a specific language on users without opt-in. Under the stated policy, forcing a language or locale without choice or documented justification is 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
93% confidence
Finding

This markdown file is natural-language content, and the instructions are written exclusively in Chinese from title to usage guidance. Under the policy rule, forcing a specific language without user opt-in can be a language/locale policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script's natural-language output strings are consistently in Chinese, including error, progress, and completion messages. This imposes a specific language on users without any visible opt-in, selection mechanism, or documented regional justification in the file.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The dependency uses a caret range (^1.5.0), which permits automatic installation of newer minor and patch releases. This weakens supply-chain reproducibility and can unexpectedly introduce vulnerable or malicious upstream changes, especially for a package like axios that handles network requests.

Content

Scanner excerpt · package.json (reported line 10)May include surrounding context.

json
"start": "node index.js"
  },
  "dependencies": {
    "axios": "^1.5.0",
    "playwright": "^1.40.0"
  }
}

Unverifiable Dependency: axios has 16 known advisory(ies) (CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
84% confidence
Finding

Axios has multiple known advisories, and because the manifest does not pin an exact version, it is not possible to verify whether deployed installations avoid affected releases. In a skill that appears to automate data collection and external API interactions, an unverified HTTP client version increases the risk of SSRF, MITM-related abuse, or other dependency-level compromise if a vulnerable release is resolved.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The Playwright dependency is specified with a caret range (^1.40.0), so installs are not fully deterministic and may pull in different upstream releases over time. For browser automation tooling, this increases supply-chain risk because changes in the package or its install behavior can alter runtime security properties.

Content

Scanner excerpt · package.json (reported line 11)May include surrounding context.

json
},
  "dependencies": {
    "axios": "^1.5.0",
    "playwright": "^1.40.0"
  }
}

Unverifiable Dependency: playwright has 1 known advisory(ies) (CVE-2025-59288 (Playwright downloads and installs browsers without verifying the authenticity of)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
80% confidence
Finding

Playwright has at least one known advisory, and the unpinned manifest prevents verification that installed versions are outside the affected range. Given this skill's use of browser automation to scrape operational data, unsafe dependency resolution could expose the environment to compromise through vulnerable install-time or browser-management behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code accesses login state via STORAGE_STATE_BASE64 or a local storage_state.json file and uses it to authenticate a browser context. Although the code enforces validation and explicit opt-in for local file use, it does not provide a clear user-facing disclosure that sensitive session credentials will be consumed during execution.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
feishu.js:74