id: PYSEC-2026-1818 published: "2026-07-07T11:45:29.653767Z" modified: "2026-07-07T17:25:10.928Z" aliases: - CVE-2024-21645 - GHSA-ghmw-rwh8-6qmr summary: pyload Log Injection vulnerability details: "### Summary\nA log injection vulnerability was identified in `pyload`. This vulnerability allows any unauthenticated actor to inject arbitrary messages into the logs gathered by `pyload`.\n\n### Details\n`pyload` will generate a log entry when attempting to sign in with faulty credentials. This entry will be in the form of `Login failed for user 'USERNAME'`. However, when supplied with a username containing a newline, this newline is not properly escaped. Newlines are also the delimiter between log entries. This allows the attacker to inject new log entries into the log file.\n\n### PoC\nRun `pyload` in the default configuration by running the following command\n```\npyload\n```\n\nWe can now sign in as the pyload user and view the logs at `http://localhost:8000/logs`.\n![Viewing the logs](https://user-images.githubusercontent.com/44903767/294433796-f2c96e39-8000-4649-99bb-9c50e786243d.png)\n\nAny unauthenticated attacker can now make the following request to inject arbitrary logs.\n\n```\ncurl 'http://localhost:8000/login?next=http://localhost:8000/' -X POST -H 'Content-Type: application/x-www-form-urlencoded' --data-raw $'do=login&username=wrong\\'%0a[2024-01-05 02:49:19] HACKER PinkDraconian THIS ENTRY HAS BEEN INJECTED&password=wrong&submit=Login'\n```\n\nIf we now were to look at the logs again, we see that the entry has successfully been injected.\n![PoC2](https://user-images.githubusercontent.com/44903767/294434785-2fc6dce4-3e2c-4da0-8e80-a6bba882f756.png)\n\n### Impact\nForged or otherwise, corrupted log files can be used to cover an attacker’s tracks or even to implicate another party in the commission of a malicious act.\n" affected: - package: name: pyload-ng ecosystem: PyPI purl: pkg:pypi/pyload-ng ranges: - type: ECOSYSTEM events: - introduced: "0" - fixed: 0.5.0b3.dev77 versions: - 0.5.0a5.dev528 - 0.5.0a5.dev532 - 0.5.0a5.dev535 - 0.5.0a5.dev536 - 0.5.0a5.dev537 - 0.5.0a5.dev539 - 0.5.0a5.dev540 - 0.5.0a5.dev545 - 0.5.0a5.dev562 - 0.5.0a5.dev564 - 0.5.0a5.dev565 - 0.5.0a6.dev570 - 0.5.0a6.dev578 - 0.5.0a6.dev587 - 0.5.0a7.dev596 - 0.5.0a8.dev602 - 0.5.0a9.dev615 - 0.5.0a9.dev629 - 0.5.0a9.dev632 - 0.5.0a9.dev641 - 0.5.0a9.dev643 - 0.5.0a9.dev655 - 0.5.0a9.dev806 - 0.5.0b1.dev1 - 0.5.0b1.dev2 - 0.5.0b1.dev3 - 0.5.0b1.dev4 - 0.5.0b1.dev5 - 0.5.0b2.dev10 - 0.5.0b2.dev11 - 0.5.0b2.dev12 - 0.5.0b2.dev9 - 0.5.0b3.dev13 - 0.5.0b3.dev14 - 0.5.0b3.dev17 - 0.5.0b3.dev18 - 0.5.0b3.dev19 - 0.5.0b3.dev20 - 0.5.0b3.dev21 - 0.5.0b3.dev22 - 0.5.0b3.dev24 - 0.5.0b3.dev26 - 0.5.0b3.dev27 - 0.5.0b3.dev28 - 0.5.0b3.dev29 - 0.5.0b3.dev30 - 0.5.0b3.dev31 - 0.5.0b3.dev32 - 0.5.0b3.dev33 - 0.5.0b3.dev34 - 0.5.0b3.dev35 - 0.5.0b3.dev38 - 0.5.0b3.dev39 - 0.5.0b3.dev40 - 0.5.0b3.dev41 - 0.5.0b3.dev42 - 0.5.0b3.dev43 - 0.5.0b3.dev44 - 0.5.0b3.dev45 - 0.5.0b3.dev46 - 0.5.0b3.dev47 - 0.5.0b3.dev48 - 0.5.0b3.dev49 - 0.5.0b3.dev50 - 0.5.0b3.dev51 - 0.5.0b3.dev52 - 0.5.0b3.dev53 - 0.5.0b3.dev54 - 0.5.0b3.dev57 - 0.5.0b3.dev60 - 0.5.0b3.dev62 - 0.5.0b3.dev64 - 0.5.0b3.dev65 - 0.5.0b3.dev66 - 0.5.0b3.dev67 - 0.5.0b3.dev68 - 0.5.0b3.dev69 - 0.5.0b3.dev70 - 0.5.0b3.dev71 - 0.5.0b3.dev72 - 0.5.0b3.dev73 - 0.5.0b3.dev74 - 0.5.0b3.dev75 - 0.5.0b3.dev76 references: - type: WEB url: https://github.com/pyload/pyload/security/advisories/GHSA-ghmw-rwh8-6qmr - type: ADVISORY url: https://nvd.nist.gov/vuln/detail/CVE-2024-21645 - type: WEB url: https://github.com/pyload/pyload/commit/4159a1191ec4fe6d927e57a9c4bb8f54e16c381d - type: PACKAGE url: https://github.com/pyload/pyload - type: PACKAGE url: https://pypi.org/project/pyload-ng - type: ADVISORY url: https://github.com/advisories/GHSA-ghmw-rwh8-6qmr severity: - type: CVSS_V3 score: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N