Skip to main content

sentence-transformers EUVDEUVD-2026-51650

| CVE-2026-68770 CRITICAL
Code Injection (CWE-94)
2026-07-31 disclosure@vulncheck.com GHSA-jhr6-gm9c-rqjv
9.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker controls/influences model directory contents
  2. Delivery
    Plant malicious modeling_*.py referenced in modules.json
  3. Exploit
    Victim loads model via SentenceTransformer(path, trust_remote_code=False)
  4. Execution
    os.path.exists short-circuit bypasses trust gate
  5. Persist
    Dynamic import executes attacker code
  6. Impact
    Arbitrary 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

sentence-transformers 0 ≤5.5.1

Affected Packages

pypi sentence-transformers fix: 5.6.0

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

Vendor (vulncheck) PRIMARY 9.3 CRITICAL
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
vuln.today AI 8.8 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Red Hat 7.4 HIGH

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 7 pypi packages depend on sentence-transformers (7 direct, 0 indirect)

Ecosystem-wide dependent count for version 5.6.0.

Executive ViewAI

Why It Matters

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.

Business Impact: Severe
Compensating Controls

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

EPSS Score
0.5%
Top 59% exploitable
Prevalence
High
one of the most widely used embedding/RAG libraries in ML/NLP pipelines
Threat Intel
1
1 source
Social Media
4
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub VulDB

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

47
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

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.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy