T08 · Insecure Dependencies
- Location
scripts/weather.py:12- Finding
Unpinned Third-Party Dependency Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a straightforward weather lookup skill that sends city/location data to Open-Meteo and does not show hidden persistence, credential access, or destructive behavior.
Install this only if you are comfortable sending requested city names and approximate coordinates to Open-Meteo. If requests is missing, prefer installing dependencies in a virtual environment from a reviewed requirements file rather than running a global unpinned pip command.
scripts/weather.py:12Unpinned Third-Party Dependency Installation
The script performs outbound network requests to third-party APIs (Open-Meteo geocoding and forecast) but the finding indicates this capability is not declared in permissions. In an agent-skill environment, undeclared network access is a real security and governance issue because user-supplied city queries are transmitted externally without explicit permissioning or transparency.
The activation description is very broad and maps to common, everyday conversation about weather, which increases the chance the skill will trigger when the user did not explicitly intend to invoke it. In an agent setting, overly broad invocation can cause unnecessary tool use and unintended transmission of user-provided location text to the weather script or downstream services.
The file’s user-facing instructions are entirely in Chinese, including headings, notes, and usage guidance, with no indication that users may choose another language. This can violate a language/locale policy when a skill effectively forces a specific language without user opt-in.
The skill sends user-derived location queries and resolved coordinates to an external weather service, which constitutes external data transmission. In the context of a weather skill this behavior is expected, but it still has privacy implications because user interests or approximate locations may be exposed to third parties, especially without explicit consent or clear disclosure.
print(f"找到位置:{geocode_result['name']}, {geocode_result.get('admin1', '')}, {geocode_result.get('country', '')}")
# 构建API请求URL
url = f"https://api.open-meteo.com/v1/forecast"
params = {
"latitude": city["latitude"],
"longitude": city["longitude"],
The description states '默认查询北京', which imposes a China-specific default when no city is provided. This bakes in a locale-specific assumption without offering the user a choice or documenting why that regional default is required.
This code file contains natural-language behavior that forces a specific language/locale: the docstring, user-facing messages, formatted output, and API parameter all assume Chinese. Under the policy, locale constraints should offer user choice or be explicitly justified; no such opt-in or justification appears here.
No suspicious patterns detected.