Skip to main content

ESPnet CVE-2026-112086

| EUVDEUVD-2026-104089 LOW
Deserialization of Untrusted Data (CWE-502)
2026-10-19 VulDB GHSA-v5q2-hr9p-q4jv
2.1
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Publish malicious ESPnet model bundle
  2. Delivery
    Victim loads untrusted bundle
  3. Exploit
    Hydra instantiates crafted _target_
  4. Execution
    Arbitrary callable executes in process
  5. Impact
    Attacker achieves code execution on host

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
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 a victim to obtain and load an untrusted/attacker-supplied ESPnet model bundle through the espnet3 Inference Model Handler (build_model → read_bundle), where the bundle's inference config (conf/inference.yaml) contains an attacker-controlled _target_; pre-patch there was no namespace restriction, so Hydra's instantiate() resolves and calls any target, including nested ones inside arguments. The limiting factor is user interaction (UI:P): there is no attack against a running default service - the victim must choose to load the malicious bundle, and the patched path is additionally guarded unless trust_user_code=True is set. No authentication is required (PR:N), but the bundle must be delivered to and loaded by the target.

Impact

This is a CWE-502 deserialization/arbitrary-instantiation flaw in ESPnet's espnet3 Inference Model Handler (build_model / read_bundle), where Hydra's instantiate() recursively resolves and calls any _target_ string in an untrusted model bundle's inference config. The source diff is the strongest signal: the fix explicitly denies targets like os.system, subprocess.run/Popen, builtins.eval/exec, and torch.load, confirming the pre-patch behavior permits full arbitrary code execution, not merely limited data tampering. This creates a sharp conflict in the signals. VulDB's CVSS 4.0 score of 2.1 with only Low vulnerable-system impacts (VC:L/VI:L/VA:L) materially understates the technical impact - recursive Hydra instantiation of attacker-chosen callables is code execution in the loading process, which the code evidence supports as High across C/I/A. A public exploit (poc.zip) exists (POC=YES), so weaponization effort is low, but the vector is gated on the victim loading an attacker-supplied model bundle (UI:P in the vendor vector), making this a supply-chain / social-engineering class issue rather than a remotely-sprayable service bug. Not listed in CISA KEV and no EPSS value was provided; there is no evidence of active exploitation - only published POC code, which is a distinct signal from in-the-wild use. Net: real technical severity (RCE) is higher than the 2.1 headline, but real-world urgency is moderated by the required user interaction and ESPnet's research-oriented deployment profile.

Exploit ScenarioDerived

An attacker publishes a malicious ESPnet model bundle whose conf/inference.yaml sets a crafted _target_ (e.g. os.system or subprocess.run, or a nested target inside an argument). When a victim loads that bundle via the Inference Model Handler's build_model/read_bundle, Hydra recursively instantiates every _target_ and executes the attacker's callable with attacker-supplied arguments, achieving code execution in the victim's process. A public proof-of-concept (poc.zip) is available, lowering the barrier to exploitation.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 19, 2026

