Back to skill

Security audit

fruit-picker

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed photo-based fruit-picking assistant with some ordinary dependency and network-fetch caveats, but no evidence of hidden, destructive, or credential-seeking behavior.

Reasonable to install for Chinese-language fruit photo guidance. Be aware that running the helper scripts may install Pillow from your configured Python package source, and if bundled reference images are absent the skill may fetch replacement images from GitHub; use a restricted environment or disable network access if that matters.

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 (2)

T08 · Insecure Dependencies

Warning
Location
scripts/color_lab.py:2
Finding

Unpinned Pillow Dependency in the CIELAB Image Analysis Script

Content
View full analysis
=3.10" # dependencies = ["pillow"] # /// ``` ```text uv run /scripts/color_lab.py --surface spine --g 1.0 \ --target spine1.png --target spine2.png [--ref white-card.png] (or `pip3 install pillow` once and use plain python3). ``` ### Technical Analysis The script declares `pillow` without an exact version or integrity hash. Running it through `uv run` may dynamically resolve and install the currently available package release. The documented alternative, `pip3 install pillow`, has the same mutable resolution behavior. Consequently, the installed code is not necessarily the same dependency version that was reviewed or tested with this project. If the configured package index, distribution infrastructure, or a future Pillow release is compromised, package-controlled code could run during installation, import, or image processing. An unintentionally vulnerable future version could also expose the script to maliciously crafted image files. This is a supply-chain hardening issue. The audit did not establish that the current Pillow package is malicious. ### Attack Path 1. A user invokes the script with `uv run`, or follows the documented `pip3 install pillow` instruction. 2. The package manager resolves an unpinned Pillow release from its configured package source. 3. A compromised, substituted, or vulnerable release is downloaded and installed. 4. Package-controlled code executes during installation or when `PIL` is imported. 5. Alternatively, a vulnerable image decoder is reached when the script opens an attacker-controlled target or reference image. 6. The dependency code executes with the permissions of the account running the script. ### Impact Assessment Successful exploitation could provide co ...[truncated 455 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/watermelon_texture.py:2
Finding

Unpinned Pillow Dependency in the Watermelon Texture Analysis Script

Content
View full analysis
=3.10" # dependencies = ["pillow"] # /// ``` ```text uv run /scripts/watermelon_texture.py --g usable \ --crop melon1.png --crop melon2.png --crop melon3.png (or `pip3 install pillow` once and use plain python3). ``` ### Technical Analysis The script instructs the runtime to install `pillow` without an exact version or cryptographic integrity constraint. Both the inline `uv` dependency declaration and the documented pip command can resolve a package version that changes over time. This prevents reproducible dependency review and leaves execution dependent on the current state of the configured package source. A compromised package release or distribution channel could introduce executable code after the Skill itself has been audited. A vulnerable decoder version could also be attacked through crafted image crops processed by `PIL.Image.open`. This finding concerns dependency provenance and version control. No evidence was found that the current Pillow distribution or this script contains an intentional malicious payload. ### Attack Path 1. A user runs the script through `uv run` or installs Pillow with the documented pip command. 2. The package manager selects an unpinned release from the configured package source. 3. A compromised, substituted, or vulnerable distribution is installed. 4. Package-controlled code runs during installation or when the script imports Pillow. 5. Alternatively, an attacker supplies a crafted crop that reaches a vulnerability in the selected image decoder. 6. Any successful code execution inherits the permissions and accessible resources of the user running the script. ### Impact Assessment A successful supply-chain or decoder exploit could execute code as th ...[truncated 414 chars]
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个面向用户的水果照片评估技能,范围较广,包括挑水果、判断能不能买、成熟度、品质风险、身份/品种置信度和购买建议。实际代码则是单一脚本,专门进行 Monthong 榴莲图像的 CIELAB 色彩测量和基于固定阈值的阶段分类,输出 M1/M2 区间、颜色指标和若干质量标志。它并不执行通用水果判断,也不做品种识别、购买建议或对话式综合决策。虽然“成熟度/品质风险评估”中的一小部分与代码有关,但整体主用途和能力范围明显更窄且不同,因此属于描述与行为不匹配。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description and operating instructions are written as mandatory Chinese-language behavior, including user-trigger phrasing like '用户发来水果照片' and output requirements such as '说人话'. There is no indication that users may choose another language or locale, so this creates a language policy concern under the natural-language policy rule.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file's natural-language instructions are entirely in Chinese, which effectively forces a specific language for operators or users reading the skill documentation. Under the policy, language-specific content should either provide an explicit choice/opt-in or clearly justify the locale restriction as region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README directs the skill to fetch reference images from a fixed remote GitHub URL when local files are missing, which introduces network-dependent behavior and a supply-chain trust dependency outside the immediate packaged skill contents. In a photo-evaluation skill, silently pulling remote assets can change model inputs over time, leak usage metadata, and allow compromised upstream content to influence recommendations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This markdown file contains user-facing operational instructions only in Chinese, with no indication that users may choose another language or that the locale restriction is intentional and justified. Under the policy rule, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown skill appears to require Chinese comprehension throughout, including headings, instructions, inputs, and outputs. Under the policy rule for natural-language violations, forcing a specific language without user opt-in is a reportable issue unless the locale constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The entire skill specification, prompts, and required output wording are written only in Chinese, including mandatory output templates and core phrases. This creates a language/locale constraint without any stated opt-in or alternative language option, which matches the policy category for forced language behavior.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This code hard-codes Chinese natural-language stage labels and later emits Chinese warning text to users, but there is no indication that the skill is region-specific or that users can opt into this locale. Under the policy, forcing a specific language without user choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This code emits user-facing error messages and the final note in Chinese only, with no option to select another language or inherit the user's locale. That is a natural-language policy issue because it imposes a specific language without documented opt-in or justification in this file.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
63% confidence
Finding

Line L03 says real-photo replacement should prioritize 'identity-class' materials, implying these assets matter for identity-related judgments. But L06 says anchor images must not be used as a basis for variety identification or authenticity at all. These statements create an intent-level contradiction about whether identity-related reference imagery is meant to support identification decisions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The document instructs runtime retrieval from a remote URL without any user-facing disclosure that network access may occur. While overlapping with the remote-fetch issue, this is separately risky because users and operators may assume an offline photo-analysis skill, and undisclosed outbound requests can create privacy and policy-compliance problems.

Content

No source excerpt is available for this finding.