diffusers
🤗 Diffusers: State-of-the-art diffusion models for image, video, and audio generation in PyTorch.
Activity
- Latest release
- 3w ago
- Total releases
- 99
- Cadence
- ~10 days
- Last 12 months
- 7
Reach
- Stars
- 34.4k
Details
- License
- unknown
- First release
- May 30, 2022
| Version | Released | |
|---|---|---|
0.40.0
minor
| ||
0.39.0
minor
| ||
0.38.0
minor
| ||
0.37.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.37.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.36.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.35.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.35.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.35.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.34.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.33.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.33.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.32.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.32.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.32.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.31.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.30.3
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.30.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.30.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.30.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.29.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.29.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.29.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.28.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.28.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.28.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.27.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.27.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.27.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.26.3
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.26.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.26.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.26.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.25.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.25.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.24.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.23.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.23.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.22.3
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.22.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.22.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.22.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.21.4
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.21.3
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.21.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.21.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.21.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.20.2
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.20.1
patch
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev | ||
0.20.0
minor
3 CVEs
CVE-2026-45804
PYSEC-2026-2446
GHSA-7wx4-6vff-v64p
Jul 13, 2026
Diffusers: TOCTOU Trust Remote Code Bypass
7.5
/ 10
High
Network
High
None
Required
Unchanged
High
High
High
BackgroundThis vulnerability is found in the It is found in the This function has a
The vulnerability allows arbitrary code execution through the custom pipeline flow from a Hub repo, with no Naive Flow
Inside
This config is used to detect custom pipeline code and enforce the trust check:
After the check passes,
Back in
If the config points to a The Vulnerability
The trust check in Therefore, it’s possible to introduce remote code into the repo between the two calls, bypassing the trust check. The race window is everything between the two Hub calls inside
For the exploit, commit A carries a clean config with Commit A -
Commit B -
When PoC
Constraints
ExploitabilityThe window between the two calls is very short. Local testing resulted in a window of approximately ~0.5 seconds for the attacker to push the change. This is, of course, unfeasible to accomplish for each and every new download. However, given a popular repo with many downloads per day, one may achieve statistical success by changing the repo’s state every once in a while or every few seconds, with some percentage of downloaders falling on the exact window. ImpactThe vulnerability is a silent RCE - it allows arbitrary code to be loaded through the custom pipeline flow from a Hub repo, with no Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
References Updated Jul 13, 2026 · Source: OSV.dev
CVE-2026-44827
PYSEC-2026-41
GHSA-j7w6-vpvq-j3gm
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
Diffusers is the a library for pretrained diffusion models. Prior to 0.38.0, diffusers 0.37.0 allows remote code execution without the trust_remote_code=True safeguard when loading pipelines from Hugging Face Hub repositories. The _resolve_custom_pipeline_and_cls function in pipeline_loading_utils.py performs string interpolation on the custom_pipeline parameter using f"{custom_pipeline}.py". When custom_pipeline is not supplied by the user, it defaults to None, which Python interpolates as the literal string "None.py". If an attacker publishes a Hub repository containing a file named None.py with a class that subclasses DiffusionPipeline, the file is automatically downloaded and executed during a standard DiffusionPipeline.from_pretrained() call with no additional keyword arguments. The trust_remote_code check in DiffusionPipeline.download() is bypassed because it evaluates custom_pipeline is not None as False (since the kwarg was never supplied), while the downstream code path that actually loads the module resolves the None value into a valid filename. An attacker can achieve silent arbitrary code execution by publishing a malicious model repository with a None.py file and a standard-looking model_index.json that references a legitimate pipeline class name, requiring only that a victim calls from_pretrained on the repository. This vulnerability is fixed in 0.38.0. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev
CVE-2026-44513
PYSEC-2026-40
GHSA-98h9-4798-4q5v
May 14, 2026
8.8
/ 10
High
Network
Low
None
Required
Unchanged
High
High
High
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. Affected versions
0.0.1
0.0.2
0.0.3
0.0.4
0.1.0
0.1.1
0.1.2
0.1.3
0.10.0
0.10.1
0.10.2
0.11.0
+ 84 more Show less
0.11.1
0.12.0
0.12.1
0.13.0
0.13.1
0.14.0
0.15.0
0.15.1
0.16.0
0.16.1
0.17.0
0.17.1
0.18.0
0.18.1
0.18.2
0.19.0
0.19.1
0.19.2
0.19.3
0.2.0
0.2.1
0.2.2
0.2.3
0.2.4
0.20.0
0.20.1
0.20.2
0.21.0
0.21.1
0.21.2
0.21.3
0.21.4
0.22.0
0.22.1
0.22.2
0.22.3
0.23.0
0.23.1
0.24.0
0.25.0
0.25.1
0.26.0
0.26.1
0.26.2
0.26.3
0.27.0
0.27.1
0.27.2
0.28.0
0.28.1
0.28.2
0.29.0
0.29.1
0.29.2
0.3.0
0.30.0
0.30.1
0.30.2
0.30.3
0.31.0
0.32.0
0.32.1
0.32.2
0.33.0
0.33.1
0.34.0
0.35.0
0.35.1
0.35.2
0.36.0
0.37.0
0.37.1
0.4.0
0.4.1
0.4.2
0.5.0
0.5.1
0.6.0
0.7.0
0.7.1
0.7.2
0.8.0
0.8.1
0.9.0
Fixed in
0.38.0
Updated May 20, 2026 · Source: OSV.dev |