Back to skill

Security audit

Piano Score Fingering Arrangement

Security checks across malware telemetry and agentic risk

Overview

This skill is a local piano-score fingering tool that reads user-supplied score files and writes annotated outputs without hidden network, persistence, or unrelated actions.

Install only if you are comfortable giving the skill local access to the score files you provide and allowing it to create output PDFs, MusicXML, JSON plans, reports, and temporary files. Use trusted input PDFs where possible because the workflow preserves and overlays source PDF pages.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (6)

eval() call detected

High
Category
Dangerous Code Execution
Content
raise NameError(arg)
        else:
            code = forward_ref.__forward_code__
            value = eval(code, globals, locals)
        forward_ref.__forward_evaluated__ = True
        forward_ref.__forward_value__ = value
        return value
Confidence
89% confidence
Finding
This code evaluates forward-reference expressions with Python eval(), which can execute arbitrary code if annotations or forward reference strings are attacker-controlled. In many applications annotations are trusted developer input, but in systems that ingest untrusted Python objects, plugins, or generated code, this becomes a code-execution sink.

eval() call detected

High
Category
Dangerous Code Execution
Content
locals = {param.__name__: param for param in type_params} | locals

        return_value = {key:
            value if not isinstance(value, str) else eval(value, globals, locals)
            for key, value in ann.items() }
        return return_value
Confidence
90% confidence
Finding
get_annotations() evals string annotations when eval_str=True, which can execute arbitrary Python embedded in annotations. This is expected behavior for annotation resolution, but it is unsafe if used on untrusted modules, classes, or callables because annotation strings become a code-execution primitive.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill instructs the host to read local files, write outputs, invoke Python scripts, and run shell commands, yet no explicit permissions are declared. This creates an authorization gap where a host or reviewer may underestimate the skill's real capabilities, increasing the chance of unintended file access or command execution beyond what users expect.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The writer exposes an add_js() API that embeds document-opening JavaScript into generated PDFs. In a skill focused on piano score recognition and fingering, this active-content capability is unrelated to core functionality and could be abused to produce PDFs that trigger viewer actions, phishing dialogs, or other unsafe behavior when opened.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The add_attachment() API allows arbitrary files to be embedded inside exported PDFs. That capability is not necessary for piano fingering annotation and can be misused to smuggle executables, scripts, or deceptive payloads inside otherwise trusted-looking score PDFs.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The code permits embedding open-on-launch JavaScript with no confirmation, warning, or policy enforcement at the API boundary. In this skill context, that increases the chance that generated sheet-music PDFs could carry hidden active behavior that users would not reasonably expect from a notation/fingering tool.

VirusTotal

63/63 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.exposed_secret_literal, suspicious.obfuscated_code

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/vendor/typing_extensions.py:1485

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/vendor/pypdf/_encryption.py:629

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
scripts/vendor/pypdf/_reader.py:174

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/vendor/pypdf/_doc_common.py:93

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/vendor/pypdf/_encryption.py:112

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/vendor/pypdf/generic/_image_inline.py:194