VYPR
Critical severityNVD Advisory· Published Aug 5, 2025· Updated Aug 5, 2025

pyLoad CNL Blueprint is vulnerable to Path Traversal through `dlc_path` leading to Remote Code Execution (RCE)

CVE-2025-54802

Description

pyLoad is the free and open-source Download Manager written in pure Python. In versions 0.5.0b3.dev89 and below, there is an opportunity for path traversal in pyLoad-ng CNL Blueprint via package parameter, allowing Arbitrary File Write which leads to Remote Code Execution (RCE). The addcrypted endpoint in pyload-ng suffers from an unsafe path construction vulnerability, allowing unauthenticated attackers to write arbitrary files outside the designated storage directory. This can be abused to overwrite critical system files, including cron jobs and systemd services, leading to privilege escalation and remote code execution as root. This issue is fixed in version 0.5.0b3.dev90.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
pyload-ngPyPI
< 0.5.0b3.dev900.5.0b3.dev90

Affected products

1

Patches

1
70a44fe02c03

Fix uncontrolled data used in path expression (#4596)

https://github.com/pyload/pyloadpTrAug 1, 2025via ghsa
1 file changed · +6 3
  • src/pyload/webui/app/blueprints/cnl_blueprint.py+6 3 modified
    @@ -86,9 +86,12 @@ def addcrypted():
             "package", flask.request.form.get("source", flask.request.form.get("referer"))
         )
         dl_path = api.get_config_value("general", "storage_folder")
    -    dlc_path = os.path.join(
    -        dl_path, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc"
    -    )
    +    dlc_filename = package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc"
    +    dlc_path = os.path.join(dl_path, dlc_filename)
    +    dlc_path = os.path.normpath(dlc_path)
    +    # Ensure dlc_path is within dl_path
    +    if not os.path.abspath(dlc_path).startswith(os.path.abspath(dl_path) + os.sep):
    +        return "failed: invalid package name\r\n", 400
         dlc = flask.request.form["crypted"].replace(" ", "+")
         with open(dlc_path, mode="wb") as fp:
             fp.write(dlc)
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.