T08 · Insecure Dependencies
- Location
scripts/meal_recommend.py:6- Finding
Mutable Remote Meal Data Is Downloaded Without Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a coherent meal-planning skill with disclosed network use and local preference storage, but users should understand its privacy and remote-data caveats.
Install only if you are comfortable with recipe data being downloaded from GitHub/jsDelivr, your saved city being sent to wttr.in for weather, holiday lookups going to date.nager.at, and preferences such as allergies or diet goals being stored locally in user_profile.json. For stricter environments, run it in a sandbox, pre-bundle or verify the recipe JSON files, and delete user_profile.json when you do not want persistence.
scripts/meal_recommend.py:6Mutable Remote Meal Data Is Downloaded Without Integrity Verification
The declared purpose emphasizes meal recommendations, but the skill also downloads remote data, calls external weather and holiday services, and persists user profile data locally. This mismatch can mislead users and reviewers about data flows and side effects, reducing informed consent and increasing privacy and supply-chain risk.
The declared purpose emphasizes meal recommendations, but the skill also downloads remote data, calls external weather and holiday services, and persists user profile data locally. This mismatch can mislead users and reviewers about data flows and side effects, reducing informed consent and increasing privacy and supply-chain risk.
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
---
name: daily-meal-planner
version: "1.3.0"
description: "每日智能菜谱推荐。触发词:今天吃什么/中午吃什么/晚餐推荐/下午茶/夜宵/一周菜单/清淡/辣的/快手菜/减肥。支持按餐次、口味、心情、季节、天气、地域智能推荐,带详细做法和营养数据。"
---
# Daily Meal Planner
智能推荐菜谱,支持用户画像记忆和偏好学习。每餐推荐3套完整套餐(主菜+配菜+汤/主食)。
## ⚠️ 安全与隐私说明
**网络请求**:
- 首次运行时会从 GitHub/jsdelivr(官方镜像)下载菜谱数据库
- 查询 wttr.in 获取实时天�
The skill declares no explicit tool scope or permissions despite documented use of network access and local file reads/writes. This weakens least-privilege enforcement and makes it harder for a host agent or reviewer to understand and constrain what the skill is allowed to do.
The trigger phrases are extremely broad and map to common conversational food requests, which can cause the skill to activate unexpectedly in normal chats. Because the skill may then perform network requests and write a persistent user profile, accidental activation has privacy and consent implications beyond a simple UX issue.
The documented trigger scenarios remain ambiguous and do not define when the skill should or should not take over. In this context, ambiguity is more dangerous because activation can lead to external requests and local persistence, not just harmless text generation.
User-facing strings, prompts, usage hints, and invocation examples throughout the file are written in Chinese, including reply instructions such as replying with Chinese words and dish names. There is no indication that users can choose another language or that the skill is intentionally restricted to a Chinese-speaking locale.
The skill performs undeclared outbound network access for recipe data bootstrap and later for weather and holiday APIs, which expands its trust boundary beyond a local recommendation engine. This creates privacy and supply-chain risk because behavior depends on third-party services and remote content not disclosed by the manifest or obvious to users.
On startup or first load, the skill may download recipe data from remote sources and save it locally without notifying the user. Even if the content is only data, silent downloads create both privacy concerns about outbound access and integrity concerns because the local state is modified based on remote input.
The code downloads arbitrary remote content from external mirrors and writes it directly into local JSON files used by the skill, with no signature verification, hash pinning, schema validation, or size limits. If the GitHub repository/CDN content is tampered with or a network path is compromised, the skill can be silently supplied attacker-controlled data that affects outputs and persists locally.
for base in DATA_MIRRORS:
try:
from urllib.request import urlopen;d=urlopen(f"{base}/{fn}",timeout=15).read()
with open(p,'wb') as f:f.write(d);return True
except:continue
return False
def _lj(fn):
The skill persists user profile data including location, food preferences, dislikes, mood, diet goal, and allergies to a local JSON file without any visible consent, retention policy, or access controls. This creates privacy risk because sensitive behavioral and health-adjacent data remains on disk and may be readable by other local users or processes.
Automatic weather lookup transmits the user's location to wttr.in without explicit warning or opt-in in this code path. Location is sensitive personal data, and sharing it with an external service for personalization can expose users to privacy harm and violate expectations or policy.
The holiday API call is not needed for meal recommendation and introduces unnecessary third-party dependency and metadata leakage such as timing and usage. While the returned data is low sensitivity, gratuitous network access increases attack surface and can surprise operators in restricted environments.
The docstring and user-facing messages/instructions in this file are entirely in Chinese, including the CLI usage output. Under the policy for natural-language violations, forcing a specific language without user opt-in can be a locale-policy issue when no alternative or explicit justification is provided.
The dependency is specified as requests>=2.28.0, which allows installation of many future or historical 2.28+ versions without ensuring a reviewed, known-safe release. This weakens supply-chain control and can result in non-reproducible builds or accidental installation of a vulnerable version if the environment resolves to one affected by a later or existing advisory.
requests>=2.28.0
Because the manifest does not pin requests to a specific version, there is no way to verify from this file alone whether deployment will use a release affected by known CVEs. In practice this creates uncertainty around exposure to issues such as credential leakage or other client-side HTTP flaws, especially if the skill or its support scripts make outbound network requests.
No suspicious patterns detected.