CVE-2026-44226: Pyload ng PyLoad Vulnerable To Unauthenticated Traceback Vulnerability
MODERATECVE-2026-44226 is a MODERATE (CVSS 5.3) pyload vulnerable to unauthenticated traceback vulnerability (CWE-209: Generation of Error Message Containing Sensitive Information) affecting Pyload ng libraries in the PyPI ecosystem. The issue involves pyload vulnerable to unauthenticated traceback disclosure via global exception handler in webui. Remediation is available by upgrading affected packages to version 0.5.0b3.dev100.
CVE-2026-44226 at a Glance
Security Impact
CVSS: 5.3
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N).
How to Fix CVE-2026-44226
To remediate this vulnerability, upgrade all affected Pyload ng dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install pyload-ng>=0.5.0b3.dev100
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show pyload-ng
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-44226, inspect your installed packages using pip:
pip show pyload-ng
Analyze the terminal output to locate any version of Pyload ng in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.5.0b3.dev100), your application is affected.
Note: The pip show pyload-ng command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-209: Generation of Error Message Containing Sensitive Information, where the product generates an error message that includes sensitive information about its environment, users, or associated data. In Pyload ng, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-44226 Affected Pyload ng Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
pyload-ng
|
PyPI |
< 0.5.0b3.dev100
|
0.5.0b3.dev100
|
References
Frequently Asked Questions
What is CVE-2026-44226?
Which Pyload ng versions are affected?
What version fixes CVE-2026-44226?
Is pyload-ng affected?
What is the CVSS score of CVE-2026-44226?
What CWE is associated with CVE-2026-44226?
How can I check PyPI dependencies for CVE-2026-44226?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-c3gc-9pf2-84gg",
"modified" : "2026-05-13T14:18:12Z",
"published" : "2026-05-06T17:54:20Z",
"aliases" : [ "CVE-2026-44226" ],
"summary" : "PyLoad vulnerable to unauthenticated traceback disclosure via global exception handler in WebUI",
"details" : "### Summary\n`pyload-ng` WebUI returns full Python traceback details to clients on unhandled exceptions.\n\nBecause `/web/<path:filename>` is reachable without authentication and renders attacker-controlled template names, an unauthenticated user can reliably trigger a server exception (for example by requesting a non-existent template) and receive internal stack traces in the HTTP response.\n\n### Details\nThe issue is caused by the combination of:\n\n1. Unauthenticated template-render route:\n- `src/pyload/webui/app/blueprints/app_blueprint.py:32-36`\n - `@bp.route(\"/web/<path:filename>\", endpoint=\"web\")`\n - `data = render_template(filename)` with user-controlled `filename`\n - no `@login_required(...)` on this route\n\n2. Global exception handler exposes traceback to response:\n- `src/pyload/webui/app/handlers.py:14-27`\n - `tb = traceback.format_exc()`\n - `messages.extend(tb.split('\\n'))`\n - returned in rendered error page for all exceptions\n\n3. Error page renders all `messages`:\n- `src/pyload/webui/app/themes/modern/templates/base.html:217-219`\n - loops over `messages` and prints them in response HTML\n\nSo any unhandled exception can disclose internal implementation details (stack frames, source paths, exception metadata) to remote unauthenticated clients. \n\nThis is a core behavior issue in default WebUI error handling\n\n### PoC\n```python\n#!/usr/bin/env python3\nfrom __future__ import annotations\n\nimport re\nimport shutil\nimport tempfile\nimport traceback\nfrom pathlib import Path\n\n\nROOT = Path(__file__).resolve().parent / \"pyload\" / \"src\" / \"pyload\"\n\n\ndef read_text(rel: str) -> str:\n return (ROOT / rel).read_text(encoding=\"utf-8\")\n\n\ndef route_has_no_login_required(app_blueprint: str) -> bool:\n m = re.search(\n r'@bp\\\\.route\\\\(\"/web/<path:filename>\", endpoint=\"web\"\\\\)\\\\s*'\n r\"def render\\\\(filename\\\\):(?P<body>.*?)(?:\\\\n\\\\n@bp\\\\.route|\\\\Z)\",\n app_blueprint,\n re.DOTALL,\n )\n if not m:\n return False\n block_start = max(0, m.start() - 200)\n block = app_blueprint[block_start:m.end()]\n return \"@login_required(\" not in block\n\n\ndef main() -> None:\n workdir = Path(tempfile.mkdtemp(prefix=\"pyload-traceback-infoleak-\"))\n try:\n app_blueprint = read_text(\"webui/app/blueprints/app_blueprint.py\")\n handlers = read_text(\"webui/app/handlers.py\")\n base_template = read_text(\"webui/app/themes/modern/templates/base.html\")\n\n unauth_web_route = '/web/<path:filename>' in app_blueprint and route_has_no_login_required(app_blueprint)\n user_controlled_template_name = \"render_template(filename)\" in app_blueprint\n handler_uses_traceback = \"traceback.format_exc()\" in handlers\n handler_appends_trace = \"messages.extend(tb.split('\\\\n'))\" in handlers\n global_exception_handler = \"(Exception, handle_exception_error)\" in handlers\n template_renders_messages = \"{% for message in messages %}\" in base_template and \"{{message}}\" in base_template\n\n leaked_traceback_keyword = False\n leaked_exception_type = False\n try:\n raise RuntimeError(\"forced-poc-error\")\n except Exception:\n tb = traceback.format_exc()\n messages = [f\"Error 500: forced-poc-error\"]\n messages.extend(tb.split(\"\\\\n\"))\n joined = \"\\\\n\".join(messages)\n leaked_traceback_keyword = \"Traceback (most recent call last)\" in joined\n leaked_exception_type = \"RuntimeError: forced-poc-error\" in joined\n\n repro_success = all(\n [\n unauth_web_route,\n user_controlled_template_name,\n handler_uses_traceback,\n handler_appends_trace,\n global_exception_handler,\n template_renders_messages,\n leaked_traceback_keyword,\n leaked_exception_type,\n ]\n )\n\n print(\"unauth_web_route=\", unauth_web_route)\n print(\"user_controlled_template_name=\", user_controlled_template_name)\n print(\"handler_uses_traceback=\", handler_uses_traceback)\n print(\"handler_appends_trace=\", handler_appends_trace)\n print(\"global_exception_handler=\", global_exception_handler)\n print(\"template_renders_messages=\", template_renders_messages)\n print(\"leaked_traceback_keyword=\", leaked_traceback_keyword)\n print(\"leaked_exception_type=\", leaked_exception_type)\n print(\"traceback_infoleak_repro_success=\", repro_success)\n finally:\n shutil.rmtree(workdir, ignore_errors=True)\n print(\"cleanup_done=True\")\n\n\nif __name__ == \"__main__\":\n main()\n```\n\nObserved result:\n```text\nunauth_web_route= True\nuser_controlled_template_name= True\nhandler_uses_traceback= True\nhandler_appends_trace= True\nglobal_exception_handler= True\ntemplate_renders_messages= True\nleaked_traceback_keyword= True\nleaked_exception_type= True\ntraceback_infoleak_repro_success= True\ncleanup_done=True\n```\n\n### Impact\n- Vulnerability type: Information disclosure (stack trace / internal path leakage).\n- Attack surface: unauthenticated WebUI request path.\n- Exposes internal error details that help attackers map application internals and improve exploit reliability for follow-on attacks.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "pyload-ng"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "0.5.0b3.dev100"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/pyload/pyload/security/advisories/GHSA-c3gc-9pf2-84gg"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-44226"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/pyload/pyload"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-209" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-06T17:54:20Z",
"nvd_published_at" : "2026-05-11T18:16:37Z"
}
}