T09 · Insecure Skill Coding Practices
- Location
README.md:91- Finding
Unencrypted Backups May Expose Wallet, Memory, Configuration, and Repository Secrets
- Content
View full analysis
Vulnerability Details
File Location:
README.md:91-101,README.md:164-170,SKILL.md:30-35, andSKILL.md:91-99
Vulnerability Type: Plaintext storage of sensitive information
Risk Level: HighVulnerable Documentation Excerpts
The following is an English rendering of the documented backup scope in
README.md:91-101:text Quick backup includes: - All installed Skills - Workspace configuration, excluding node_modules - openclaw.json - FluxA Wallet configuration, if present - Memory files, including MEMORY.md and daily files Full backup additionally includes: - node_modules - The .git directory - All build artifactsThe storage recommendation in
README.md:164-170states:text It is recommended to synchronize backup files to external storage or a cloud drive.The corresponding full-backup behavior in
SKILL.md:30-35is:text Full backup: - Includes node_modules - Includes all project files - Includes the .git directory - Intended for migration to a new device - Automatically removes old backups, retaining the latest threeThe documented backup output in
SKILL.md:91-99includes:text Back up OpenClaw configuration: - openclaw.json Back up FluxA Wallet: - FluxA configurationTechnical Analysis
The documented backup process archives several classes of potentially sensitive data:
openclaw.jsonmay contain API tokens, service credentials, operational configuration, or private endpoints.- FluxA Wallet configuration may contain wallet credentials, recovery information, private keys, or other data that can facilitate access to cryptocurrency assets.
MEMORY.mdand daily memory files may contain private user information, conversation-derived data, operational instructions, or retained secrets.- The
.gitdirectory preserves complete repository history, including deleted files and secrets that are no longer ...[truncated 2886 chars]
- Remediation
View remediation
Remediation Suggestions
-
Exclude sensitive resources by default
- Do not include wallet configuration, private keys, seed phrases, credentials, tokens, memory files, or
.githistory in the default backup profile. - Require explicit, per-category user consent before including sensitive resources.
- Do not include wallet configuration, private keys, seed phrases, credentials, tokens, memory files, or
-
Encrypt every sensitive backup
- Use authenticated encryption, such as AES-256-GCM, rather than relying on ordinary ZIP packaging.
- Obtain the encryption secret interactively or through a dedicated secure secret store.
- Never embed encryption keys in the archive, scripts, configuration files, command history, or manifest.
- Document secure key storage and recovery requirements.
-
Apply strict access controls
- Create archives and temporary directories with permissions limited to the invoking user.
- Validate that the destination is not globally readable before writing.
- Refuse insecure destinations or require explicit confirmation with a clear warning.
-
Protect temporary data
- Avoid writing unencrypted intermediate copies where possible.
- Create temporary directories using secure platform APIs.
- Remove temporary data reliably after success or failure.
- Document that deletion may not securely erase data from all storage media.
-
Add secret detection and redaction
- Scan configuration, project files, and Git history for API keys, credentials, wallet secrets, and private keys before archiving.
- Abort or request explicit confirmation when high-risk secrets are detected.
- Provide configurable exclusion patterns for sensitive files.
-
Harden cloud-storage guidance
- Do not recommend cloud synchronization unless the archive is encrypted before upload.
- Warn users that cloud-provider account compromise can expose retained backups.
- Recommend multifactor authentication, limited sharing, retention controls, and client-side e ...[truncated 363 chars]
-
