Back to skill

Security audit

Multi-panel Figure Assembler

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to locally assemble six image panels as advertised, but its Python dependency file should be cleaned up before installation.

Install only in a virtual environment or other sandbox, remove the 'pil' line, and pin reviewed versions of Pillow and numpy. Use only intended local image paths and output locations, because the script will read and write paths supplied on the command line.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (6)

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
pil
pillow
Confidence
95% confidence
Finding
The dependency 'numpy' is unpinned, so installs may resolve to different versions over time, including newly introduced vulnerable or breaking releases. In a build pipeline or agent environment, this weakens supply-chain control and makes security posture non-reproducible.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
pil
pillow
Confidence
99% confidence
Finding
The requirement 'pil' is unpinned and also suspicious because the legitimate modern imaging library is typically 'Pillow', while the original PIL package is obsolete. An unpinned ambiguous package name increases the risk of dependency confusion, typosquatting, or installation failure that could lead users to fetch an unsafe package.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
pil
pillow
Confidence
95% confidence
Finding
The dependency 'pillow' is unpinned, allowing uncontrolled upgrades or environment-dependent resolution. Because image-processing libraries often receive security fixes for malformed file handling, leaving it unpinned increases exposure to vulnerable versions and reduces reproducibility.

Known Vulnerable Dependency: numpy — 10 advisory(ies): CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +7 more

Critical
Category
Supply Chain
Confidence
91% confidence
Finding
Numpy has multiple published advisories, and because the requirement is unpinned, the project provides no assurance that a patched version will be installed. Even if some listed CVEs are version-specific or disputed, relying on an unconstrained dependency with known historical vulnerabilities creates real supply-chain and runtime risk.

Known Vulnerable Dependency: pillow — 10 advisory(ies): CVE-2016-2533 (Pillow buffer overflow in ImagingPcdDecode); CVE-2023-50447 (Arbitrary Code Execution in Pillow); CVE-2021-27922 (Pillow Uncontrolled Resource Consumption) +7 more

Critical
Category
Supply Chain
Confidence
97% confidence
Finding
Pillow processes attacker-controlled image data in many workflows, and the listed advisories include severe issues such as possible code execution and resource exhaustion. In a figure-assembly skill that is likely to ingest external image files, using an unpinned Pillow dependency substantially increases the chance of exploiting a vulnerable parser.

Possible Typosquatting: 'pil' resembles popular package 'pip'

High
Category
Supply Chain
Confidence
98% confidence
Finding
The package name 'pil' is highly suspicious in modern Python environments because the maintained fork is 'Pillow', and obsolete or lookalike names are common supply-chain attack vectors. If a malicious or unintended package is installed under that name, it could execute arbitrary code during installation or runtime.

Static analysis

No suspicious patterns detected.