Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Reflex UI is network-reachable when --share is used and the auth control is non-functional, so PR:N/UI:N/AC:L; full dataset, model, and Hub-push control yields C/I/A:H with no scope change.
Primary rating from Vendor (github).
CVSS VectorVendor: github
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Lifecycle Timeline
3DescriptionCVE.org
Backpropagate is a Python library for fine-tuning large language models on a single GPU. In versions 1.1.0 and 1.1.1, the optional Reflex web UI exposes a training control plane without authentication: dataset upload, model load, training start/stop, multi-run orchestration, GGUF export, and HuggingFace Hub push. The CLI accepts two operator-facing flags intended as security controls: --auth user:pass - documented as "require HTTP Basic authentication on every request to the UI." and--share - documented as "expose the UI on a public address; requires --auth." When --auth user:pass is passed, the CLI prints Auth: enabled (user: <username>) to confirm to the operator that authentication is active, then exports BACKPROPAGATE_UI_AUTH=user:pass to the subprocess that launches the Reflex backend. The Reflex backend (backpropagate/ui_app/**) never reads BACKPROPAGATE_UI_AUTH. No authentication middleware is registered. No request-level guard runs. No WebSocket upgrade guard runs. Any client that reaches the bound port - local or remote, depending on whether --share is used - has full UI access. An inline comment at backpropagate/cli.py:1217-1218 in the v1.1.0 source documents the gap: "For Phase 1 the variable is exported but Reflex doesn't read it yet." This comment was internal-facing; the user-facing documentation (README, CHANGELOG, SHIP_GATE) advertised the contract as enforced. An attacker who reaches the bound port can read uploaded datasets, trigger arbitrary training runs against any local base models as well as read their paths, trigger HuggingFace Hub pushes and cause disk-fill DoS. This issue has been fixed in version 1.2.0. If developers cannot immediately upgrade to 1.2.0 run backprop ui with no flags so it binds to localhost, use SSH port-forwarding (ssh -L 7860:localhost:7860 <training-host>) instead of --share for remote access, and audit any host previously launched with --share, re-issuing any HF tokens used during those sessions.
AnalysisAI
Authentication bypass in Backpropagate 1.1.0 and 1.1.1 lets any client that can reach the Reflex web UI's bound port take full control of the training control plane, despite the operator passing --auth user:pass. The CLI advertised and confirmed authentication as active, but the Reflex backend never read the BACKPROPAGATE_UI_AUTH variable and registered no middleware, so dataset upload, training control, GGUF export, and HuggingFace Hub push were exposed unauthenticated. No public exploit identified at time of analysis, but the gap is trivially reachable and CVSS 4.0 is 9.3.
Technical ContextAI
Backpropagate is a Python LLM fine-tuning library that ships an optional web UI built on the Reflex framework (backpropagate/ui_app/**). The CLI's --auth and --share flags were intended to enforce HTTP Basic auth and gate public exposure. Under the hood, the CLI only exported BACKPROPAGATE_UI_AUTH=user:pass into the Reflex subprocess environment, and a code comment at backpropagate/cli.py:1217-1218 acknowledged 'For Phase 1 the variable is exported but Reflex doesn't read it yet.' Because no ASGI middleware, request-level guard, or WebSocket pre-accept guard was registered, all HTTP and WS endpoints driving training, dataset I/O, model load, and Hub push were unauthenticated. The root cause maps to CWE-358 (Improperly Implemented Security Check for Standard) - the standard auth mechanism was advertised and partially wired but not actually enforced. The 1.2.0 release adds real middleware via rx.App(api_transformer=basic_auth_transformer) with four modes, HMAC-signed cookies, WS pre-accept validation, and Host/Origin allowlists.
RemediationAI
Vendor-released patch: upgrade to Backpropagate 1.2.0, which adds real ASGI Basic-auth middleware, WebSocket pre-accept validation, and Host/Origin allowlists (https://github.com/mcp-tool-shop-org/backpropagate/releases/tag/v1.2.0, advisory https://github.com/mcp-tool-shop-org/backpropagate/security/advisories/GHSA-f65r-h4g3-3h9h). If you cannot upgrade immediately, run backprop ui with no flags so the UI binds to localhost only, and reach it from another host with SSH local port forwarding (ssh -L 7860:localhost:7860 training-host) instead of --share - this loses the convenience of a public URL but eliminates remote exposure. Audit any host previously launched with --share on 1.1.0 or 1.1.1 for unexpected runs, datasets, or HF pushes, and rotate any HuggingFace tokens that were present in those sessions since they could have been used to push attacker-controlled artifacts.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing
Same technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37516
GHSA-f65r-h4g3-3h9h