Back to skill

Security audit

专业宠物(猫、狗及异宠)多轮医疗问诊

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed VetMew API client for pet consultation and pet Q&A, with manageable privacy and supply-chain cautions.

Install only if you are comfortable sending pet health questions, pet profile details, and any provided images or image URLs to VetMew. Keep the VetMew token scoped to this service, clear stored conversation IDs when no longer needed, and prefer a version with pinned dependencies for reproducible installs.

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
requirements.txt:1
Finding

Unpinned Third-Party Dependencies Create a Supply-Chain Risk

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1-2
Related Installation Configuration: SKILL.md:13-15
Vulnerability Type: Unconstrained third-party package resolution
Risk Level: Medium

Vulnerable Code

requirements.txt:1-2:

text
requests
python-dotenv

SKILL.md:13-15:

yaml
install:
  - kind: pip
    spec: -r requirements.txt

Technical Analysis

The dependency declarations do not constrain package versions or verify package hashes. Each installation can therefore resolve a different release of requests, python-dotenv, or their transitive dependencies from the configured Python package index.

This exceeds the minimum dependency privileges necessary for the Skill because reviewed, reproducible versions could be pinned without affecting its declared veterinary consultation functionality. If a dependency account, package release, package index, or transitive dependency is compromised, installation may retrieve attacker-controlled content that was not present during this audit.

No evidence indicates that the currently named packages are malicious. The vulnerability is the absence of controls that ensure future installations receive the same reviewed artifacts.

Attack Path

  1. An attacker compromises a declared dependency, one of its transitive dependencies, or the package distribution channel.
  2. The attacker publishes a malicious version that still satisfies the unconstrained requirement.
  3. A user or agent installs the Skill using pip -r requirements.txt.
  4. Package resolution selects and downloads the malicious or compromised release.
  5. Attacker-controlled code executes during package installation or when the Skill imports the affected package.
  6. The code inherits the privileges and accessible data of the account running installation or the Skill.

Impact Assessment