Arbitrary Python object instantiation in ESPnet's espnet3 Inference Model Handler allows an attacker who supplies a crafted model bundle to execute code on the machine that loads it, with assessed impact of high confidentiality, integrity and availability loss. The bundle's inference config carries an attacker-chosen _target_ value that Hydra's instantiate() resolves and calls, including targets nested inside arguments, and pre-fix ESPnet applied no namespace restriction to what could be built. Exploitation requires the victim to obtain and load the untrusted bundle (user interaction, no authentication required), publicly available exploit code exists, and ESPnet versions up to 202610.post2 are affected with an upstream fix merged as PR #6829; note that the published CVSS 4.0 base score of 2.1 reflects a low-impact/threat-adjusted rating and is materially lower than the assessed CVSS 3.1 vector of AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - apply espnet/espnet commit f217b24f06de55e332cab10231469d5890dbbe00 (PR https://github.com/espnet/espnet/pull/6829, issue https://github.com/espnet/espnet/issues/6828) or upgrade to the first ESPnet release containing it once published. The commit restricts bundle _target_ values to espnet2./espnet3. class targets (checked by literal prefix and by resolved origin), recursively scans nested _target_ keys, denylists torch.load, torch.jit.load, torch.serialization.load, builtins.eval/exec/__import__, os.system and subprocess run/Popen/call/check_output, and applies the same validation to the backend_class argument in espnet3/systems/base/backend_inference.py; backporting only the loading.py change leaves the backend_class route open. Compensating controls until the patch is deployed: do not load model bundles from untrusted publishers, and treat any downloaded bundle as executable code - inspect conf/inference.yaml and reject configs containing unexpected _target_ keys (nested ones included) or non-ESPnet targets, noting this is manual and bypassable. Keep the default trust_user_code=False path, and be aware that setting trust_user_code=True explicitly disables the new target checks, so it must never be enabled for third-party bundles; note also that the fix does not constrain arguments passed to allowed classes or OmegaConf resolvers, so untrusted bundles remain risky even when patched. Where bundles must be processed from third parties, run inference in a disposable container or VM with no credentials mounted, no outbound network access, and a read-only filesystem - an operational tax that trades convenience for containment rather than preventing instantiation.

Affected VersionsENISA

espnet 202610.post2

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ESPnet is a speech processing toolkit whose espnet3 line publishes and loads self-contained model bundles: a bundle contains conf/inference.yaml plus weights, and espnet3.api.inference.loading.read_bundle (reached via build_model in the publication/inference_model.py path) builds the model from that config using Hydra's instantiate() over an OmegaConf tree. Hydra's instantiate() treats every _target_ key as a dotted import path, imports the referenced module (running its top-level code) and calls the referenced callable with the supplied arguments; instantiation is recursive, so a _target_ sitting inside an argument of another node is executed just like the top-level one. The root cause class is CWE-502 (deserialization of untrusted data): an attacker-controlled config is effectively a program, letting a bundle name os.system, subprocess.run, builtins.eval, torch.load or any other reachable callable and thereby execute code with the loader's privileges. The upstream fix (commit f217b24f06de55e332cab10231469d5890dbbe00) hardens three things: _iter_targets walks the whole config tree to collect nested _target_ strings; _disallowed_targets enforces an allowlist of espnet2./espnet3. prefixes both on the literal name and on the resolved object's __module__.__qualname__ (to block namespace escapes such as a path through an allowed module that re-exports os), requires the resolved object to be a class (which removes module functions like espnet2.bin.launch.main), and explicitly denylists torch.load, torch.jit.load, torch.serialization.load, builtins.eval/exec/__import__, os.system and several subprocess entry points; finally, backend_inference.py applies the same validation to a backend_class argument that can originate from a bundle's inference.yaml. The patch authors note the remaining surface: arguments passed to an allowed class and OmegaConf resolvers are separate, still-untrusted vectors, so the fix narrows rather than fully sandboxes bundle loading.

Know when Espnet 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 (VulDB) PRIMARY 2.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
vuln.today AI 8.8 HIGH

Loading an untrusted bundle lets Hydra instantiate arbitrary callables (RCE), so C/I/A:H; no prior auth (PR:N) but the victim must load the bundle, hence UI:R.

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:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

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

Lifecycle Timeline

3
Severity Changed
Oct 19, 2026 - 06:22 NVD
MEDIUM LOW
CVSS changed
Oct 19, 2026 - 06:22 NVD
5.3 (MEDIUM) 2.1 (LOW)
CVE Published
Oct 19, 2026 - 06:00 cve.org
LOW 2.1

DescriptionCVE.org

A vulnerability was found in ESPnet up to 202610.post2. This affects the function build_model of the file espnet3/publication/inference_model.py of the component Inference Model Handler. The manipulation of the argument _target_ results in deserialization. It is possible to launch the attack remotely. The exploit has been made public and could be used. The patch is identified as f217b24f06de55e332cab10231469d5890dbbe00. It is best practice to apply a patch to resolve this issue.

Threat Intelligence Overview

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Low
popular speech-research ML toolkit, limited production/enterprise footprint
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment 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 LOW
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
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· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

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