T09 · Insecure Skill Coding Practices
- Location
main.py:27- Finding
MQTT Credentials Transmitted Without Server Certificate Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent local Bambu printer monitoring tool, but it handles printer credentials and telemetry with weak protections that users should review before installing.
Install only if you are comfortable with a local dashboard that auto-starts, monitors your printer farm, and stores printer access codes locally in plaintext. Before use, consider requiring certificate verification or certificate pinning, protecting or moving config.json to a secret store, adding authentication to the APIs, removing serial numbers from responses, and fixing unsafe dashboard rendering.
main.py:27MQTT Credentials Transmitted Without Server Certificate Verification
main.py:95Printer Access Codes Stored in a Plaintext Configuration File
main.py:132Unauthenticated Status API Exposes Printer Serial Numbers and Telemetry
templates/index.html:211DOM-Based Cross-Site Scripting Through Untrusted Printer Telemetry
The pinned dependency jinja2==3.1.3 is associated with multiple published advisories, including sandbox breakout and injection issues. If this skill renders templates using untrusted input, these flaws can enable template escape, code execution paths, or cross-site scripting depending on deployment context, making the risk especially serious for any web-exposed or agent-controlled interface.
The pinned dependency fastapi==0.109.0 is flagged with a known vulnerability (CVE-2024-24762). In a requirements file for an agent skill, shipping a version with a published advisory can expose any API surface built on FastAPI to denial of service, input handling, or other framework-level weaknesses depending on how the skill uses it.
Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.
The README instructs users to enter highly sensitive printer credentials, including access codes and serial numbers, and states they will be saved to config.json, but it does not describe secure input handling, file permission restrictions, encryption, or exclusion from source control. In the context of a LAN-connected printer management skill, exposed credentials could allow unauthorized access to printers, monitoring data, or device control if the file is copied, logged, or shared.
The skill instructs the agent to call /api/agent/brief every hour or on status changes for proactive reminders, but it does not clearly disclose this background monitoring or require explicit opt-in. In a LAN-connected device-monitoring skill, this increases surveillance and privacy risk because the agent may continuously observe device state and speak updates without the user fully understanding or consenting to that behavior.
The trigger phrase “帮我看看打印机” is broad and conversational, making accidental activation plausible during ordinary speech. In this skill’s context, activation can cause the agent to query local printer-farm status and announce operational details, which creates privacy and unintended-action risk even if it does not directly control the printers.
Multiple user-visible strings, including printer states, setup prompts, and agent speech output, are fixed in Chinese with no language selection or opt-in mechanism. This is a natural-language policy concern because the skill imposes a specific locale on all users regardless of preference.
The setup wizard stores printer access codes and serial numbers directly in a local JSON file in plaintext. These credentials can be exposed to other local users, backups, logs, or accidental source-control commits, enabling unauthorized access to the printers or disclosure of device-identifying information.
The skill's name, description, and capability text are entirely in Chinese, and the manifest does not state that the skill is intended only for Chinese-speaking users or offer any language choice. This can violate language/locale policy because it imposes a specific language without documented opt-in or justified regional scoping.
The HTML root sets lang="zh-CN", and the visible interface text throughout the page is only in Simplified Chinese. Under the policy, forcing a specific language/locale without user opt-in is a natural-language policy violation unless the constraint is explicitly justified or optional.
The README presents the skill entirely in Chinese and the OpenClaw invocation examples are only given in Chinese, which can imply a forced language/locale expectation. Under the policy rule, language constraints should either offer user choice or be clearly documented as a justified regional limitation.
The file contains only Chinese-language descriptive comments for the project structure and components. This imposes a specific language in the skill metadata/comments without any indication of user choice or documented locale-specific justification.