Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid API key or login
-
ExploitCraft multipart POST to /api/rpc with multi-GB file
-
ExecutionServer reads entire file into memory via file.read()
-
ImpactMemory exhausted, OOM killer terminates pyLoad process
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
|
| Exploitation Conditions | Requires an authenticated session or a valid X-API-Key to reach the /api/rpc endpoint, and specifically targets RPC functions that accept multipart/form-data file uploads (e.g. check_online_status_container). The vulnerable code path exists in default configurations of pyLoad prior to 0.5.0b3.dev101, since no MAX_CONTENT_LENGTH was set. Exploitation is LIMITED by the authentication requirement (PR:L) and can be mitigated at the perimeter by a reverse-proxy body-size cap (e.g. Nginx client_max_body_size) even on unpatched versions; the fix enforces a 16MB server-side limit. |
| Impact | This is a moderate-severity availability-only flaw. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H, base 6.5) is internally consistent with the description: network-reachable, low attack complexity, no user interaction, and impact limited to availability (process termination via OOM) with no confidentiality or integrity loss. The PR:L metric is corroborated by the GHSA reproduction steps, which require a valid login session or API key - so this is an authenticated DoS, not an unauthenticated one. No EPSS score, SSVC decision, or CISA KEV status was supplied in the input, so exploitation probability and automatability cannot be quantified from the data; the absence of KEV/EPSS is a data gap, not evidence of low risk. A detailed, working proof-of-concept (curl command plus a 10GB truncate file) is published in the vendor's own GHSA advisory, so publicly available exploit code exists. Net: this is a real but bounded issue - trivially reproducible against any authenticated attacker, but it only crashes the service and requires the attacker to already hold valid credentials or an API key, which meaningfully narrows the threat population to insiders or compromised accounts rather than anonymous internet scanners. |
| Exploit ScenarioDerived | An attacker who has obtained a valid pyLoad login session or API key sends a multipart/form-data POST to /api/rpc referencing a file-accepting function (e.g. check_online_status_container) with a multi-gigabyte file attached. The server calls file.read() on the entire upload with no size cap, exhausting RAM until the kernel OOM-killer terminates the pyLoad process, interrupting all active downloads. A complete working PoC is published in the vendor GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 09, 2026
Denial of service in pyLoad (pyload-ng) prior to 0.5.0b3.dev101 allows an authenticated API user to crash the server by uploading an oversized file to the /api/rpc endpoint. The rpc handler in api_blueprint.py reads the entire multipart/form-data payload into memory with file.read() before any size check is applied, so a multi-gigabyte upload exhausts available RAM and the process is killed by the kernel OOM killer, interrupting all active downloads and tasks. Exploitation requires an authenticated session or a valid X-API-Key (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H, 6.5), and no public exploit was identified at time of analysis, though the upstream advisory documents full reproduction steps; the flaw is rated moderate severity because it affects availability only and can be contained at the reverse-proxy layer on unpatched hosts.
RemediationAI
Vendor-released patch: upgrade pyload-ng to 0.5.0b3.dev101 or later, which introduces MAX_CONTENT_LENGTH = 16 MB in src/pyload/webui/app/config.py and rejects oversized uploads before they are read into memory (see the advisory at https://github.com/pyload/pyload/security/advisories/GHSA-vq8p-m3wm-gv5f and the fix commit at https://github.com/pyload/pyload/commit/461cd66f30fa9e96453fb4d8c5c47467e452363c). If an immediate upgrade is not possible, the advisory's own recommended compensating control is to enforce a request body limit at the reverse proxy - for Nginx set client_max_body_size to a conservative value such as 16m - which blocks the oversized upload at the perimeter; the trade-off is that the same limit also rejects legitimately large container or file uploads through the API, so operators handling large DLC/container files must tune the value upward and accept a correspondingly larger memory exposure on the still-unpatched backend. Additionally, restrict reachability of /api/rpc by binding the web UI to localhost or a management network and by requiring strong, rotated API keys, since exploitation needs either a login session or a valid X-API-Key (CVSS PR:L). Monitor process RSS and kernel OOM-killer logs for pyload to detect attempted or accidental memory-exhaustion events until the patched release is deployed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
pyLoad is a Python download manager whose web interface is built on Flask blueprints. The vulnerable code path sits in src/pyload/webui/app/blueprints/api_blueprint.py around line 73, in the rpc function that dispatches API calls: when a request arrives as multipart/form-data (for example an API call such as check_online_status_container that accepts a container file), the handler performs an unconditional file.read() to pull the whole upload into process memory before handing it to the underlying function. Because the application was never configured with Flask's MAX_CONTENT_LENGTH, there is no upper bound on the buffered body, and the root-cause class is CWE-20 (Improper Input Validation) - the code fails to validate the size of untrusted input before allocating memory for it. The affected package is pip/pyload-ng before 0.5.0b3.dev101, mapping to CPE cpe:2.3:a:pyload:pyload:*:*:*:*:*:*:*:*; the fix commit 461cd66f30fa9e96453fb4d8c5c47467e452363c adds MAX_CONTENT_LENGTH = 16 * 1024 * 1024 (16 MB) to BaseConfig in src/pyload/webui/app/config.py, restoring a server-side ceiling on request bodies.
Know when Pyload gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Network endpoint reachable with trivial oversized upload (AV:N/AC:L), but a valid API key/login is required (PR:L); impact is availability-only process crash (C:N/I:N/A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
pyLoad is a free and open-source download manager written in Python. Prior to 0.5.0b3.dev101, the API rpc function in api_blueprint.py handles multipart/form-data uploads by reading the whole content of the uploaded file into memory with file.read(). This occurs before the data is sent to the underlying function. Since there is no size limit set at this point, a large file upload can exhaust the server's available memory which led to process termination. Version 0.5.0b3.dev101 contains a patch.
Blast Radius
ecosystem impact- 1 pypi packages depend on pyload-ng (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.5.0b3.dev101.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Malicious file upload attacks exploit insufficient validation when web applications accept user-provided files.
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Code Injection in GitHub repository pyload/pyload prior to 0.5.0b3.dev31. Rated critical severity (CVSS 9.8), this vulne
Excessive Attack Surface in GitHub repository pyload/pyload prior to 0.5.0b3.dev41. Rated critical severity (CVSS 9.8),
pyLoad 0.5.0 is vulnerable to Unrestricted File Upload. Rated high severity (CVSS 8.8), this vulnerability is remotely e
Improper Input Validation in GitHub repository pyload/pyload prior to 0.5.0b3.dev40. Rated high severity (CVSS 7.5), thi
Improper Certificate Validation in GitHub repository pyload/pyload prior to 0.5.0b3.dev44. Rated high severity (CVSS 7.4
pyload is an open-source Download Manager written in pure Python. Rated high severity (CVSS 7.2), this vulnerability is
Insufficient Session Expiration in GitHub repository pyload/pyload prior to 0.5.0b3.dev36. Rated medium severity (CVSS 6
An open redirection vulnerability exists in pyload/pyload version 0.5.0. Rated medium severity (CVSS 6.1), this vulnerab
pyLoad is an open-source Download Manager written in pure Python. Rated medium severity (CVSS 6.1), this vulnerability i
Cross-site Scripting (XSS) - Stored in GitHub repository pyload/pyload prior to 0.5.0b3.dev42. Rated medium severity (CV
EUVD-2026-95910
GHSA-vq8p-m3wm-gv5f
NVD
CVE.org
EPSS
Exploit-DB