Safeguard
Vulnerability Analysis•

CVE-2023-47890: High Arbitrary Folder Write in pyLoad 0.5.0

CVE-2023-47890 is a high flaw in pyLoad 0.5.0 that lets a signed in user write files to any folder and reach code execution. Use 0.5.0b3.dev75 or later.

Safeguard Security Team
4 min read

CVE-2023-47890 is a high severity flaw in pyLoad 0.5.0. A signed in web interface user can store downloaded files in any folder on the server and, by abusing scripts, reach command execution. The GitHub advisory lists 0.5.0b3.dev75 as the patched version. Upgrade, and limit who can sign in.

What's affected

The affected version is pyLoad 0.5.0, according to both the NVD record and the GitHub advisory GHSA-h73m-pcfw-25h2, which was published on 21 November 2023 by the pyLoad project. The advisory lists the patched version as 0.5.0b3.dev75. The record's one-line description calls it an unrestricted file upload, while the advisory title is "Download to arbitrary folder can lead to RCE", so the same bug is named two ways.

There is a severity difference to note. The record scores it 8.8 (High) with the vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. The GitHub advisory rates it High at 7.6 with an adjacent attack vector, high complexity, high privileges required and a changed scope. Both are High, but the numbers and assumptions differ, so use the advisory's reasoning if you need to judge how reachable your own instance is.

The record lists the weakness as CWE-22 (Path Traversal). The advisory explains that package names are filtered to stay inside the downloads folder, but the folder field on the edit screen is not filtered the same way. The record does not flag the CVE as exploited in the wild.

How to check if you're exposed

pyLoad is usually installed from PyPI under the name pyload-ng, or run from a container image. Check the installed version.

pip show pyload-ng
pip list 2>/dev/null | grep -i pyload

For a container, read the image tag and the version printed in the web interface footer or the startup log. Anything reported as 0.5.0 without the later build in the advisory should be treated as affected.

Next, check who can sign in. The attack needs a web interface account, so a pyLoad instance that is open to the internet, or one with shared logins, has the largest exposure. Also look at the configured scripts folders and the permissions on them.

What to do now

  1. Upgrade pyLoad to 0.5.0b3.dev75 or later, as the advisory states.
  2. Do not expose the web interface to the internet. Put it behind a VPN or an authenticating proxy.
  3. Review the accounts that can sign in and remove ones you no longer need.
  4. Run pyLoad as an unprivileged user in a container with a narrow set of writable folders, so a bad folder choice cannot reach scripts or system files.
  5. Inspect the scripts folders for files you did not place there.

Why it matters

The design problem is that two code paths treat the same value differently. When a package is created, its folder name is cleaned so it cannot climb out of the downloads directory. When the package is edited, the folder field arrives in a form post and is used as given. An attacker with an account only needs the second path.

The danger comes from pairing a file write with a feature that executes files. pyLoad runs scripts from certain folders on events, so a downloaded file placed in one of them becomes code. Any application with an "add a file, then run things from a folder" design has this shape. The fix is to normalise and check the destination on every path. See the Safeguard Gold page for this CVE for the record, and reachability analysis can help you tell whether a library flaw sits on a code path you actually use.

Try it yourself

Click through it at your own pace, or open it full screen.

Quick check

Which pyLoad version fixes CVE-2023-47890?

The GitHub advisory lists 0.5.0b3.dev75 as the patched version for the affected 0.5.0 release.

Does the attacker need an account?

Yes. Both the record vector and the advisory require a signed in user with low or high privileges, depending on the scoring.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

We email you a link to confirm, and only then add you to the list. Unsubscribe in one click. Privacy

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.