CVE-2026-44513

Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, a trust_remote_code bypass in DiffusionPipeline.from_pretrained allows arbitrary remote code execution despite the user passing trust_remote_code=False (or omitting it, which is the default). The vulnerability has three variants, all sharing the same root cause — the trust_remote_code gate was implemented inside DiffusionPipeline.download() rather than at the actual dynamic-module load site, so any code path that bypassed or short-circuited download() also bypassed the security check. DiffusionPipeline.from_pretrained('repoA', custom_pipeline='attacker/repoB', trust_remote_code=False) — the gate evaluated against repoA's file list rather than repoB's, so repoB's pipeline.py was loaded and executed. DiffusionPipeline.from_pretrained('/local/snapshot', custom_pipeline='attacker/repoB', trust_remote_code=False) — the local-path branch never invoked download(), so the gate was never reached and remote code from repoB executed. DiffusionPipeline.from_pretrained('/local/snapshot', trust_remote_code=False) where the snapshot contains custom component files (e.g. unet/my_unet_model.py) referenced from model_index.json — same root cause; the local path skipped download() and custom component code executed. This vulnerability is fixed in 0.38.0.
Configurations

Configuration 1 (hide)

cpe:2.3:a:huggingface:diffusers:*:*:*:*:*:python:*:*

History

26 Oct 2026, 14:10

Type Values Removed Values Added
Summary
  • (es) Diffusers es la biblioteca para modelos de difusión preentrenados. Antes de la versión 0.38.0, una omisión de ’trust_remote_code’ en DiffusionPipeline.from_pretrained permite la ejecución remota de código arbitraria a pesar de que el usuario pase ’trust_remote_code=False’ (o lo omita, que es el valor predeterminado). La vulnerabilidad tiene tres variantes, todas compartiendo la misma causa raíz - la compuerta de ’trust_remote_code’ se implementó dentro de DiffusionPipeline.download() en lugar de en el sitio real de carga del módulo dinámico, por lo que cualquier ruta de código que omitiera o cortocircuitara download() también omitía la verificación de seguridad. DiffusionPipeline.from_pretrained(’repoA’, custom_pipeline=’atacante/repoB’, trust_remote_code=False) - la compuerta evaluó la lista de archivos de repoA en lugar de la de repoB, por lo que el pipeline.py de repoB fue cargado y ejecutado. DiffusionPipeline.from_pretrained(’/local/snapshot’, custom_pipeline=’atacante/repoB’, trust_remote_code=False) - la rama de ruta local nunca invocó download(), por lo que la compuerta nunca fue alcanzada y el código remoto de repoB se ejecutó. DiffusionPipeline.from_pretrained(’/local/snapshot’, trust_remote_code=False) donde la instantánea contiene archivos de componentes personalizados (p. ej., unet/my_unet_model.py) referenciados desde model_index.json - misma causa raíz; la ruta local omitió download() y el código del componente personalizado se ejecutó. Esta vulnerabilidad está corregida en la versión 0.38.0.

Information

Published : 2026-05-14 17:16

Updated : 2026-10-26 14:10


NVD link : CVE-2026-44513

Mitre link : CVE-2026-44513

CVE.ORG link : CVE-2026-44513


JSON object : View

Products Affected

huggingface

  • diffusers
CWE
CWE-94

Improper Control of Generation of Code ('Code Injection')

CWE-358

Improperly Implemented Security Check for Standard