Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker controls/influences model directory contents
-
DeliveryPlant malicious modeling_*.py referenced in modules.json
-
ExploitVictim loads model via SentenceTransformer(path, trust_remote_code=False)
-
Executionos.path.exists short-circuit bypasses trust gate
-
PersistDynamic import executes attacker code
-
ImpactArbitrary code execution in loader process
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to control or influence the contents of a model directory on the victim's local filesystem - specifically the ability to place or modify a modules.json that references an attacker-supplied custom module (e.g. modeling_*.py) - and the victim application must then load that directory via SentenceTransformer(path) using a local path that exists on disk. The bypass fires precisely because trust_remote_code=False is ignored for existing local paths, so it works against the ostensibly 'safe' default the developer opted into. Limiting factors that reduce real-world risk: this is not exploitable against a remote service with no attacker file influence - the attacker needs a write/supply-chain foothold over the model directory (untrusted downloaded models, shared or world-writable model caches, compromised model registries, or CI artifacts); loading only first-party, trusted, integrity-verified models from read-only storage prevents exploitation. It affects the load-from-local-path code path with custom (non-sentence-transformers-namespace) module classes. |
| Impact | The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N, VC:H/VI:H/VA:H, score 9.3) rates this critical with full confidentiality, integrity, and availability impact and no privileges or interaction required. That rating is optimistic relative to the described mechanics: exploitation is not a network-reachable service bug but requires the attacker to control or influence the contents of a model directory that a victim application then loads - a supply-chain / untrusted-model prerequisite rather than blind remote exploitation. No EPSS score, KEV listing, or POC flag was provided in the input, so exploitation probability and active-exploitation signals are unknown; there is no public exploit identified at time of analysis and no evidence of in-the-wild use. The realistic priority is high for any environment that loads third-party, downloaded, or shared-filesystem models under the false assurance of trust_remote_code=False, and low for environments that only load first-party, trusted, integrity-verified models. Note the tension: CVSS PR:N/UI:N implies default-config remote compromise, but the description implies the victim must be induced to load an attacker-influenced model - verify against the VulnCheck advisory before treating this as unauthenticated network RCE. |
| Exploit ScenarioDerived | An attacker publishes or tampers with a sentence-transformers model repository so its modules.json references a malicious modeling_backdoor.py; a victim service downloads or syncs that model to local disk and calls SentenceTransformer(path, trust_remote_code=False), believing the flag prevents custom code execution. Because the path exists on disk, the trust gate is bypassed and the attacker's Python runs at import time within the loading process's privileges. No public exploit is identified at time of analysis, but the low attack complexity makes weaponization straightforward once an attacker can influence any loaded model directory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 31, 2026
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.
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.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
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.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
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
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
DescriptionCVE.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.
Blast Radius
ecosystem impact- 7 pypi packages depend on sentence-transformers (7 direct, 0 indirect)
Ecosystem-wide dependent count for version 5.6.0.
Articles & Coverage 2
Executive ViewAI
Hugging Face sentence-transformers, a widely-deployed Python library for machine learning inference, contains a critical vulnerability (CVE-2026-68770) that enables arbitrary code execution when loading models, systematically bypassing built-in security controls. Organizations using this library to load models from external or untrusted sources face potential complete system compromise and data exfiltration. No vendor-released patch identified at time of analysis, requiring urgent interim mitigation.
Until a vendor patch becomes available: restrict sentence-transformers to pre-approved, internally-controlled models only; implement strict filesystem permissions preventing dynamic Python module execution from model directories; scan all model files (modules.json, modeling_*.py) for suspicious content before load-time; run inference workloads exclusively in isolated containers with minimal privileges and no outbound network connectivity; consider temporary service suspension for externally-facing applications until remediation is complete.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
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
EUVD-2026-51650
GHSA-jhr6-gm9c-rqjv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB