Back to skill

Security audit

Animated Financial Display Design System

Security checks for vulnerabilities and agentic risk

Overview

This is a normal UI-pattern skill with no bundled executable code, but its quick install command uses an unpinned remote installer that users should treat carefully.

Before installing, prefer a pinned or manually reviewed source instead of the unpinned `npx add` command, and adapt the example formatter locale and currency to your application. The skill content itself is ordinary frontend guidance and does not ask for sensitive data or background access.

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
README.md:22
Finding

Unpinned Package Execution in Installation Command

Content
View full analysis

Vulnerability Details

File Location: README.md, lines 22–26
Vulnerability Type: Supply-chain risk from an unpinned executable package and mutable remote source
Risk Level: Medium

Vulnerable Code:

bash
npx add https://github.com/wpank/ai/tree/main/skills/design-systems/animated-financial-display

Technical Analysis

The documented installation command invokes npx with the unversioned package name add. If that package is not already installed locally, npx may retrieve it from the configured npm registry and execute its package entry point with the current user's privileges.

Neither the executable package nor the Skill source is pinned to an immutable version. The GitHub URL references the mutable main branch instead of a reviewed commit SHA or integrity-verified release. Therefore, the code executed or installed later can differ from the content audited in this project.

This is an insecure dependency and installation pattern. The audited repository itself contains only documentation and example UI code; no malicious script was found in the repository.

Attack Path

  1. An attacker compromises the npm package, its publisher account, the package registry path, or the referenced GitHub repository.
  2. The attacker publishes a malicious package version or replaces content reachable through the mutable main branch.
  3. A user follows the documented installation instructions and runs the npx add ... command.
  4. npx downloads and executes the current package implementation.
  5. The malicious installer executes under the user's account and can modify files or access resources available to that account.

Impact Assessment

Successful exploitation could provide arbitrary code execution with the privileges of the user running the installation command. Potential scope includes reading or modifying user-accessible project files, environment variables, credentials, and configuration; maki ...[truncated 221 chars]

Remediation
View remediation

Remediation Suggestions

  • Replace the ambiguous npx add invocation with a trusted installer pinned to an exact package version.
  • Pin the remote Skill source to a reviewed Git commit SHA rather than the mutable main branch.
  • Where supported, enforce package integrity using a lockfile and cryptographic integrity hashes.
  • Prefer a verified release artifact with a published checksum or signature.
  • Use npx --no-install when execution must be limited to a dependency already installed and reviewed locally.
  • Alternatively, provide manual installation instructions that download reviewed files without executing a third-party npm package.
  • Advise users not to run installation commands with administrative privileges and to inspect remote content before installation.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (8)

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The README instructs users to execute npx add against a GitHub URL without any version pinning or integrity control. This creates a supply-chain risk because future changes to the remote repository or referenced branch could cause users to fetch and run unexpected content.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 35)May include surrounding context.

From your project root:

bash
mkdir -p .cursor/skills
cp -r ~/.ai-skills/skills/design-systems/animated-financial-display .cursor/skills/animated-financial-display

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 51)May include surrounding context.

From your project root:

bash
mkdir -p .claude/skills
cp -r ~/.ai-skills/skills/design-systems/animated-financial-display .claude/skills/animated-financial-display

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 58)May include surrounding context.

Claude Code (global)

bash
mkdir -p ~/.claude/skills
cp -r ~/.ai-skills/skills/design-systems/animated-financial-display ~/.claude/skills/animated-financial-display

External Model or Provider Selection

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.

Content

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

md
---
name: animated-financial-display
model: standard
description: Patterns for animating financial numbers with spring physics, formatting, and visual feedback. Covers animated counters, price tickers, percentage changes, and value flash effects. Use when building financial dashboards or trading UIs. Triggers on animated number, price animation, financial display, number formatting, spring animation, value ticker.
---

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description says the skill 'Triggers on animated number, price animation, financial display, number formatting, spring animation, value ticker.' Several of these phrases, especially 'number formatting' and 'financial display,' are broad and lack constraints or exclusion conditions. This can cause unintended invocation for general UI or formatting requests not specifically about this skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The formatter uses Intl.NumberFormat('en-US', ...) for currency formatting, which forces a specific locale in the skill guidance. The file does not indicate that locale selection is configurable or justified as a region-specific tool, so this conflicts with the policy against forcing a language or locale without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The compact formatter uses Intl.NumberFormat('en-US', ...) for general number display, again imposing a US locale convention. Because the skill does not offer locale selection or explain a US-only scope, this is a natural-language policy issue rather than a code security bug.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.