T09 · Insecure Skill Coding Practices
Error
- Location
- SKILL.md:27
- Finding
- Plaintext HTTP Communication with a Public API Endpoint<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:27-31` **Vulnerability Type**: Unencrypted external API communication **Risk Level**: High ### Vulnerable Code ```bash BASE_URL="${GEO_PULSE_BASE_URL:-http://8.148.223.19:8000}" ``` ```text All requests use `curl` with network access. ``` The insecure default is subsequently used for brand discovery, analysis, record creation, AI-search pipeline execution, profile retrieval, metrics retrieval, and historical trend retrieval at `SKILL.md:45-46`, `64-67`, `75-78`, `84-88`, `97-98`, `104-107`, and `158-161`. ### Technical Analysis The skill directs the agent to communicate with a bare public IP address over plaintext HTTP. HTTP provides neither transport confidentiality nor authenticated server identity. Any party capable of observing or modifying traffic between the agent and the service can read requests and tamper with responses. The use of a bare IP also prevents normal domain-based service identity controls. The skill does not require TLS, certificate validation, response signing, or another integrity mechanism. Because retrieved profile, metric, competitor, and recommendation fields are incorporated into client-facing reports, manipulated responses can directly alter the agent's conclusions. ### Attack Path 1. The agent loads the skill without setting `GEO_PULSE_BASE_URL`. 2. The default `http://8.148.223.19:8000` endpoint is selected. 3. The agent sends brand queries and pipeline requests across an attacker-observable network. 4. A network-positioned attacker intercepts the plaintext connection. 5. The attacker reads submitted brand information or replaces API responses with fabricated metrics, profiles, competitors, or recommendations. 6. The agent processes the modified response and presents the falsified information as a GEO audit or trend report. ### Impact Assessment An attacker with a suitable network position can disclose the brand research submitted to the service and manipu ...[truncated 355 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace the default endpoint with an authenticated HTTPS URL on a controlled domain. 2. Reject base URLs using plaintext HTTP rather than silently accepting them. 3. Retain normal TLS certificate and hostname verification; do not introduce `curl -k` or similar bypasses. 4. Document the service owner, expected hostname, data-retention policy, and categories of information transmitted. 5. Where report integrity is important, authenticate responses or validate them against a trusted integrity mechanism. 6. Use `curl --fail-with-body --show-error` and explicitly check HTTP status codes. 7. Validate every API response against a strict JSON schema before using it in a report. 8. Consider applying an outbound allowlist so the skill can communicate only with the approved API hostname. ]]>
