T09 · Insecure Skill Coding Practices
Error
- Location
- SKILL.md:268
- Finding
- Redis Troubleshooting Command Exposes Persistent Legal Data Without Authentication<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:268-273` **Vulnerability Type**: Unauthenticated network service and insecure sensitive-data storage configuration **Risk Level**: High ### Vulnerable Code ```markdown ### "Redis connection refused" Check `REDIS_URL` in `.env`. For local development, run: ```bash docker run -d -p 6379:6379 redis:alpine ``` ``` The Redis instance is used to retain sensitive information elsewhere in the same file: ```markdown Every SAFE generated and contract reviewed is stored in the Redis memory plugin with the deal name as the key. ``` ### Technical Analysis The recommended Docker command publishes container port 6379 on every host network interface because no loopback address is specified. It also supplies no Redis ACL, password, TLS configuration, or network restriction. This is particularly sensitive because the Skill stores SAFE documents, contract reviews, due-diligence reports, and cross-session deal history in Redis. These records can contain investment terms, company details, contract contents, personal information, and confidential legal analysis. Redis protected-mode behavior can vary depending on image version and runtime configuration and must not be treated as an access-control boundary. Publishing an unauthenticated database port creates an unsafe configuration that may become directly exploitable through image changes, configuration changes, reverse proxies, container networking, or local-network access. ### Attack Path 1. A user encounters the documented Redis connection error. 2. The user copies and executes: ```bash docker run -d -p 6379:6379 redis:alpine ``` 3. Docker publishes Redis through host port 6379 on all interfaces. 4. The Skill stores contracts, SAFE terms, and deal history in the database. 5. An attacker with network access to the host connects to port 6379 if runtime protections permit unauthenticated access. 6. The attacker enumerates keys and reads, modifies, ...[truncated 839 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Bind development Redis only to the loopback interface: ```bash docker run -d \ -p 127.0.0.1:6379:6379 \ --name founder-legal-redis \ redis:alpine ``` 2. Configure Redis ACL authentication using a secret supplied outside command history and source control. 3. Do not expose Redis directly to public or shared networks. For remote deployments, place it in a private network protected by firewall or security-group rules. 4. Require TLS for traffic crossing a host or network boundary. 5. Encrypt especially sensitive legal records at the application layer before persistence. 6. Make persistence opt-in and disclose which records are retained, for how long, and for what purpose. 7. Provide commands for deleting individual deals and all retained Skill data. 8. Apply least-privilege Redis ACLs so the Skill cannot execute unnecessary administrative commands such as `FLUSHALL`, configuration changes, or module loading. 9. Pin the Redis image to a reviewed version or immutable digest and document the expected protected-mode and ACL configuration. ]]>