Successful exploitation could allow arbitrary Python code execution in the installer or Skill process. Depending on t ...[truncated 552 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every direct dependency to a reviewed version, for example:
text
requests==<reviewed-version>
python-dotenv==<reviewed-version>
  1. Generate a lock file that includes exact versions for all transitive dependencies.
  2. Require cryptographic hashes during installation, such as with a hash-locked requirements file and pip install --require-hashes.
  3. Install only from an explicitly trusted package index and disable unintended extra indexes where operationally possible.
  4. Run dependency vulnerability and provenance checks in CI before publishing the Skill.
  5. Review and deliberately update dependency pins rather than resolving the newest available versions during deployment.
  6. Perform installation and execution under a least-privileged account without unnecessary filesystem, credential, or network access.
Vulnerability Patterns
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The manifest frames the skill as a specialized pet medical consultation tool, yet it also exposes a general-purpose free_chat.py, optional online search, and conversation-state management that are not clearly reflected in the declaration. In a medical-context skill, undisclosed general chat and online retrieval expand functionality and data exposure in ways reviewers may not anticipate, increasing the risk of misuse, privacy leakage, and unsafe outputs.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The manifest frames the skill as a specialized pet medical consultation tool, yet it also exposes a general-purpose free_chat.py, optional online search, and conversation-state management that are not clearly reflected in the declaration. In a medical-context skill, undisclosed general chat and online retrieval expand functionality and data exposure in ways reviewers may not anticipate, increasing the risk of misuse, privacy leakage, and unsafe outputs.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/client.py (reported line 13)May include surrounding context.

python
import sys
from dotenv import load_dotenv

# 加载 .env 环境变量
load_dotenv()

class VetMewError(Exception):

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/consultation.py (reported line 22)May include surrounding context.

python
import sys
from dotenv import load_dotenv

# 加载 .env 环境变量
load_dotenv()

class VetMewError(Exception):

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/exotic_consultation.py (reported line 22)May include surrounding context.

python
import sys
from dotenv import load_dotenv

# 加载 .env 环境变量
load_dotenv()

class VetMewError(Exception):

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/free_chat.py (reported line 21)May include surrounding context.

python
import sys
from dotenv import load_dotenv

# 加载 .env 环境变量
load_dotenv()

class VetMewError(Exception):

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill requires environment access to retrieve VETMEW_AUTH_TOKEN and describes network-backed API usage, but it does not declare an explicit tool scope such as permissions or allowed tools. This weakens platform-level containment and makes it easier for an agent to access secrets or perform network actions beyond what a reviewer expects from the manifest alone.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The markdown explicitly requires breed names to be standard Chinese names, which imposes a language-specific constraint on users. The file does not offer opt-in language selection or explain that this is a justified region-specific requirement, so it conflicts with the language/locale policy criterion.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

Comments, docstrings, and user-visible error text are written only in Chinese, which implies a fixed language/locale choice without any visible opt-in or fallback. The stated policy requires flagging language constraints when the skill forces a specific language without user choice or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This file contains natural-language comments, docstrings, exception messages, and printed instructions entirely in Chinese, including the user-facing credential error output. Under the policy, forcing a specific language without user opt-in is a locale/language policy violation unless the skill is clearly documented as region-specific, which is not shown here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

All user-visible prompts, help text, and error messages in this script are written in Chinese, including authentication guidance, argument help, and runtime warnings. There is no indication that the user can choose another language or that the locale restriction is documented as an intentional region-specific constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The script transmits user-supplied consultation content and pet metadata to a remote VetMew API via client.request_sse(path, payload) without an explicit disclosure or confirmation at the point of transmission. In a medical-style consultation context, the payload can include sensitive pet health details and user-provided images/URLs, so lack of clear notice reduces informed consent and can create privacy/compliance risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This code includes natural-language prompts, errors, and help text entirely in Chinese, such as the authentication guidance and argument help strings. Because the skill does not offer an opt-in language selection or document that it is intentionally limited to a Chinese-speaking audience, it violates the locale-choice policy.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The error-handling text explicitly distinguishes misuse between '医疗问诊' and '知识问答', then instructs the user to reset a 'knowledge Q&A' session slot. This is an active contradiction in inline user guidance about what kind of session this code is supposed to manage.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest says the skill is for professional pet medical consultation, but the user-facing parser description identifies the script as a general 'knowledge Q&A' free-chat skill. This indicates the implemented function is framed as a broader or different capability than the manifest’s narrower medical-consultation purpose.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency list includes requests without a version pin, which makes builds non-reproducible and can cause the skill to install a vulnerable or incompatible release depending on when and where it is deployed. In a medical consultation skill that may process sensitive pet owner and health-related data, dependency drift increases supply-chain risk and can expose the application to known issues present in some requests versions.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
requests
python-dotenv

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
89% confidence
Finding

The manifest references requests without a pinned version, and the package has multiple known advisories affecting some releases. Because the actual installed version is unknowable from this file, the project may inadvertently pull a vulnerable build, which is especially relevant for a skill that likely makes outbound API calls and may handle credentials, tokens, or user-submitted diagnostic data.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

python-dotenv is also unpinned, so deployments may resolve to different versions with different behavior or security posture. This is a supply-chain hygiene weakness rather than an immediately exploitable bug by itself, but it becomes more concerning when the package is used to load secrets and environment configuration for an API-backed service.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
requests
python-dotenv

Unverifiable Dependency: python-dotenv has 2 known advisory(ies) (CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via ); CVE-2026-28684 (python-dotenv reads key-value pairs from a .env file and can set them as environ)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
82% confidence
Finding

python-dotenv has known advisories in some versions, and the file does not constrain which version will be installed. Since this library often interacts with local environment files and secrets, an unsafe version could increase the risk of configuration tampering or unsafe file handling, though the danger depends on how the package is used elsewhere in the skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The code fetches breed data from an external URL using requests.get and parses the response, but there is no user-facing notice before or during this network operation. While the docstring explains the behavior for developers, the file provides no confirmation prompt or explicit disclosure to users that external network access occurs.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest frames this skill as providing pet symptom analysis and diagnostic suggestions via the VetMew API, but the code also implements credential acquisition from process environment state using VETMEW_AUTH_TOKEN. Accessing environment-provided secrets is an operational capability not reflected in the stated purpose, even though it supports API use.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

All user-facing help, prompts, and error messages in the script are written in Chinese, including authentication guidance and operational prompts. The file does not provide any user opt-in, locale selection, or documented justification for enforcing a single language, which matches the language/locale policy violation criteria.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.