CVE-2026-35187·Python vulnerability
pyLoad is a free and open-source download manager written in Python. In 0.5.0b3.dev96 and earlier, the parse_urls API function in src/pyload/core/api/__init__.py fetches arbitrary URLs server-side via get_url(url) (pycurl) without any URL validation, protocol restriction, or IP blacklist. An authenticated user with ADD permission can make HTTP/HTTPS requests to internal network resources and cloud metadata endpoints, read local files via file:// protocol (pycurl reads the file server-side), interact with internal services via gopher:// and dict:// protocols, and enumerate file existence via error-based oracle (error 37 vs empty response).
- Severity
- high
- Software
- Python
- Fixed in
- 0.5.0b3.dev97
- Published
- 2026-04-06
Affected versions
Until: 0.5.0b3.dev97
Fixed in: 0.5.0b3.dev97
How to fix this CVE
Update pyLoad to version 0.5.0b3.dev97 or later to address a server-side request forgery (SSRF) vulnerability in the parse_urls API function. This vulnerability allows authenticated users with ADD permission to make unauthorized requests to internal network resources, cloud metadata endpoints, and local files. Ensure your deployment uses the patched version and restrict API access to trusted users only.
sudo dnf upgrade python3-pyloadDefensia detects this vulnerability
What an exploitation attempt looks like
Sample log line indicative of exploitation attempts:
POST /api/parse_urls HTTP/1.1.*?(file://|gopher://|dict://|169\.254\.169\.254|127\.0\.0\.1|192\.168|10\.0|localhost)WAF mitigation (if patching is not yet possible)
Add this rule to your WAF to block exploitation attempts while you schedule the patch.
Implement WAF rules to block requests to the /api/parse_urls endpoint containing file://, gopher://, dict://, or metadata service IP addresses (169.254.169.254) in the URL parameter; restrict this endpoint to specific IP ranges and implement rate limiting on API authentication attempts.How to check if you are affected
- Check installed pyLoad version: pip show pyload | grep Version
- Verify if the parse_urls API endpoint is exposed: grep -r 'parse_urls' /path/to/pyload/src/pyload/core/api/ to confirm the vulnerable function exists
- Search application logs for suspicious parse_urls requests: grep -i 'parse_urls' /var/log/pyload/*.log | grep -E '(file://|gopher://|dict://|169.254.169.254|localhost|127.0.0.1|192.168|10.0)'
- Confirm patch application: pip show pyload | grep Version and verify it shows 0.5.0b3.dev97 or higher
FAQ
What is CVE-2026-35187?
CVE-2026-35187 is a server-side request forgery (SSRF) vulnerability in pyLoad's parse_urls API function that fails to validate or restrict URLs, allowing authenticated users to request arbitrary internal resources, cloud metadata, local files, and interact with internal network services.
Is CVE-2026-35187 being actively exploited?
No, CVE-2026-35187 is not currently listed on the CISA Known Exploited Vulnerabilities (KEV) catalog and no public exploits have been released, though the vulnerability requires valid authentication to trigger.
What versions of Python are affected by CVE-2026-35187?
This vulnerability affects pyLoad versions up to and including 0.5.0b3.dev96. The vulnerability is patched in pyLoad 0.5.0b3.dev97 and later releases.
How do I check if my server is vulnerable to CVE-2026-35187?
Run 'pip show pyload | grep Version' and compare the version against 0.5.0b3.dev96; if your version is equal to or earlier than this version, your installation is vulnerable.
Does Defensia detect CVE-2026-35187?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If pyLoad is installed on a monitored server, CVE-2026-35187 will appear in your dashboard with remediation steps.
Related Python CVEs
References
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2026-35187. Free for 1 server.
Get started free