GitHub Advisoryadvisory · PyPI

GHSA-36fq-jgmw-4r9c Keras is vulnerable to Deserialization of Untrusted Data

HIGH Published 2025-09-19 Modified 2026-05-29 Official page ↗
Aliases
CVE-2025-9906
Ecosystem
PyPI
Packages
keras
Severity
High
CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H
Weaknesses
CWE-502
Reviewed
2025-09-19

Affected packages

• PyPI keras: < 3.11.0 → fixed in 3.11.0

Description

Arbitrary Code Execution in Keras Keras versions prior to 3.11.0 allow for arbitrary code execution when loading a crafted `.keras` model archive, even when `safe_mode=True`. The issue arises because the archive’s `config.json` is parsed before layer deserialization. This can invoke `keras.config.enable_unsafe_deserialization()`, effectively disabling safe mode from within the loading process itself. An attacker can place this call first in the archive and then include a `Lambda` layer whose function is deserialized from a pickle, leading to the execution of attacker-controlled Python code as soon as a victim loads the model file. Exploitation requires a user to open an untrusted model; no additional privileges are needed. The fix in version 3.11.0 enforces safe-mode semantics *before* reading any user-controlled configuration and prevents the toggling of unsafe deserialization via the config file. Affected versions: < 3.11.0 Patched version: 3.11.0 It is recommended to upgrade to version 3.11.0 or later and to avoid opening untrusted model files.

Related

Alias · CVE (1)

  • CVE-2025-9906 The Keras Model.load_model method can be exploited to achieve arbitrary code execution, even with safe_mode=True. vulnerability

Weakness · CWE (1)

  • CWE-502 Deserialization of Untrusted Data weakness

References