Back to skill

Security audit

SF Symbol generator

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it advertises, but its generators can write or overwrite files outside the intended Xcode asset folder if given an unsafe symbol name.

Review this before installing in an automated or untrusted-input workflow. Use only trusted, simple SF Symbol names and known SVG paths, avoid letting issue text or repository data choose symbol-name or assets-dir, and add strict symbol-name validation plus destination containment checks before broad use.

Vulnerability Patterns
  • 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
  • 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)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/generate-from-template.js:428
Finding

Unsanitized Symbol Name Allows Path Traversal and Unauthorized File Overwrites

Content
View full analysis
"$symbolset_dir/Contents.json" <
Remediation
View remediation
&2 exit 1 fi ``` 2. **Enforce destination containment** Resolve the asset root and each destination to absolute paths, then verify that every destination remains beneath the resolved root before creating or writing files: ```javascript const resolvedAssetsDir = path.resolve(assetsDir); const symbolsetDir = path.resolve( resolvedAssetsDir, `${symbolName}.symbolset` ); if (!symbolsetDir.startsWith(`${resolvedAssetsDir}${path.sep}`)) { throw new Error('Destination escapes the asset directory.'); } const svgPathOut = path.resolve(symbolsetDir, `${symbolName}.svg`); if (!svgPathOut.startsWith(`${symbolsetDir}${path.sep}`)) { throw new Error('SVG destination escapes the symbolset directory.'); } ``` Use canonicalized paths and equivalent containment checks in the shell script. 3. **Prevent unintended overwrites** Refuse to replace an existing symbolset unless the user supplies an explicit `--force` option. For JavaScript writes, use exclusive creation flags where appropriate: ```javascript fs.writeFileSync(svgPathOut, outputSvg, { flag: 'wx' }); ``` 4. **Escape output according to its format** XML-escape any value inserted into SVG text. Generate JSON using a JSON serializer rather than interpolati ...[truncated 672 chars]
Vulnerability Patterns
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (1)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.