T09 · Insecure Skill Coding Practices
- Location
SKILL.md:38- Finding
Plaintext Persistence of Cloud Instance Login Passwords
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:38-72
Vulnerability Type: Plaintext credential storage
Risk Level: HighThe Skill permits a cloud instance login password to be saved in the workspace-local
.claude/tccli-cvm-defaults.jsonfile.json { "imageId": "img-iws3975f", "imageName": "Debian 13.2 64-bit", "instanceType": "S5.MEDIUM2", "systemDisk": { "DiskType": "CLOUD_PREMIUM", "DiskSize": 30 }, "instanceChargeType": "SPOTPAID", "internetAccessible": { "PublicIpAssigned": true, "InternetChargeType": "TRAFFIC_POSTPAID_BY_HOUR", "InternetMaxBandwidthOut": 20 }, "loginSettings": { "Password": "YOUR_STRONG_PASSWORD_HERE" } }text When the user asks to save current parameters as defaults, create a default config file, set defaults, or "remember these settings": 1. Confirm the fields to save, usually `imageId`, `instanceType`, `systemDisk`, `instanceChargeType`, `internetAccessible`, and `loginSettings`. 2. If the configuration includes a password, explicitly tell the user that the password will be stored in plaintext in `.claude/tccli-cvm-defaults.json`, a local workspace file that should be ignored by Git. 3. Create `.claude/` under the workspace root if needed. 4. Write `.claude/tccli-cvm-defaults.json`. 5. Read it back and validate JSON format. 6. Tell the user the path, saved fields, and that future instance creation will reuse these defaults. Security guidance: - Prefer environment variables or runtime user input for passwords. - Do not commit `.claude/tccli-cvm-defaults.json`. - Delete the file to return to ask-every-time mode.Technical Analysis
The password is deliberately written to an unencrypted JSON file and reused for future instance creation. Warning the user and recommending Git exclusion do not adequately secure the credential. The file can remain accessible to other local users or processes, workspace synchr ...[truncated 1736 chars]
- Remediation
View remediation
Remediation Suggestions
- Remove
loginSettings.Passwordfrom the supported persistent-default fields. - Prefer SSH public-key authentication and disable password-based remote login where operationally possible.
- Obtain passwords only at runtime through a non-echoing prompt or an approved secrets manager.
- Store only a secret reference or identifier in the workspace configuration, never the secret value itself.
- If local secret storage is unavoidable, use an operating-system credential store or encrypted secrets file and enforce owner-only permissions.
- Add schema validation that rejects
loginSettings.Passwordwhen saving defaults. - Add
.claude/tccli-cvm-defaults.jsonto.gitignore, but treat this only as defense in depth rather than the primary control. - Document credential rotation and removal procedures for any passwords previously saved in this file.
- Remove
