T09 · Insecure Skill Coding Practices
- Location
scripts/runtime/openclaw_capture_skill/dispatcher.py:222- Finding
Complete capture payload may be transmitted over unencrypted HTTP
- Content
View full analysis
dict: request = urlrequest.Request( f"{self.settings.backend_url.rstrip('/')}/ingest", data=json.dumps(payload).encode("utf-8"), headers={"Content-Type": "application/json"}, method="POST", ) with urlrequest.urlopen(request, timeout=30) as resp: accepted = json.loads(resp.read().decode("utf-8")) ``` ### Technical Analysis HTTP backend mode serializes and transmits the complete normalized capture payload to `OPENCLAW_CAPTURE_BACKEND_URL`. Depending on the request, that payload can contain: - Pasted text in `raw_text` - Source URLs - Image references - Chat and reply identifiers - Request identifiers and platform metadata The default endpoint uses HTTP on a loopback address, which is generally acceptable for a strictly local service. However, the configuration accepts an arbitrary URL without validating its scheme or restricting plaintext HTTP to loopback destinations. Consequently, an operator error or hostile environment configuration can direct sensitive content to a non-loopback HTTP server. The backend URL is an explicitly documented configuration option, so remote dispatch itself is within the declared functionality. The security defect is the absence of transport and destination validation, not the existence of HTTP dispatch. ### Attack Path 1. An attacker ...[truncated 998 chars]- Remediation
View remediation
