Tainted flow: 'req' from os.getenv (line 178, credential/environment) → urllib.request.urlopen (network output)
Critical
- Category
- Data Flow
- Content
req = urllib.request.Request(url=url, method=op["method"], headers=req_headers, data=data) try: with urllib.request.urlopen(req, timeout=timeout) as resp: raw = resp.read().decode("utf-8") try: payload = json.loads(raw) if raw else None- Confidence
- 92% confidence
- Finding
- The request destination and authentication material are influenced by environment variables, especially SCRUMBALL_BASE_URL and SCRUMBALL_API_KEY, and are then sent directly via urllib.request.urlopen. This enables exfiltration of API credentials and request metadata to an attacker-controlled endpoint if the environment or .env source is manipulated, which is more concerning because the skill also auto-loads configuration and attaches a persistent install identifier.
