T09 · Insecure Skill Coding Practices
- Location
calibrator.py:243- Finding
Simulated Chart Data Can Be Reported as a Successful Calibration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is not clearly malicious, but it needs review because it can treat simulated birth-time calibration as successful and keeps sensitive session data without clear expiry or ownership controls.
Install only if you are comfortable reviewing or fixing the simulated calibration path before relying on results. Treat birth time, gender, location, and chart outputs as sensitive personal data; avoid sending generated prompts to external LLMs without explicit user consent, and do not deploy the interactive session handler in a shared service until session IDs, ownership checks, expiration, and data deletion are implemented.
calibrator.py:243Simulated Chart Data Can Be Reported as a Successful Calibration
dialogue_handler.py:28Caller-Controlled Session Identifiers Permit Cross-Session Data Access and Indefinite Sensitive-Data Retention
README.md:17Third-Party Dependency Is Installed Without Version or Integrity Pinning
The documentation makes conflicting privacy claims: it says data is 'not stored' while also describing session tracking and configurable persistence/caching. For a module processing highly sensitive birth-time and profile data, this can mislead integrators and users into unsafe assumptions about retention and exposure, leading to unauthorized storage or inadequate consent/disclosure.
The module handles sensitive personal data, including birth datetime and related profiling outputs, but the documentation does not give a clear user-facing warning about privacy implications, consent, retention, or access controls. In this skill context, such data is especially sensitive because it is directly tied to identity-like attributes and may be logged, cached, or used in interactive sessions.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests resp = requests.post("http://localhost:8080/skills/ziwei/arrange", json=payload)
### 步骤2:安装依赖
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests resp = requests.post("http://localhost:8080/skills/ziwei/arrange", json=payload)
### 步骤2:安装依赖
Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.
import requests resp = requests.post("http://localhost:8080/skills/ziwei/arrange", json=payload)
### 步骤2:安装依赖
该技能说明全文使用中文,且没有声明这是面向特定中文用户或特定区域的专用技能,也没有提供语言切换或用户选择。按照语言/locale 政策,若技能实际上强制单一语言而无用户 opt-in,应视为自然语言策略违规。
The documentation presents ziwei as an active dependency that provides real chart computation, and the examples describe actual recalculation during calibration. However, the known-limitations section explicitly says the current invoke_ziwei_skill() is only a mock implementation needing replacement, which contradicts the earlier operational description and could mislead users about what the skill actually does.
The natural-language content of the skill, including its name, description, schemas, and operational notes, is presented in Chinese only. Under the policy, forcing a specific language without user opt-in or a clearly justified regional constraint is a natural-language policy violation.
The module presents itself as a confidence-maximizing birth-time calibration engine, but its placeholder scoring logic raises confidence based on distance from a fixed hour rather than evidence from real verification data. If this simulated path is used in production or trusted by downstream automation, it can systematically select arbitrary offsets and falsely label them as calibrated, causing integrity failures in decision-making based on the result.
This code file contains user-facing natural-language descriptions entirely in Chinese, beginning with the module title and behavior description. Under the policy, forcing a specific language without user opt-in is a language/locale policy violation unless the constraint is explicitly documented and justified, which is not present here.
The module docstring and all user-facing strings in this file are Chinese-only, which imposes a specific language on users. The policy allows fixed locale/language only when there is explicit opt-in or a clearly justified regional constraint, neither of which is present here.
This code file contains natural-language descriptions and console output entirely in Chinese, including the module docstring and test status messages. Under the policy, forcing a specific language without user opt-in is a locale/language policy violation unless the constraint is explicitly justified.
The module docstring and user-facing parameter/return descriptions are entirely in Chinese, including invocation guidance and warnings, with no indication that another language is supported. This can violate language/locale policy when the skill is used in broader environments because it imposes a specific language without offering user choice or documenting a justified regional constraint.
This Python file hard-codes all visible output text in Chinese, including headers, prompts, and conclusions. Under the natural-language policy rule, forcing a specific language without user opt-in is a locale-policy concern unless the skill is explicitly documented as region-specific, which is not evident in this file.
The module description and all user-facing templates are written exclusively in Chinese, and the code explicitly describes returning Chinese confidence/status text for end users. There is no indication that language choice is configurable or that the skill is intentionally limited to a Chinese-only regional context, which creates a natural-language locale policy concern.
This is a natural-language policy issue because the file presents its purpose and interaction text in a single language only. There is no indication that the skill is region-specific or that users can opt into Chinese, which can violate language/locale choice requirements.
The main user-visible console output is hardcoded in Chinese, which imposes a specific language on users. The file does not provide any locale selection, fallback language, or justification for restricting output to Chinese.
This plain-text prompt file contains all user-facing instructions and confirmations in Chinese only, and nowhere indicates that the user can choose another language or that the skill is intentionally limited to Chinese-speaking users. That creates a natural-language policy concern because it forces a specific language without user opt-in.
This plain-text template file is entirely hard-coded in Chinese across success, failure, interactive, report, card-message, and TTS outputs. Under the natural-language policy rule, enforcing a specific language without user opt-in is a locale/language policy violation unless the constraint is explicitly documented and justified, which is not present here.
This code embeds all human-readable docstrings, schema descriptions, warnings, and error messages in Chinese, such as the module header, schema field descriptions, and validation errors. The file does not indicate that the skill is China-specific or provide any user opt-in or localization option, which can violate language/locale policy requirements.
This file contains natural-language descriptions, headings, and field explanations exclusively in Chinese, which can impose a language/locale constraint on users or maintainers without opt-in. The policy allows fixed locale only when user choice is offered or the regional restriction is clearly justified, neither of which is present here.
parse_birth_datetime advertises a timezone parameter but ignores it, and silently appends +08:00 whenever the input lacks an offset. In a date/time-sensitive skill, this can cause systematic misinterpretation of user birth times, leading to incorrect downstream calculations and potentially incorrect authorization, audit, or business logic decisions if reused elsewhere. The skill context increases risk because astrology/calendar calculations are highly sensitive to exact time and timezone handling.
The example explicitly generates a prompt from a user packet and sends it to an external LLM service (openai.ChatCompletion.create) without any warning, consent flow, data minimization, or redaction guidance. Because the packet appears to include sensitive personal data such as birth date, gender, and location, this documentation normalizes transmitting potentially sensitive user data to a third party and can lead integrators to deploy privacy-unsafe behavior by default.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
请求示例:
curl -X POST http://localhost:5000/api/ziwei/analyze \
-H "Content-Type: application/json" \
-d '{
"gender": "M",
Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.
# Python 代码
from ziwei_verify.config import set_config
set_config(debug_mode=True)
Detected: suspicious.dynamic_code_execution