Back to skill

Security audit

Dingtalk Calendar

Security checks for vulnerabilities and agentic risk

Overview

This skill appears purpose-aligned for DingTalk calendar work, but it gives an agent access to coworker availability, contact details, and calendar deletion through an unpinned globally installed CLI without enough guardrails.

Install only if you trust the mcporter package and your DingTalk MCP endpoints. Prefer a pinned/local install if possible, and require explicit confirmation before deleting events or querying coworkers' availability or contact details.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:17
Finding

Unpinned Global Installation of a Third-Party CLI

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 17–23
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Complete Code Snippet:

bash
# Install using npm
npm install -g mcporter

# Or install using bun
bun install -g mcporter

Related dependency declaration in package.json, lines 27–29:

json
"dependencies": {
  "mcporter": ">=0.7.0"
},

Technical Analysis

The skill instructs users to install mcporter globally without specifying an exact reviewed version or requiring package integrity or provenance verification. The package manifest similarly uses the permissive version range >=0.7.0, which allows any later release to satisfy the dependency.

Consequently, the code executed by users can differ from the version originally reviewed. A compromised package publisher account, malicious future release, or upstream package compromise could introduce arbitrary installation-time or runtime behavior. The global installation recommendation increases exposure because the resulting executable is placed in the user's command environment and may be invoked outside this skill.

No lockfile, checksum, cryptographic signature, registry restriction, or package-provenance validation is included. This finding identifies supply-chain risk; the audited files do not establish that the current mcporter package is malicious.

Attack Path

  1. An attacker compromises the upstream package, its publisher account, or its release process.
  2. The attacker publishes a malicious version later than 0.7.0.
  3. A user follows the documented npm install -g mcporter or bun install -g mcporter instruction, or a package manager resolves the >=0.7.0 dependency.
  4. The malicious package executes installation hooks or runs when the mcporter command is invoked.
  5. It operates with the privileges of the invoking user and can potentially inspect configuration, intercept MCP end ...[truncated 753 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin mcporter to an exact, reviewed version in both installation instructions and package.json; avoid latest, >=, and other broad ranges.
  2. Commit an appropriate lockfile and use deterministic, lockfile-enforcing installation commands.
  3. Prefer project-local execution over global installation to reduce command-environment exposure.
  4. Record and verify package integrity metadata, publisher identity, registry origin, and available package provenance or signatures before installation.
  5. Disable lifecycle scripts during installation where operationally possible, then explicitly review any scripts that are required.
  6. Perform dependency security and provenance review before upgrading the pinned version.
  7. Run the CLI with least privilege and avoid elevated installation or execution.
  8. Document how MCP credentials and endpoint configuration are stored, and restrict their filesystem permissions.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest describes the skill as handling calendar management, free/busy queries, and meeting room booking via DingTalk. Line L12 adds support for 通讯录用户搜索和详情查询 (directory user search and detail lookup), which is a distinct people-directory capability not mentioned in the manifest description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill explicitly promotes querying other users' busy status and contact details, which are privacy-impacting operations, but it provides no warning, consent guidance, or authorization boundaries. In a calendar/contacts integration, this can normalize access to coworkers' availability and personal directory data without clear disclosure, increasing the risk of misuse or over-collection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documented delete operation performs a destructive action on calendar events, yet the skill gives no warning that deletion may be irreversible or disruptive to attendees and room bookings. Without a confirmation step or cautionary guidance, users or downstream agents may trigger unintended deletion of important events.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file’s substantive entries are entirely in Chinese, which can constitute a language/locale policy issue when no user opt-in or justification is provided. Because this is user-facing natural-language content and the file does not explain a China-specific scope, it may exclude users expecting a default or selectable language.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
73% confidence
Finding

All user-facing natural-language content in the skill is written exclusively in Chinese, and the file does not offer an alternative language or state that the skill is intentionally limited to Chinese-speaking users for a documented regional reason. Under the policy, forcing a specific language without user opt-in can be a locale-policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The package description is entirely in Chinese and does not indicate that the skill is region- or language-specific, nor does it offer an alternative language option. Under the policy criteria, this can be treated as a language/locale constraint presented without user opt-in or justification.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.