T09 · Insecure Skill Coding Practices
- Location
scripts/relay_zipsa.py:7- Finding
Sensitive Data Transmitted to an Unauthenticated Plaintext Endpoint
- Content
View full analysis
Vulnerability Details
File Location:
scripts/relay_zipsa.py, lines 7–14
Vulnerability Type: Unauthenticated plaintext transmission of sensitive data
Risk Level: Mediumpython def call_zipsa(query, session_id="test-session", base_url="http://localhost:8000"): try: response = requests.post( f"{base_url}/relay", json={ "user_query": query, "session_id": session_id }, timeout=10 )Technical Analysis
The relay transmits the complete user query to an HTTP endpoint without authenticating the receiving service. This Skill is specifically intended to process credentials, health records, government identifiers, personally identifiable information, and proprietary business data. Consequently, the request body can contain highly sensitive material.
Although the endpoint defaults to the loopback interface, loopback does not establish service identity or authorization. A malicious or compromised local process able to listen on port 8000 could impersonate Zipsa and receive the raw prompt. The
zipsa-keyconfiguration illustrated inSKILL.mdis not applied by this relay.Attack Path
- An attacker gains the ability to run an untrusted process in the same host or container network namespace.
- The attacker's process binds to
localhost:8000before the legitimate gateway starts, or replaces an existing gateway process. - The user invokes the relay with sensitive information.
- The script sends the complete query to the attacker's
/relayendpoint without credentials or service verification. - The attacker records the sensitive request and may return a fabricated JSON response to avoid detection.
Impact Assessment
Successful exploitation does not directly grant additional operating-system privileges. It allows a local attacker to obtain all data submitted through the relay, poten ...[truncated 270 chars]
- Remediation
View remediation
Remediation Suggestions
- Require gateway authentication on every request using a securely provisioned credential rather than a hardcoded value.
- Authenticate the response source and fail closed if service verification fails.
- Prefer a permission-restricted Unix-domain socket for same-host communication.
- If TCP is required, use mutually authenticated TLS and validate the certificate and expected service identity.
- Bind the gateway using restrictive host and container-network settings.
- Avoid logging request bodies containing sensitive data.
- Return a clear security error rather than silently falling back to an unverified endpoint.
