T09 · Insecure Skill Coding Practices
- Location
README.md:17- Finding
Persistent User-Wide Weakening of the PowerShell Execution Policy
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This weather skill's API use is understandable, but it ships only documentation while telling users to run missing PowerShell scripts and make a persistent PowerShell security-policy change.
Review this before installing. Do not run the persistent Set-ExecutionPolicy command unless you understand and accept the PowerShell security tradeoff; direct API requests do not require it. Also verify that the actual .ps1 scripts are present from a trusted source before trying to run them, because they were not included in the inspected package. Weather queries will contact Open-Meteo with the requested location coordinates and timezone.
README.md:17Persistent User-Wide Weakening of the PowerShell Execution Policy
Referenced artifact was not completely inspected
- `SKILL.md` - Skill description
The entire skill publishing document is written in Chinese, and the file gives no indication that users may choose another language for instructions. The policy requires flagging language or locale constraints when a skill forces a specific language without user opt-in, and this file does not present a choice within the document itself.
The README states a fixed timezone of Asia/Shanghai, which is a locale-specific constraint. The document does not explain that this limitation is optional, region-specific by design, or configurable by the user, so it can be read as forcing a locale without opt-in.
The phrase '专为中文用户设计' indicates the skill is intended specifically for Chinese users, and the README is entirely presented in Chinese without noting optional language support. That creates a natural-language locale preference that is not framed as user-selectable or otherwise justified as region-specific compliance.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 当前天气
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t_weather=true" -UseBasicParsing
# 7天预报
Invoke-WebRequest -Uri "https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737&daily=weathercode,temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia%2FShanghai" -UseBasicParsing
The troubleshooting guidance tells users to change PowerShell's execution policy to RemoteSigned without warning about the security implications or suggesting narrower, safer alternatives. Lowering execution restrictions can make it easier for a user to run untrusted scripts in the future, expanding attack surface beyond this weather skill.
The documentation instructs users to run Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser as troubleshooting guidance without explaining the security tradeoff. Lowering or changing execution policy can make it easier for users to run untrusted scripts, increasing exposure to malicious or tampered PowerShell content beyond this skill.
The document title and all instructions are presented only in Chinese, which imposes a specific language on the user without any stated opt-in or alternative. The policy explicitly flags language or locale constraints when the skill does not offer a user choice.
This markdown file presents the skill instructions exclusively in Chinese, which effectively forces a specific language on users. The policy allows locale constraints only when the skill offers user choice or clearly documents a justified region-specific limitation, neither of which is present here.
The document states that weather codes are translated to Chinese descriptions and that the skill supports English and Chinese display, while the overall file content and examples strongly center Chinese usage. This can indicate a locale-specific behavior that is not framed as user choice or opt-in, which may conflict with language/locale policy requirements.
This markdown file is written as a user-facing project summary but presents its primary instructions and description in Chinese, while describing the skill as optimized for Chinese/bilingual output. Under the language/locale policy rule, forcing a specific language without explicit user opt-in or choice can be a policy concern.
The document states the time zone is '亚洲/上海 (GMT+8)' as a fixed setting. Under the policy, forcing a specific locale without user opt-in can be a natural-language policy violation unless the regional constraint is clearly documented and justified; this publish document does not explain that limitation or offer alternatives.
The title explicitly presents this file as a Chinese quick reference ("快速参考"), and the content is predominantly in Chinese, while no opt-in or alternative-language note is provided within this file. Under the policy rule, forcing a specific language without user choice is a natural-language locale violation unless clearly documented as region-specific or optional.
No suspicious patterns detected.