Back to skill

Security audit

Feishu All In One

Security checks for vulnerabilities and agentic risk

Overview

This Feishu skill mostly matches its stated purpose, but it needs Review because its callback server can forward full user interaction data to a configurable Gateway with limited disclosure and weak default scoping.

Install only after reviewing the callback forwarding behavior. Disable Gateway forwarding unless needed, restrict the Gateway URL to a trusted HTTPS or local endpoint, avoid sending raw callback data, protect Feishu App Secret and Gateway tokens, and regenerate the npm lockfile from an approved HTTPS registry with updated dependencies before production use.

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/card-callback-server.js:34
Finding
Raw Feishu Callback Data Is Forwarded by Default to a Configurable Gateway<![CDATA[ ## Vulnerability Details **File Location**: `scripts/card-callback-server.js:34-88` and `scripts/card-callback-server.js:470-494` **Vulnerability Type**: Default-enabled transmission of excessive callback data to a configurable destination **Risk Level**: Medium ### Vulnerable Code ```javascript // scripts/card-callback-server.js:34-88 function loadGatewayConfig() { try { const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json'); if (fs.existsSync(configPath)) { const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); return { url: process.env.OPENCLAW_GATEWAY_URL || config.gateway?.url || `http://localhost:${config.gateway?.port || 18789}`, token: process.env.OPENCLAW_GATEWAY_TOKEN || config.gateway?.token || '', enabled: config.gateway?.enabled !== false // enabled by default }; } } catch (error) { console.log('Unable to read OpenClaw configuration:', error.message); } return { url: process.env.OPENCLAW_GATEWAY_URL || 'http://localhost:18789', token: process.env.OPENCLAW_GATEWAY_TOKEN || '', enabled: false }; } const GATEWAY_CONFIG = loadGatewayConfig(); const GATEWAY_URL = GATEWAY_CONFIG.url; const GATEWAY_TOKEN = GATEWAY_CONFIG.token; const GATEWAY_ENABLED = GATEWAY_CONFIG.enabled && GATEWAY_TOKEN; async function sendToGateway(callbackData) { if (!GATEWAY_ENABLED) { return; } try { const payload = { type: 'feishu_card_callback', timestamp: new Date().toISOString(), data: callbackData }; await axios.post(`${GATEWAY_URL}/api/callback`, payload, { headers: { 'Authorization': `Bearer ${GATEWAY_TOKEN}`, 'Content-Type': 'application/json' }, timeout: 3000 }); } catch (error) { // Error handling omitted } } ``` ```javascript // scripts/card-callback-server.js:470-494 const eventDispatcher = new lark.EventDispatcher({ loggerLevel: lark.LoggerLevel. ...[truncated 3354 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Make Gateway forwarding explicitly opt-in: ```javascript enabled: config.gateway?.enabled === true ``` 2. Require a separate setting such as `forwardFeishuCallbacks: true` rather than inferring consent from the presence of a Gateway token. 3. Remove `raw_data` and transmit only fields required by the receiving component: ```javascript sendToGateway({ event_id, action: { value: action?.value } }); ``` 4. Redact user identifiers, form values, authorization-related fields, and unknown nested properties unless they are strictly required. 5. Parse the Gateway URL and enforce: - `https:` for remote destinations. - `http:` only for loopback addresses such as `127.0.0.1`, `::1`, or `localhost`. - An administrator-configured hostname allowlist. 6. Do not send reusable bearer tokens over plaintext connections. Use TLS certificate validation and narrowly scoped, short-lived credentials where supported. 7. Update the documentation to identify every forwarded field, the destination, the default state, retention expectations, and the procedure for disabling forwarding. 8. Apply the same changes to `scripts/card-callback-original.js` or remove that duplicate implementation to prevent operators from accidentally deploying the vulnerable version. 9. Avoid logging complete callback context because logs may create an additional sensitive-data exposure path. ]]>

T08 · Insecure Dependencies

Warning
Location
scripts/package-lock.json:17
Finding
Dependencies Are Retrieved from a Third-Party Registry over Plaintext HTTP<![CDATA[ ## Vulnerability Details **File Location**: `scripts/package-lock.json:17-111` and equivalent `resolved` entries throughout the lockfile **Vulnerability Type**: Insecure dependency transport and third-party package source **Risk Level**: Medium ### Vulnerable Code ```json "node_modules/@larksuiteoapi/node-sdk": { "version": "1.59.0", "resolved": "http://mirrors.tencentyun.com/npm/@larksuiteoapi/node-sdk/-/node-sdk-1.59.0.tgz", "integrity": "sha512-sBpkruTvZDOxnVtoTbepWKRX0j1Y1ZElQYu0x7+v088sI9pcpbVp6ZzCGn62dhrKPatzNyCJyzYCPXPYQWccrA==", "license": "MIT", "dependencies": { "axios": "~1.13.3", "lodash.identity": "^3.0.0", "lodash.merge": "^4.6.2", "lodash.pickby": "^4.6.0", "protobufjs": "^7.2.6", "qs": "^6.14.2", "ws": "^8.19.0" } }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "http://mirrors.tencentyun.com/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", "license": "BSD-3-Clause" }, "node_modules/axios": { "version": "1.13.6", "resolved": "http://mirrors.tencentyun.com/npm/axios/-/axios-1.13.6.tgz", "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } } ``` ### Technical Analysis The lockfile pins dependencies to `http://mirrors.tencentyun.com`, a third-party mirror accessed without TLS. The project documentation instructs users to run `npm install`, causing npm to use these lockfile locations where applicable. The lockfile includes SHA-512 integrity values, which substantially reduces the likelihood that an attacker can silently substitute a package while leaving the reviewed lockfile unchanged. However, integrity metadata does not make plaintext dependency tran ...[truncated 2354 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Regenerate the lockfile using the official HTTPS npm registry: ```bash cd scripts npm config set registry https://registry.npmjs.org/ rm package-lock.json npm install --package-lock-only ``` 2. Confirm that every package `resolved` field uses HTTPS and points to an approved registry. 3. Use deterministic installation in deployment and CI: ```bash npm ci ``` 4. Retain and verify package integrity hashes; HTTPS and integrity verification should be used together. 5. Pin reviewed dependency versions where operationally practical instead of relying only on broad compatible ranges. 6. Add CI policy checks that reject: - Plaintext `http://` package URLs. - Unapproved package registries. - Missing integrity metadata. - Unexpected lockfile changes. 7. Review lockfile updates before release and run dependency vulnerability and provenance checks. 8. If an organizational mirror is required, use a controlled HTTPS mirror with authenticated administration, audit logging, upstream verification, and restricted publication permissions. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (54)

Known Vulnerable Dependency: protobufjs==7.5.4 — 12 advisory(ies): CVE-2026-44294 (protobuf.js: Denial of service from crafted field names in generated code); CVE-2026-44293 (protobuf.js: Code injection through bytes field defaults in generated toObject c); CVE-2026-44289 (protobuf.js: Denial of service through unbounded protobuf recursion) +9 more

Critical
Category
Supply Chain
Confidence
90% confidence
Finding
protobufjs 7.5.4 is flagged with multiple serious issues including denial of service and possible code-injection-related flaws in generated conversion paths. Since the Feishu SDK depends on protobufjs and messaging platforms often parse complex, externally supplied payloads, a vulnerable protobuf implementation in the runtime materially increases risk from crafted input or event data.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The skill claims all features are fully validated and directly usable, but the analyzed behavior appears focused on card callback handling and may forward callback data externally while bypassing expected response logic. Overstated assurance can cause administrators to trust and run a component that handles user interaction data in ways not obvious from the description.

Ssd 3

High
Confidence
99% confidence
Finding
The callback handler packages and sends full callback contents to the Gateway, including raw event data that may contain operator identifiers, message context, and user-submitted form values. This is unnecessary for many integrations and significantly increases privacy and breach impact if the Gateway is compromised, misconfigured, or points to an untrusted endpoint. In this skill type, callback payloads are operationally sensitive because they reflect direct user interactions.

Ssd 3

High
Confidence
99% confidence
Finding
At the event entry point, the code explicitly extracts operator, action, context, and full raw event data and relays them to the Gateway asynchronously. That creates a broad data egress path for all card interactions, including appointment form inputs and survey responses processed later in the handler. Because the exfiltration occurs before action-specific validation or minimization, the exposure applies uniformly across all callback types.

Known Vulnerable Dependency: axios==1.13.6 — 16 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

High
Category
Supply Chain
Confidence
95% confidence
Finding
axios 1.13.6 is a network-facing HTTP client used directly by this package and transitively by the Feishu SDK, so known SSRF, MITM, prototype-pollution-gadget, proxy-bypass, or redirect-related issues can be reachable in realistic deployments. A messaging integration skill commonly makes outbound requests using tokens and user-influenced URLs or proxy settings, which increases the practical risk of credential leakage or server-side request abuse.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
88% confidence
Finding
form-data 4.0.5 is flagged for CRLF injection through unescaped multipart field names/filenames. Because this skill advertises file and image sending, multipart uploads are plausibly part of its functionality, making it more likely that attacker-controlled metadata could trigger request smuggling or malformed outbound requests against downstream services.

Known Vulnerable Dependency: ws==8.19.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
89% confidence
Finding
ws 8.19.0 is reported vulnerable to memory disclosure and memory exhaustion. Because the Feishu SDK may use WebSocket connectivity for event or stream handling, a messaging skill exposed to remote platform traffic could be susceptible to denial of service or data exposure if a malicious endpoint or intermediary can interact with the WebSocket client/server path.

Known Vulnerable Dependency: axios==1.13.6 — 16 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

High
Category
Supply Chain
Confidence
99% confidence
Finding
The file permits resolution to an axios version identified as having numerous known vulnerabilities, including issues related to SSRF/proxy bypass and prototype-pollution-based exploitation. In a skill intended for message sending/receiving and external network communication, such flaws are more dangerous because they may expose tokens, redirect requests, or allow attacker-controlled network interactions.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
This markdown file includes commands that place App ID and App Secret into environment variables, but it does not warn users that these are sensitive credentials or advise safe handling. Under the markdown-specific missing-warning rule, credentials and privacy-affecting configuration should be accompanied by a user warning when the description instructs users to use them directly.

Missing User Warnings

Medium
Confidence
77% confidence
Finding
The markdown describes launching a callback server and configuring event subscriptions, but it does not include any warning about network exposure, inbound events, or the need to secure and limit access to the running service. For markdown files, behaviors that may affect system integrity or privacy should be disclosed to the user.

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill declares access to sensitive environment variables, local configuration files, and network functionality, but does not declare any explicit tool scope or permissions boundary. This creates a transparency and least-privilege problem: users may authorize or run a package without understanding that it can read secrets and communicate externally.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This JSON manifest contains user-facing text exclusively in Chinese, including the title, field labels, placeholders, and button text. The file provides no indication that the skill is region-specific or that users can opt into this locale, which may violate language/locale policy requirements.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The card content is entirely hard-coded in Chinese, including the title and interaction text, with no indication that the skill is region-specific or that users can select another language. This creates a natural-language locale policy concern because the file imposes a specific language without opt-in or documented justification.

Natural-Language Policy Violations

Medium
Confidence
98% confidence
Finding
Most user-visible messages, prompts, and card content are fixed in Chinese, and the interaction flow does not offer the user a language selection or opt-in. Under the stated policy, forcing a specific language without user choice is a natural-language policy violation unless the locale restriction is clearly documented and justified.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The script forwards Feishu card callback data to an OpenClaw Gateway even though the skill is presented as a Feishu messaging solution. That creates an undocumented secondary data flow to another service, and the payload includes user interaction metadata that may contain identifiers and submitted content. In a callback-handling skill, this broad forwarding is more dangerous because users and operators will reasonably expect processing to stay within Feishu/local handling unless explicitly disclosed.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
User callback data is exfiltrated to an external Gateway without any clear user-facing or admin-facing consent/notice in the skill behavior. Because card callbacks can include operator identity, context, and form submissions, silent transmission undermines privacy expectations and can violate data-handling requirements. The skill context makes this more dangerous because it is marketed as a ready-to-use messaging solution, not a telemetry relay.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
Most user-facing strings, logs, prompts, card content, and toasts are fixed in Chinese, and the skill does not generally provide locale selection or user opt-in. This can violate language/locale policy when a skill forces a specific language for all users.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The server forwards full Feishu card callback data, including operator details, action payloads, context, and raw event data, to an external or configurable OpenClaw Gateway. Because the skill is presented as a Feishu messaging solution and does not clearly disclose this secondary data flow, it creates an unexpected exfiltration path for user interaction data and potentially sensitive form contents.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
User interaction details are sent to the Gateway asynchronously without notice, consent, or data minimization. Since callback payloads can include operator identifiers, form values, and card context, this undisclosed transmission increases privacy and compliance risk and could expose business or personal data to another service boundary.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The handler constructs per-action responses but then always returns an empty object, so the intended card updates and user feedback are silently discarded. In a callback-driven workflow this can break confirmation semantics, hide failures, and cause repeated user actions or state confusion, especially where users believe an operation completed or was rejected based on stale UI.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/card-callback-original.js:29

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/card-callback-server.js:29