Back to skill

Security audit

飞书卡片消息

Security checks for vulnerabilities and agentic risk

Overview

This Feishu card-sending skill has a real stated purpose, but it needs review because executable paths can send live test messages to a fixed recipient and the JavaScript sender reports fake delivery success while logging message contents.

Install only after reviewing the live-send behavior. Do not run the suggested Python installation test with real Feishu credentials unless you first remove or replace the hard-coded recipient IDs. Treat all card content and recipient identifiers as data sent to Feishu, keep FEISHU_APP_SECRET out of shared shells and logs, and do not rely on the JavaScript sender for production delivery unless it is changed to use a real authenticated transport and stops logging full payloads.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • 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
Findings (6)

T07 · Tool Hijacking and Spoofing

Error
Location
src/FeishuCardSender.js:102
Finding

Fabricated Message Delivery and OpenClaw Tool Spoofing

Content
View full analysis

Vulnerability Details

File Location: src/FeishuCardSender.js:102-128; result propagation in index.js:89-103
Vulnerability Type: Simulated API invocation and fabricated success response
Risk Level: High

Vulnerable Code:

javascript
async sendMessage(content, target = null) {
  try {
    // 这里模拟调用OpenClaw的message工具
    // 在实际环境中,这里会调用真实的API
    console.log('🔄 调用OpenClaw message工具...');
    console.log('📤 消息内容:', JSON.stringify(content, null, 2));
    
    if (target) {
      console.log(`🎯 发送目标: ${target}`);
    }

    // 模拟API调用延迟
    await new Promise(resolve => setTimeout(resolve, 500));
    
    // 模拟成功响应
    return {
      success: true,
      messageId: `msg_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
      timestamp: new Date().toISOString()
    };

  } catch (error) {
    console.error('消息发送失败:', error);
    throw error;
  }
}

The fabricated result is subsequently returned to callers as a successful delivery:

javascript
const result = await this.sender.sendCard(renderedCard, target);

return {
  success: true,
  messageId: result.messageId,
  templateType,
  format,
  timestamp: new Date().toISOString(),
  duration: Date.now() - startTime
};

Technical Analysis

The JavaScript sender claims to invoke the OpenClaw message tool, but it performs no API or tool call. Instead, it waits for 500 milliseconds and creates a random, locally generated message identifier. The package entry point then reports unconditional success without verifying whether the underlying sender returned a successful result.

This behavior spoofs a legitimate tool operation. Applications cannot distinguish a real message delivery from the simulated response and may treat operational notifications, alerts, or workflow messages as delivered when they were never sent.

Attack Path

  1. An application calls quickSend() or `FeishuCar ...[truncated 861 chars]
Remediation
View remediation

Remediation Suggestions

  • Replace the simulation with a real, authenticated message client or an explicitly injected OpenClaw tool adapter.
  • Fail closed when no real transport is configured.
  • Generate no local message identifier unless clearly marked as a local correlation ID.
  • Propagate the actual transport result instead of returning unconditional success.
  • Change index.js to inspect result.success and return failure when delivery fails.
  • Add integration tests that verify message existence through the provider response rather than accepting a locally generated identifier.
  • Clearly separate demo or mock implementations from production exports.

T09 · Insecure Skill Coding Practices

Warning
Location
src/FeishuCardSender.js:107
Finding

Unconditional Logging of Full Message Contents and Recipients

Content
View full analysis

Vulnerability Details

File Location: src/FeishuCardSender.js:107-112
Vulnerability Type: Sensitive information exposure through process logs
Risk Level: Medium

Vulnerable Code:

javascript
console.log('🔄 调用OpenClaw message工具...');
console.log('📤 消息内容:', JSON.stringify(content, null, 2));

if (target) {
  console.log(`🎯 发送目标: ${target}`);
}

Technical Analysis

The sender serializes and logs the complete card payload and destination for every attempted message. The behavior is unconditional and is not controlled by the package's debug setting.

Card payloads can contain private messages, internal task information, customer data, operational details, URLs, or other sensitive business information. Standard output is frequently collected by CI services, container platforms, process supervisors, or centralized logging systems. As a result, data intended only for a Feishu recipient may be disclosed to unrelated log readers.

Attack Path

  1. A caller supplies confidential content or a sensitive recipient identifier.
  2. The content is rendered into a card.
  3. sendMessage() serializes the complete card using JSON.stringify.
  4. The full payload and recipient are written to standard output.
  5. A logging service, shared terminal, CI system, or process supervisor retains the output.
  6. Any party with log access can retrieve the message content and recipient information.

Impact Assessment

This issue does not grant direct system privileges. Its scope is the confidentiality of every message processed by the JavaScript sender and the associated recipient identifiers. Exposure may extend beyond the local process when logs are centrally retained or exported.

Remediation
View remediation

Remediation Suggestions

  • Remove full payload and recipient logging from the default execution path.
  • Use opt-in debug logging that is disabled by default.
  • Redact message text, recipient identifiers, URLs, authorization data, and other sensitive fields.
  • Log only non-sensitive metadata such as card type, correlation ID, and success status.
  • Document the logging policy and expected data-retention implications.
  • Add automated tests that prevent message bodies or recipient IDs from appearing in logs.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
feishu_card_sender_advanced.py:193
Finding

Installation Test Uses User Credentials to Message a Hard-Coded Recipient

Content
View full analysis

Vulnerability Details

File Location: scripts/install.sh:33-34; feishu_card_sender_advanced.py:193-269
Vulnerability Type: Undisclosed outbound activity using the user's bot authorization
Risk Level: Medium

Vulnerable Code:

The installer recommends direct execution of the Python module as an installation test:

bash
echo "2. 测试安装:"
echo "   python3 $SKILL_DIR/feishu_card_sender_advanced.py"

Direct execution invokes test cases with a fixed recipient:

python
sender = AdvancedFeishuCardSender(app_id, app_secret)

# 测试不同类型的卡片
test_cases = [
    {
        "name": "简单卡片",
        "func": lambda: sender.send_simple_card(
            receive_id="ou_7a6d94f4f20cf166aa429d75fe09cc95",
            receive_id_type="open_id",
            title="🎯 测试卡片",
            content="这是一个**测试卡片**,用于验证飞书interactive卡片发送功能!"
        )
    },
    {
        "name": "新闻简报",
        "func": lambda: sender.send_news_card(
            receive_id="ou_7a6d94f4f20cf166aa429d75fe09cc95",
            receive_id_type="open_id",
            news_items=[
                {
                    "category": "国际新闻",
                    "title": "重大科技突破",
                    "source": "路透社",
                    "time": "2024-02-28 15:30"
                },
                {
                    "category": "财经动态",
                    "title": "市场分析报告",
                    "source": "财经网",
                    "time": "2024-02-28 14:20"
                }
            ]
        )
    },
    {
        "name": "机票特价",
        "func": lambda: sender.send_flight_deal_card(
            receive_id="ou_7a6d94f4f20cf166aa429d75fe09cc95",
            receive_id_type="open_id",
            flight_info={
                "route": "上海 → 东京",
                "price": 899,
                "original_price": 2500,
                "date": "2024-03-15",
                "discount": "3.
...[truncated 1814 chars]
Remediation
View remediation

Remediation Suggestions

  • Remove every embedded recipient identifier from executable tests.
  • Make direct execution perform non-sending checks by default, such as import, credential-presence, schema, and template-rendering validation.
  • Require the user to provide an explicit recipient through a command-line argument for any live-send test.
  • Display the destination and exact number of messages before sending.
  • Require explicit confirmation or a clearly named option such as --send-live-test.
  • Provide a token-only connectivity test that does not send a message.
  • Clearly document all outbound effects and the Feishu permissions that will be exercised.

T08 · Insecure Dependencies

Warning
Location
scripts/install.sh:18
Finding

Unpinned Global Installation of a Third-Party Python Dependency

Content
View full analysis

Vulnerability Details

File Location: scripts/install.sh:18-20
Vulnerability Type: Unsafe and non-reproducible dependency installation
Risk Level: Medium

Vulnerable Code:

bash
# 安装依赖
echo "📦 安装依赖包..."
pip3 install requests

Technical Analysis

The installer retrieves requests from the active pip package index without an exact version, lock file, or integrity hash. It also installs into whichever environment pip3 currently targets rather than creating an isolated environment.

Although requests is a legitimate package name and no dependency confusion was confirmed, the installation method creates unnecessary supply-chain exposure. A custom or compromised package index can supply unintended artifacts, future package versions can change behavior after review, and installation can modify the user's global or shared Python environment.

Attack Path

  1. The user executes scripts/install.sh.
  2. The script invokes the environment's pip3.
  3. Pip resolves the package from its configured index and trust settings.
  4. An uncontrolled current release or artifact is downloaded and installed.
  5. Installation modifies the active Python environment and any package installation code executes with the user's privileges.
  6. Subsequent Skill execution imports the installed dependency.

Impact Assessment

Impact is limited to the privileges of the user running the installer. In a compromised-index or compromised-package scenario, arbitrary package installation behavior could execute with those privileges. Even without compromise, the script may alter shared environments and create unreproducible deployments.

Remediation
View remediation

Remediation Suggestions

  • Add a dependency lock file with exact versions.
  • Use cryptographic hashes and install with pip install --require-hashes -r requirements.txt.
  • Create and use a dedicated virtual environment instead of the global environment.
  • Configure an approved package index and retain dependency provenance.
  • Add automated dependency vulnerability and integrity scanning.
  • Avoid installing packages automatically when dependency validation would be sufficient.

T09 · Insecure Skill Coding Practices

Note
Location
feishu_card_sender_advanced.py:45
Finding

Feishu Network Requests Lack Connection and Read Timeouts

Content
View full analysis

Vulnerability Details

File Location: feishu_card_sender_advanced.py:45-64 and feishu_card_sender_advanced.py:86-138
Vulnerability Type: Unbounded network wait and denial-of-service exposure
Risk Level: Low

Vulnerable Code:

python
url = f"{self.base_url}/auth/v3/tenant_access_token/internal"
payload = {
    "app_id": self.app_id,
    "app_secret": self.app_secret
}

try:
    response = requests.post(url, json=payload)
    response.raise_for_status()
    result = response.json()

The message-delivery request has the same issue:

python
try:
    response = requests.post(url, headers=headers, params=params, json=payload)
    response.raise_for_status()
    result = response.json()

Technical Analysis

Neither request specifies a timeout. Python Requests does not impose a default timeout, so a connection or response can remain blocked indefinitely when a server, proxy, DNS service, or network intermediary stalls.

The endpoint is hard-coded to Feishu's official HTTPS domain, and transmitting app_id and app_secret to its token endpoint is necessary for the declared tenant-token flow. No transmission of credentials to an unrelated domain was found. The vulnerability is the absence of availability controls around these necessary requests.

Attack Path

  1. The sender starts token acquisition or card delivery.
  2. A network intermediary or remote endpoint accepts the connection but does not complete the response.
  3. The Requests call waits without a defined upper bound.
  4. The calling Agent worker or application thread remains occupied.
  5. Repeated stalled operations can exhaust available workers or block critical workflows.

Impact Assessment

The issue does not expose additional permissions or directly disclose credentials. Its impact is availability: the current process, thread, or Agent task can remain blocked indefinitely. In concurrent deployment ...[truncated 57 chars]

Remediation
View remediation

Remediation Suggestions

  • Set explicit connect and read timeouts, for example timeout=(5, 20).
  • Apply bounded retries only to appropriate transient failures.
  • Use exponential backoff with jitter.
  • Do not retry authentication or non-idempotent delivery failures indiscriminately.
  • Return structured timeout errors so callers can distinguish availability failures.
  • Add tests covering stalled connections, DNS failures, and slow responses.

T09 · Insecure Skill Coding Practices

Note
Location
src/CardValidator.js:156
Finding

JavaScript Card Validator Does Not Enforce URL or Size Safety Checks

Content
View full analysis

Vulnerability Details

File Location: src/CardValidator.js:156-198 and src/CardValidator.js:361-368
Vulnerability Type: Warning-only validation and inconsistent size enforcement
Risk Level: Low

Vulnerable Code:

javascript
// 验证URL格式
const urls = this.extractUrls(cardData, format);
for (const url of urls) {
  if (!this.isValidUrl(url)) {
    result.warnings.push(`URL格式可能无效: ${url}`);
  }
}

// 验证图片URL
const imageUrls = this.extractImageUrls(cardData, format);
for (const imageUrl of imageUrls) {
  if (!this.isValidImageUrl(imageUrl)) {
    result.warnings.push(`图片URL格式可能无效: ${imageUrl}`);
  }
}

Card-size violations are also only warnings:

javascript
validatePerformance(cardData, result) {
  // 检查卡片大小
  const cardSize = JSON.stringify(cardData).length;
  if (cardSize > 50000) { // 50KB
    result.warnings.push(`卡片数据过大 (${Math.round(cardSize/1024)}KB),可能影响性能`);
  }
  
  // 检查嵌套深度
  const depth = this.getObjectDepth(cardData);
  if (depth > 10) {
    result.warnings.push(`对象嵌套深度过大 (${depth}),可能影响性能`);
  }
}

URL acceptance only checks the scheme:

javascript
isValidUrl(url) {
  if (typeof url !== 'string') return false;
  
  try {
    const urlObj = new URL(url);
    return ['http:', 'https:'].includes(urlObj.protocol);
  } catch {
    return false;
  }
}

Technical Analysis

Invalid URLs and oversized cards do not set result.valid to false; they only append warnings. The sending flow checks only the valid field, so these conditions do not stop processing.

The documented card limit is 30 KB, while the JavaScript validator uses 50,000 JavaScript characters rather than UTF-8 bytes. These measurements are not equivalent, especially for multibyte text. The validator also accepts arbitrary HTTP and HTTPS destinations without an optional host policy. This can allow attacker-controlled template data to introduce ...[truncated 867 chars]

Remediation
View remediation

Remediation Suggestions

  • Set result.valid = false for malformed URLs and provider-limit violations.
  • Enforce the documented 30 KB limit using Buffer.byteLength(JSON.stringify(cardData), 'utf8').
  • Reject unsupported URL schemes rather than merely warning.
  • Where card data is untrusted, support an allowlist of approved destination hosts.
  • Require HTTPS by default unless HTTP is explicitly needed.
  • Expose warnings in the final send result instead of discarding them.
  • Implement and honor strictMode so callers can require all warnings to be treated as validation failures.
  • Add tests for multibyte payload sizes, malformed URLs, deceptive hostnames, and oversized cards.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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 (28)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The README instructs users to configure Feishu app credentials and send direct messages, but it does not warn that message contents and identifiers are transmitted to an external service and may contain sensitive data. In a messaging skill, this omission can lead users to unknowingly expose private content, tenant identifiers, or secrets through network calls, especially when the skill emphasizes convenience and direct API use.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file’s natural-language instructions and usage guidance are presented exclusively in Chinese, and there is no indication that users can choose another language or that the skill is intentionally limited to a Chinese-speaking environment. This can violate language/locale policy requirements that prohibit forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This example code sends real outbound Feishu messages to hard-coded recipient IDs, which can cause unintended transmission to actual users or chats when someone runs the sample as-is. In a messaging/integration skill, this is more dangerous than a purely local example because execution produces external side effects and may leak test content or generate spam without clear warning or sandboxing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guide instructs users to export Feishu application credentials and then print part of the APP_ID for verification, but it provides no warning about secret handling, shell history exposure, shared terminal risk, or avoiding logging sensitive values. In a production integration guide, normalizing direct credential manipulation without security guidance increases the chance of accidental secret disclosure and weak operational practices.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The document repeatedly demonstrates sending cards containing user, task, flight, and business content to Feishu, but it does not warn that this transmits potentially sensitive data to an external service. Without data-classification, consent, or minimization guidance, integrators may unknowingly send internal or personal information off-platform, creating privacy, compliance, and data-governance risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · feishu_card_sender_advanced.py (reported line 52)May include surrounding context.

python
}
        
        try:
            response = requests.post(url, json=payload)
            response.raise_for_status()
            result = response.json()

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code sends interactive card content and the target receive_id to the Feishu messaging API, which is a network operation that transmits user or system data. While there is error handling and card-size logging, there is no confirmation prompt, user-facing disclosure, or comment/docstring warning that message data and recipient identifiers will be sent externally.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · feishu_card_sender_advanced.py (reported line 110)May include surrounding context.

python
}
        
        try:
            response = requests.post(url, headers=headers, params=params, json=payload)
            response.raise_for_status()
            result = response.json()

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This Python file contains user-facing titles, descriptions, and card text entirely in Chinese, such as the module description and the default card labels. The skill does not indicate that the language is configurable or region-specific, which can violate a language/locale policy when users have not opted into Chinese output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This JavaScript file emits multiple console messages in Chinese (for example at initialization and throughout processing) with no configuration or locale selection mechanism. That creates a natural-language locale policy issue because the skill effectively imposes one language on users rather than offering choice or documenting a justified regional constraint.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The cancelBatch API only updates in-memory status fields and logs cancellation, but processInBatches and processWithRetry never check for a cancelled state and do not abort active or queued work. This creates a misleading security/control boundary: callers may believe processing has stopped while sensitive or costly operations continue, which can undermine access revocation, quota enforcement, or emergency stop workflows.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This .js file contains primary descriptive comments and multiple user-facing labels in Chinese, indicating the skill is designed around a fixed language experience. Under the language/locale policy, forcing a specific language without user opt-in or a documented region-specific justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The class documentation and implementation imply real Feishu/OpenClaw delivery, but the code only logs message contents and returns a fabricated success result. This can mislead users and higher-level automation into believing notifications were sent when they were not, causing silent delivery failures and possible exposure of message data through local logs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

All user-facing documentation in this file is presented in Chinese, and there is no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific audience. Under the language/locale policy, forcing a single 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
80% confidence
Finding

Natural-language strings, comments, and user-facing output throughout the file are exclusively Chinese, and the file does not offer an alternative language or explain that the skill is intentionally locale-specific. This may violate a policy against forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code explicitly formats time with the fixed locale 'zh-CN' in a user-visible card field. This enforces a specific language/locale without offering user opt-in or configuration, which matches the policy category for locale constraints.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The demo prints the current date using toLocaleString('zh-CN'), which imposes a specific locale for user-facing output. There is no indication that the user can choose another locale or that the Chinese locale is a documented requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

全文标题、步骤说明、注释和故障排查均强制使用中文表述,没有提供语言选项或声明该技能仅面向中文用户/区域。按规则,未经过用户选择而固定语言可能构成语言/locale 策略问题。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

Natural-language strings that describe the skill and its behavior are presented only in Chinese, which can impose a language constraint on users and maintainers without opt-in. The file does not state that this is a China-specific or Chinese-only skill, nor does it offer an alternative language.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"author": "OpenClaw Team",
  "license": "MIT",
  "dependencies": {
    "axios": "^1.6.0",
    "crypto-js": "^4.2.0"
  },
  "devDependencies": {

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
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"license": "MIT",
  "dependencies": {
    "axios": "^1.6.0",
    "crypto-js": "^4.2.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0"

Unverifiable Dependency: crypto-js has 3 known advisory(ies) (CVE-2020-36732 (crypto-js uses insecure random numbers); CVE-2026-71851 (crypto-js: Insufficient Entropy in Cryptographic Secret Generation via Vulnerabl); CVE-2023-46233 (crypto-js PBKDF2 1,000 times weaker than specified in 1993 and 1.3M times weaker)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

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

json
"crypto-js": "^4.2.0"
  },
  "devDependencies": {
    "nodemon": "^3.0.0"
  },
  "engines": {
    "node": ">=14.0.0"

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The script's user-facing comments and echo messages are entirely in Chinese, which indicates a fixed language experience. Under the policy rule, forcing a specific language without opt-in or justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.