Back to skill

Security audit

Figma Toolkit Free

Security checks for vulnerabilities and agentic risk

Overview

The skill is broadly consistent with a Figma design-export workflow, but it asks agents to run unpinned external packages with write and exec authority while handling a Figma access token and giving weak scope controls.

Install only if you are comfortable letting an agent run npm/Python package code and use a Figma Personal Access Token. Prefer a dedicated least-privilege Figma token, pin and review figma-developer-mcp and requests before use, restrict writes to a known project/output directory, and avoid using callback URLs or modify/delete-style operations unless you explicitly intend them.

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:146
Finding

Unpinned Third-Party Dependencies Are Downloaded and Executed at Runtime

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:146, SKILL.md:156-170, and SKILL.md:241
Vulnerability Type: Unpinned and integrity-unverified third-party dependencies
Risk Level: Medium

Vulnerable Code

bash
pip install requests
python
result = subprocess.run([
    "npx", "figma-developer-mcp",
    "--file-key", "abc123",
    "--node-id", "1:2",
    "--action", "screenshot"
], capture_output=True, text=True)
python
result = subprocess.run([
    "npx", "figma-developer-mcp",
    "--file-key", "abc123",
    "--action", "variables"
], capture_output=True, text=True)
text
figma-developer-mcp | npm package | required | npx figma-developer-mcp

Technical Analysis

The Skill instructs the Agent to install requests without an exact version and to invoke figma-developer-mcp through npx without a pinned version, lockfile, checksum, signature, or other integrity control.

In particular, npx may download a package from the npm registry and execute its package lifecycle or entry-point code immediately. The effective executable payload can therefore change after the Skill has been reviewed. An upstream account compromise, malicious package release, registry compromise, or unexpected package ownership change could cause attacker-controlled code to run when the documented workflow is invoked.

The Python dependency is also mutable because no version constraint or hash is supplied. Although there is no evidence that either named package is currently malicious, the installation and execution model exposes users to avoidable software supply-chain risk.

Attack Path

  1. An attacker compromises the publication account, release pipeline, or distribution channel of one of the referenced packages.
  2. The attacker publishes a malicious package version under the expected package name.
  3. A user or Agent follows the Skill instructions without specifying ...[truncated 1265 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin every dependency to an exact, reviewed version, for example by using an explicit npm package version and an exact Python package version.
  2. Avoid implicit runtime downloads through bare npx commands. Install dependencies in a controlled build step and invoke the verified local executable.
  3. Commit appropriate lockfiles, such as package-lock.json and a hash-locked Python requirements file.
  4. Verify package integrity using registry integrity metadata, cryptographic hashes, signatures, or an approved internal artifact repository.
  5. Configure package managers to use trusted registries explicitly and prevent dependency confusion through namespace and source controls.
  6. Review package provenance, maintainers, release history, lifecycle scripts, and transitive dependencies before approval.
  7. Run dependency code in a restricted sandbox with minimal filesystem access, narrowly scoped network access, and no unrelated secrets in the environment.
  8. Use a dedicated, least-privileged Figma token and avoid exposing it to dependency installation or lifecycle-script phases.
  9. Add automated dependency scanning and controlled update review so version changes cannot silently alter the executed payload.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (7)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 223)May include surrounding context.

md
### Q3: 如何获取API Key?

A: 需要Figma个人访问令牌(Personal Access Token)。如需外部服务API,请参考对应服务的注册流程。

### 已知限制

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 245)May include surrounding context.

md
### Q3: 如何获取API Key?

A: 需要Figma个人访问令牌(Personal Access Token)。如需外部服务API,请参考对应服务的注册流程。

### 已知限制

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill declares both write and exec capabilities for a design-conversion workflow without narrowly justifying or constraining them. In an agent environment, broad write and shell access materially increase the blast radius from prompt abuse, dependency compromise, or operator misunderstanding.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest markets this as a narrow free Figma toolkit, but the body describes generic create/query/modify/delete style operations beyond that stated scope. This scope expansion can mislead users and agents into granting broader authority than expected, increasing the chance of unsafe actions under an innocuous label.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill describes subprocess execution, resource export, and credential-backed operations but does not prominently warn users about command execution, local file writes, network access, or sensitive design-data handling. Missing safety disclosures increase the risk of users invoking powerful actions without informed consent in an agent context.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The skill instructs execution of an npm package via npx figma-developer-mcp without pinning a specific version or integrity source. That creates a supply-chain risk: a future malicious or compromised package release could be fetched and executed automatically with the agent's command-execution privileges.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The quick-start section says the skill can be used with zero configuration, yet the file later requires Python, requests, Node.js, figma-developer-mcp, and a Figma Personal Access Token (L141-L147, L241-L246). This is an active contradiction between the usage claim and the actual documented setup requirements.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.