T09 · Insecure Skill Coding Practices
- Location
config.json:1- Finding
Plaintext PETKIT Account Credentials Included in the Project
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill’s monitoring purpose is coherent, but it ships a live-looking PETKIT account password and handles user passwords in unsafe plaintext ways.
Review this skill before installing. Do not use it with the bundled config.json; rotate that PETKIT password if it is real, remove the bundled credentials, and prefer a secure credential store or interactive password prompt instead of command-line passwords and plaintext config files.
config.json:1Plaintext PETKIT Account Credentials Included in the Project
petkit_monitor.py:172Password Exposed Through Command-Line Arguments and Insecure Plaintext Storage
petkit_monitor.py:10Unpinned Third-Party Dependency Installation Guidance
The skill requires sensitive credentials and the analyzer detected file_write capability, yet the manifest does not declare any tool scope or permissions boundary. That mismatch is dangerous because it hides the skill's effective capabilities from reviewers and users, increasing the risk that credentials, tokens, or device data could be written to local files without explicit authorization or review.
The manifest description and all user-facing instructions are written only in Chinese, with no indication that other languages are supported or that Chinese is a required locale. Under the policy provided, forcing a specific language without user opt-in is a natural-language policy violation.
The manifest describes a monitoring skill for retrieving feeder, litter box, fountain, and purifier status. In addition to status retrieval, the code writes user credentials to a local config file and exposes a --configure flow to store them, which is behavior beyond pure monitoring.
The code creates a client with username and password and then logs in to the PetKit service, which necessarily sends sensitive credentials over the network. There is no visible warning, prompt, or explanatory comment telling the user that their account data will be transmitted to an external service.
The skill stores the PetKit username and password in plaintext in a local config.json file without warning, encryption, or restricted handling. If the local filesystem is accessed by another user, process, backup system, or malware, the account credentials can be recovered and reused against the user's PetKit account.
User-facing strings, help text, and output formatting are all hard-coded in Chinese, which imposes a specific language on users. The file does not offer any language selection, opt-in, or documented justification for a Chinese-only experience.
The stated purpose is to get device status, but the script changes petkitaio.constants.FEEDER_LIST at import time to alter library behavior. This is not just fetching status; it extends runtime support by patching upstream constants, which goes beyond the narrow monitoring description.