SEPTEMBER 18, 2026
Live Feed
Back to database
Case File

CVE-2026-79784

HIGH · CVSS 8.8 EPSS 0.32% Public Exploit

Source: NVD + CISA KEV + EPSS · Published 2026-08-25 · Last synced 2026-09-18

CyberRota Analysis

AI-Generated

The vulnerability arises from Vocos's ability to instantiate arbitrary classes based on user-defined configuration files without proper restrictions, allowing attackers to execute any callable from an importable module. This could lead to remote code execution if a malicious configuration file is loaded, particularly when downloading models from untrusted repositories. Organizations utilizing Vocos for model loading and configuration management should prioritize addressing this vulnerability to mitigate the risk of unauthorized code execution.

Public Exploit Signal

A public exploit, PoC, GitHub repository or Metasploit reference was detected for this CVE.

Note: these links are listed for security research and verification purposes only.

CVE
CVE-2026-79784
Severity
HIGH
CVSS
8.8
EPSS
0.32%

Original NVD Description

Vocos instantiates a class named by a configuration file without restricting which class may be named. instantiate_class in vocos/pretrained.py takes the class_path value from the configuration, splits it into a module and an attribute, imports the module with __import__, resolves the attribute with getattr, and calls the result as args_class(*args, **kwargs) where kwargs is the config's own init_args mapping. No allowlist constrains the dotted path, so a configuration may name any importable callable and supply the arguments it is called with. Vocos.from_hparams reaches this for each of the feature_extractor, backbone and head entries, and Vocos.from_pretrained reaches it with a remote file: it downloads config.yaml from a caller-named Hugging Face repository and passes it straight to from_hparams. Loading a model from a repository the user does not control therefore executes code of the repository owner's choosing in the loading process. The neighbouring torch.load of the downloaded weights is a separate matter and is constrained on PyTorch releases that default weights_only to true, which leaves this path as the reachable one.