Tainted flow: 'req' from os.environ.get (line 69, credential/environment) → urllib.request.urlopen (network output)
Critical
- Category
- Data Flow
- Content
) try: with urllib.request.urlopen(req, timeout=timeout) as resp: data = json.loads(resp.read()) except urllib.error.HTTPError as e: err_body = e.read().decode("utf-8", errors="replace")[:500]- Confidence
- 94% confidence
- Finding
- The request target is derived from a configurable base URL that can come from the environment, and the code sends both the full prompt and bearer token to that endpoint without validating or allowlisting the destination. If an attacker can influence OFOX_BASE_URL or the base_url parameter, they can redirect requests to an arbitrary server and exfiltrate prompts and API credentials, which is especially sensitive in a content-generation skill that may handle proprietary brand assets and internal strategy.
