T09 · Insecure Skill Coding Practices
- Location
jmcai_skill.py:632- Finding
Workflow assets may be uploaded to remote bridges over unencrypted HTTP
- Content
View full analysis
str: if path.startswith("http://") or path.startswith("https://"): return path return f"{str(config['bridge_url']).rstrip('/')}{path}" ``` The example configuration uses HTTP: ```json { "bridge_url": "http://localhost:32100" } ``` ### Technical Analysis The remote-bridge feature reads caller-selected workflow assets and serializes their complete contents using Base64 before sending them to `POST /api/v1/uploads`. Base64 is an encoding and provides no encryption, integrity protection, or authentication. Using HTTP is reasonable for a strictly loopback-only bridge, but the Skill explicitly supports configuring `bridge_url` to point to another machine on the LAN. The implementation does not distinguish between loopback HTTP and remote HTTP and does not reject or warn about an unencrypted remote endpoint. Consequently, images, masks, audio, video, text, CSV, PDF, and subtitle files may be transmitted in cleartext. Asset upload is necessary for the declared remote workflow functionality and is not evidence of a covert exfiltration mechanism. Uploads are restricted to absolute paths explicitly supplied as bridge-declared asset fields, and extension allowlists reduce arbitrary-file access. Nevertheless, allowing those assets to cross a non-loopba ...[truncated 1390 chars]- Remediation
View remediation
