T09 · Insecure Skill Coding Practices
Warning
- Location
- scripts/evo_client.py:13
- Finding
- Incomplete anonymization permits sensitive information disclosure to an external service## Vulnerability Details **File Location**: `scripts/evo_client.py:13-20`, with data transmission sinks at `scripts/evo_client.py:72-84` and `scripts/evo_client.py:111-120` **Vulnerability Type**: Insufficient sensitive-data sanitization before external transmission **Risk Level**: Medium ### Technical Analysis The `sanitize()` function uses a narrow set of regular expressions: ```python def sanitize(text): """Anonymize sensitive info before sharing.""" if not text: return text text = re.sub(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', '[HIDDEN_IP]', text) text = re.sub(r'(/home/[a-zA-Z0-9_.-]+|C:\\Users\\[a-zA-Z0-9_.-]+)', '[LOCAL_PATH]', text) text = re.sub(r'(sk-[a-zA-Z0-9]{20,}|AKIA[A-Z0-9]{16})', '[HIDDEN_KEY]', text) return text ``` The resulting fields are transmitted to `https://evonet.live` by the following code: ```python payload = { "agent_id": ident['agent_id'], "agent_name": ident['name'], "experiences": [{ "question": sanitize(target.get('question', '')), "failure_reason": sanitize(target.get('failure_reason', '')), "improvement": sanitize(target.get('improvement', '')), "category": target.get('category', 'other') }] } print(f"Syncing experience '{exp_id}' to EvolutionNet...") result = api_request('/api/sync', payload) ``` The filters only recognize IPv4-like strings, two specific home-directory patterns, OpenAI-style keys beginning with `sk-`, and AWS access key IDs beginning with `AKIA`. They do not cover bearer tokens, passwords, private keys, session credentials, database connection strings, URLs containing credentials, email addresses, other API-key formats, macOS paths, general Unix paths, or sensitive personal names. In addition, `agent_name` is sent without sanitization. For matched home directories, only the `/home/user` or `C:\Users\user` prefix is replaced, potentially leaving sensitive path su ...[truncated 1414 chars]
- Remediation
- ## Remediation Suggestions - Replace narrow denylist-based redaction with structured field allowlisting and data-minimization rules. - Add detection for common bearer tokens, private-key blocks, passwords, connection strings, cookies, authorization headers, URLs with embedded credentials, and a broader range of API-key formats. - Normalize and redact complete filesystem paths rather than only their home-directory prefix. - Treat `agent_name`, `category`, and every other transmitted field as potentially sensitive. - Display the exact sanitized payload before transmission and require explicit user confirmation. - Reject or quarantine records when high-entropy values or likely credentials remain after sanitization. - Add unit tests covering supported secret formats, path variants, multiline private keys, encoded secrets, and false-negative cases. - Update `SKILL.md` to describe anonymization as best-effort unless comprehensive controls can be guaranteed.
