Tainted flow: 'req' from os.environ.get (line 263, credential/environment) → urllib.request.urlopen (network output)
Critical
- Category
- Data Flow
- Content
"X-Title": "hawk-bridge", } ) with urllib.request.urlopen(req, timeout=30) as resp: result = json.loads(resp.read()) content = result["choices"][0]["message"]["content"] return parse_and_validate(content)- Confidence
- 90% confidence
- Finding
- This code transmits full conversation content, framed as long-term memory extraction, to OpenRouter over the network and uses an API key sourced from CLI/environment. In a memory-extraction component, that can expose sensitive personal data, preferences, decisions, and entities to a third party without any consent or policy enforcement in this file.
