Tainted flow: 'req' from os.getenv (line 525, credential/environment) → urllib.request.urlopen (network output)
Critical
- Category
- Data Flow
- Content
headers={"Content-Type": "application/json", **{key: value for key, value in headers.items() if value}}, method="POST", ) opener = request.urlopen(req) if not self._settings.timeout else request.urlopen(req, timeout=self._settings.timeout) with opener as response: response_payload = json.loads(response.read().decode("utf-8")) choices = response_payload.get("choices") or []- Confidence
- 98% confidence
- Finding
- The LLM HTTP request uses caller-controlled configuration (`base`, `appkey`, `model`, and prompt content built from medical record documents) and sends case evidence to a remote endpoint with `urlopen`. In this skill context, that means sensitive patient record content can be exfiltrated to arbitrary external infrastructure, especially because `base` is accepted from input and no allowlist, consent gate, or redaction is enforced.
