T09 · Insecure Skill Coding Practices
Warning
- Location
- skill.md:22
- Finding
- Persistent Plaintext Storage of Sensitive Personal Data<![CDATA[ ## Vulnerability Details **File Location**: `skill.md:22-44` **Vulnerability Type**: Sensitive data stored in plaintext without access-control, consent, or retention safeguards **Risk Level**: Medium ### Vulnerable Code ```markdown All person data lives in your memory file. Load it before any operation: ``` ~/.openclaw/workspace/memory/grupo-venus.json ``` Structure (we use Luis Alberto Spinetta as the example throughout this skill — because he's from another planet): ```json { "people": { "spinetta": { "name": "Luis Alberto Spinetta", "birthdate": "1/23/1950 4:35:00 PM", "city": "Buenos Aires", "country": "Argentina", "sex": "H", "tz_offset": "3", "lat_dms": "34S35", "lon_dms": "58W22", "lat_decimal": -34.5833, "lon_decimal": 58.3667, "style": "deep" } } } ``` ``` The persistence requirement is reinforced at `skill.md:604-611`: ```markdown After the user provides their birth data, register them (see Adding a Person), save to memory. Before generating any reading, **ask for their preferred style** if it's not already set: > "How would you like me to read your chart? > - **Casual** — like a friend who knows astrology, no technical jargon > - **Deep** — full aspects, houses, and timing > - **Practical** — straight to the point: what to do and when" Save the chosen style to their record in memory, then immediately: ``` ### Technical Analysis The skill directs the agent to persist names, exact birth dates and times, sex, birth locations, coordinates, and preferences in a plaintext JSON file. In combination, these fields constitute sensitive and potentially identifying personal information. No instructions require restrictive file permissions, encryption, data minimization, explicit consent for cross-session retention, expiration, deletion, or isolation from other skills. The instruction to load the file before every operation may also expose records unrelated to the c ...[truncated 1494 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Ask for explicit consent before storing any profile across sessions and clearly identify the fields being retained. 2. Default to session-only processing unless the user affirmatively requests persistent storage. 3. Create the storage directory and file with restrictive permissions, such as directory mode `0700` and file mode `0600`. 4. Store only fields necessary for requested functionality; avoid retaining sex, exact coordinates, or full birth details when they are not needed. 5. Load only the requested profile rather than exposing the complete people database to every operation. 6. Provide commands to list, export, update, and permanently delete stored profiles. 7. Define a retention period and automatically remove stale records. 8. Where supported, encrypt sensitive records using credentials managed outside the project and outside the plaintext workspace. 9. Explain that profile data is also transmitted to `grupovenus.com` and obtain consent before that transmission. ]]>
