T03 · Remote Payload Retrieval and Execution
- Location
assets/template/main.py:325- Finding
Remote OTA Packages Are Installed Without Cryptographic Authenticity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its gas-reporting purpose, but its template includes automatic hardcoded OTA updates and overbroad identifier sharing that need review before deployment.
Review before installing or deploying. Disable or replace the default OTA endpoint, require signed update manifests and hash verification before any update or reboot, minimize identifiers sent to update services, and confirm the customer explicitly needs IMEI, ICCID, or IMSI in telemetry.
assets/template/main.py:325Remote OTA Packages Are Installed Without Cryptographic Authenticity Verification
assets/template/main.py:382IMEI, IMSI, and Sensor Telemetry Are Disclosed to a Hardcoded OTA Service
assets/template/modbus.py:102Modbus RTU Responses Are Accepted Without CRC and Responder Validation
The declared description focuses on AX100 gas detector data acquisition over Modbus RTU and HTTP reporting in QuecPython. The actual code chunk does none of that: it is a standalone hardware utility for controlling an LED through a GPIO pin. This is not a supporting implementation detail for the declared behavior as presented, because the code contains only LED control logic and no telemetry, protocol, controller, or networking functionality related to the stated purpose.
The supplied code is a generic Modbus RTU transport/helper module, not a full skill for collecting AX100 gas controller data and uploading it over HTTP. While Modbus RTU communication is consistent with part of the description, the primary declared purpose emphasizes end-to-end data acquisition and HTTP reporting for AX100 devices. Those key behaviors are not present in this chunk. Additionally, the code exposes write-multiple-registers functionality, which goes beyond the declared read-and-report framing. This is therefore a description-behavior mismatch.
The skill content is presented entirely in Chinese and the title/use instructions assume Chinese-language operation, but there is no indication that the user may choose another language. This creates a locale/language policy concern because the skill effectively imposes a specific language without documenting opt-in or a justified regional constraint.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
用户:上报地址改成 https://api.xxx.com/gas/upload,每5分钟上报一次
→ 只修改 config.py:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
用户:上报地址改成 https://api.xxx.com/gas/upload,每5分钟上报一次
→ 只修改 config.py:
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
1. 工具:使用 QPYcom(移远官方 PC 工具)连接模组
2. 上传路径:所有 `.py` 文件 → 模组 `/usr/` 目录
3. 自动运行:在 QPYcom「文件」标签页中,将 `main.py` 设为 `auto run`
4. 日志查看:通过 QPYcom 串口终端查看 `print` 输出,定位问题
---
The skill’s stated purpose is Modbus-to-HTTP gas reporting, but the code also imports and uses OTA update functionality that can download files and trigger an immediate reboot. In an industrial gas-monitoring context, hidden remote update capability materially expands the trust boundary and creates a path for remote code modification or device disruption if the OTA channel or server is compromised.
The network setup collects and later uses highly sensitive device and subscriber identifiers including IMEI, IMSI, and ICCID. Transmitting such identifiers without clear minimization or disclosure increases privacy and tracking risk, and if intercepted or mishandled can expose fleet inventory and subscriber metadata.
The OTA path downloads files from a server-controlled list and immediately sets an update flag and reboots, with no operator confirmation, maintenance window, integrity check shown in this file, or safety interlock. In a gas-detection system, an unexpected reboot or malicious update could interrupt monitoring or replace trusted logic at a critical moment.
The code sends telemetry and the full last reporting payload to a separate OTA endpoint, even though the skill description only mentions reporting to a customer HTTP platform. This creates undisclosed data exfiltration of operational data and device identifiers to an additional service, which is especially sensitive for industrial safety deployments.
The file’s human-facing comments, docstrings, and usage descriptions are entirely in Chinese, which imposes a specific language on maintainers or users reading this skill. Under the stated policy, language constraints should either be optional or clearly justified as region-specific; no such opt-in or justification appears here.
This method writes IMEI and IMSI values, which are sensitive device/network identifiers, to the controller via Modbus registers. Although there is a post-action log message, there is no prior user disclosure, confirmation, or warning in this file that sensitive identifiers will be transmitted to external hardware.
The guide explicitly documents building and transmitting identifiers such as ICCID and full IMEI to a customer HTTP platform, but provides no privacy, minimization, consent, or protection guidance. These identifiers can enable device tracking, inventory correlation, and exposure of telecom subscriber metadata if the platform, transport, or logs are compromised.
This file contains natural-language comments exclusively in Chinese, such as the header and section descriptions, with no indication that the skill is intended only for Chinese-speaking users or maintainers. Under the policy, forcing a specific language without user opt-in or documented justification is a natural-language locale violation.
The file’s human-readable comments, docstrings, and operational messages are written entirely in Chinese, which imposes a specific language on maintainers or operators without any opt-in or alternative. This can violate language/locale policy where tools are expected to offer choice or document locale constraints.