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
Attacker-controlled model is network-deliverable (AV:N/AC:L/PR:N) but requires the victim application to load the untrusted model directory (UI:R); code runs in-process yielding full C:H/I:H/A:H, no scope change.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
Lifecycle Timeline
3DescriptionCVE.org
sentence-transformers contains a security control bypass vulnerability that allows attackers to achieve arbitrary code execution by exploiting a logic flaw in the import_module_class helper within sentence_transformers/util/misc.py, where the guard condition includes an 'or os.path.exists(model_name_or_path)' clause that satisfies the trust gate whenever the supplied path exists on the local filesystem, regardless of the trust_remote_code=False argument. Attackers who can control or influence the contents of a model directory on disk can place malicious Python files such as modeling_*.py referenced via modules.json, causing the code to execute at import time when an application loads the model with SentenceTransformer(path, trust_remote_code=False), bypassing the documented security contract and achieving code execution within the loading process.
Articles & Coverage 2
AnalysisAI
Arbitrary code execution in the Hugging Face sentence-transformers Python library allows attackers who control the contents of a model directory to run code even when the caller explicitly passes trust_remote_code=False. The import_module_class helper in sentence_transformers/util/misc.py short-circuits its trust gate with an 'or os.path.exists(model_name_or_path)' clause, so any local path that exists satisfies the check and triggers dynamic loading of custom Python (e.g. modeling_*.py referenced in modules.json) at model-load time. This is classic CWE-94 code injection with no public exploit identified at time of analysis; the vendor commit deprecates rather than removes the behavior, deferring the actual fix to v6.0.
Technical ContextAI
sentence-transformers is a widely used Python framework built on Hugging Face Transformers/PyTorch for producing text and image embeddings, semantic search, and reranking, and is a common component in RAG pipelines. Custom model architectures are supported via a modules.json manifest that references Python module classes (such as modeling_custom.CustomTransformer), which are loaded through transformers' get_class_from_dynamic_module - a mechanism that imports and executes arbitrary repository code. Hugging Face gates this dynamic execution behind the trust_remote_code flag as a documented security contract. The root cause (CWE-94, Improper Control of Generation of Code) is a flawed guard condition in import_module_class: the clause 'or os.path.exists(model_name_or_path)' treats the mere existence of a local path as implicit trust, so the dynamic import proceeds regardless of trust_remote_code=False whenever the model is loaded from disk.
RemediationAI
Important caveat: the referenced upstream fix (commit ae1acc3, PR #3807) does NOT remove the vulnerable 'or os.path.exists(model_name_or_path)' short-circuit - it only adds a FutureWarning deprecating the implicit trust of local directories, with the actual enforcement (requiring trust_remote_code=True for local custom code) explicitly deferred to sentence-transformers v6.0 per the in-code TODO. Therefore, upgrading to a version that merely contains this commit will emit a warning but will still execute local custom code; treat this as 'Upstream fix available (PR/commit); released patched version not independently confirmed' and plan to move to v6.0 once released for real enforcement. Until then, apply compensating controls: only load models from trusted, integrity-verified sources and never point SentenceTransformer() at directories writable by untrusted users or processes (trade-off: constrains automated model-download workflows); enforce strict filesystem permissions on model cache/model directories so attackers cannot place or modify modeling_*.py files or modules.json (trade-off: operational overhead in shared/CI environments); vet modules.json and any modeling_*.py in third-party model repos before loading, or run model loading in a sandboxed/least-privilege container with no sensitive credentials so code execution is contained (trade-off: added deployment complexity). Track the vendor advisory (VulnCheck) and issue #3801 for the v6.0 release that removes the short-circuit.
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 affects Kestra OSS (the open-source event-driven orchestration platform) prior to
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
Same weakness CWE-94 – Code Injection
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51650
GHSA-jhr6-gm9c-rqjv