- Top reward
- $3,100
- Top severity paid
- Not published
- Assets in scope
- 10
- Public CVEs
- 13
- Last change
- No changes yet
At a glance
What to know before you start testing.
- Pays up to $3,100
- top reward.
- Report on Sorona
- Submit through the program page.
- Partial safe harbor
- Some legal protection; read the terms.
- Publish after a fix
- Coordinate the timing with the company.
Rewards
What Sorona lists as the payout for each severity.
Sorona does not publish a reward table for this program.
- Safe harbor
-
Partial
Sorona will not pursue legal action against you for good-faith research submitted to us in line with this policy. We cannot speak for the upstream project, its vendor, or any third party, and we do not grant authorization on their behalf.
Summarised with AI from the program policy on Sorona, read 12 Nov 2026, and checked word for word against it. Read the original
Scope
10 assets you may test, 9 excluded.
Web 1
- https://keras.io
Products and areas 9
- Callbacks and the training loop, covering checkpoint writing, logging and the callbacks that reach the network during fit
- Google's open-source VRP takes security issues in the latest versions of the code held in the repositories it lists, and it names both keras-team/keras and keras-team/tf-keras at TIER_OT1: a product vulnerability anywhere in either repository is accepted, at $101 to $3,133.70
- keras.saving end to end: config serialisation and deserialisation, custom-object registration and resolution, the safe_mode guard, and the layer graph rebuilt from a config the loader did not author
- keras.utils: get_file downloading and archive extraction, the dataset, image and text loading helpers, and the path handling around all of it
- Model persistence in every format the library reads or writes: the .keras archive, legacy HDF5 .h5 files, weights-only checkpoints, and the SavedModel export and import paths
- Multi-backend dispatch across the TensorFlow, JAX, PyTorch and NumPy backends, including anything reachable through only one of them
- Preprocessing and feature layers that parse user-supplied text, images or tabular values at run time rather than at model-build time
- Repository configuration and the PyPI release pipeline for keras and tf-keras, which Google prices under its separate supply-chain category
- The modelling API itself: keras.layers, keras.Model and the functional and sequential builders, keras.ops, activations, initialisers, constraints, losses, metrics and optimisers
Out of scope (9)
- Adversarial-example, model-poisoning and other ML-robustness research, which the program routes to the Google AI VRP rather than the OSS VRP
- Any other repository in the keras-team org, which the tier file does not list and which pays nothing for a product vulnerability after the April 2026 rules update
- Application-level misuse of the saving API by the caller
- Backend framework bugs that actually belong to TensorFlow, JAX or PyTorch rather than to Keras
- Defects that only reproduce on a release the projects no longer ship, since the program covers the latest versions
- Loading a model from an untrusted source with safe_mode=False, which the project documents as unsafe and places out of scope
- Notebook and tutorial code shipped alongside the library
- Reports filed by anyone other than the finder: Google wants the submission through bughunters.google.com under the researcher's own identity, and it does not pay Google or Google Partner employees
- Rewards to researchers on a sanctions list, in a sanctioned territory, or located in Russia or Belarus, which Google states it cannot issue
Rules
What the policy asks of you, and the bug types it won't reward, quoted from Sorona's policy.
While testing
-
Submit through sorona.xyz first.
-
Keras and tf-keras are both rated TIER_OT1, so a finding has to land in one of those two repositories
-
Loading a model with safe_mode=False is out of scope
-
Take the flaw to Google before anyone else
Not accepted
-
Loading a model from an untrusted source with safe_mode=False
-
Adversarial-example, model-poisoning and other ML-robustness research
-
Backend framework bugs that actually belong to TensorFlow, JAX or PyTorch rather than to Keras
-
Notebook and tutorial code shipped alongside the library
-
Application-level misuse of the saving API by the caller
-
Defects that only reproduce on a release the projects no longer ship
Summarised with AI from the program policy on Sorona, read 12 Nov 2026, and checked word for word against it. Read the original
Changes
Tracked since 11 Nov 2026. Last checked 1 hour ago.
No changes yet. When the rewards or scope move, you will see it here and in the RSS feed.
Public CVEs
Published vulnerabilities in this vendor's products, from the NVD.
| CVE | Summary | Severity | Published |
|---|---|---|---|
| CVE-2026-12482 | A vulnerability in keras-team/keras version 3.12.0 allows an attacker to craft a malicious tar archive that bypasses the `filter_safe_tarinfos` validation in `keras/src/utils/file_utils.py`. Specifically, symlink entries are not subjected to the same `is_path_in_dir` validation as regular file entries, allowing symlinks to be created outside the intended extraction directory. This can lead to syml | Medium 6.5 | 14 Jul 2026 |
| CVE-2026-12481 | A vulnerability in keras-team/keras version 3.14.0 allows for arbitrary code execution due to improper handling of deserialization in the `Lambda` layer. Specifically, the `_raise_for_lambda_deserialization()` function fails to enforce the safe-mode guard when `safe_mode` is set to `None`, which is the default value when `from_config()` is called outside of a `SafeModeScope` context. This logic er | Critical 9.8 | 3 Jul 2026 |
| CVE-2026-11816 | Keras versions prior to 3.14.0 are vulnerable to a path traversal issue in the archive extraction utilities located in `keras/src/utils/file_utils.py`. The functions `filter_safe_tarinfos()` and `filter_safe_zipinfos()` validate archive member paths against the process current working directory (CWD) instead of the actual extraction destination. When the process runs with CWD set to `/`, which is | High 8.1 | 11 Jun 2026 |
| CVE-2026-1462 | A vulnerability in the `TFSMLayer` class of the `keras` package, version 3.13.0, allows attacker-controlled TensorFlow SavedModels to be loaded during deserialization of `.keras` models, even when `safe_mode=True`. This bypasses the security guarantees of `safe_mode` and enables arbitrary attacker-controlled code execution during model inference under the victim's privileges. The issue arises due | High 7.8 | 13 Apr 2026 |
| CVE-2026-1669 | Arbitrary file read in the model loading mechanism (HDF5 integration) in Keras versions 3.0.0 through 3.13.1 on all supported platforms allows a remote attacker to read local files and disclose sensitive information via a crafted .keras model file utilizing HDF5 external dataset references. | High 7.1 | 11 Feb 2026 |
| CVE-2026-0897 | Allocation of Resources Without Limits or Throttling in the HDF5 weight loading component in Google Keras 3.0.0 through 3.13.0 on all platforms allows a remote attacker to cause a Denial of Service (DoS) through memory exhaustion and a crash of the Python interpreter via a crafted .keras archive containing a valid model.weights.h5 file whose dataset declares an extremely large shape. | High 7.1 | 15 Jan 2026 |
| CVE-2025-9905 | The Keras Model.load_model method can be exploited to achieve arbitrary code execution, even with safe_mode=True. One can create a specially crafted .h5/.hdf5 model archive that, when loaded via Model.load_model, will trigger arbitrary code to be executed. This is achieved by crafting a special .h5 archive file that uses the Lambda layer feature of keras which allows arbitrary Python code in the f | High 7.3 | 19 Sep 2025 |
| CVE-2025-9906 | The Keras Model.load_model method can be exploited to achieve arbitrary code execution, even with safe_mode=True. One can create a specially crafted .keras model archive that, when loaded via Model.load_model, will trigger arbitrary code to be executed. This is achieved by crafting a special config.json (a file within the .keras archive) that will invoke keras.config.enable_unsafe_deserialization( | High 8.6 | 19 Sep 2025 |
| CVE-2025-8747 | A safe mode bypass vulnerability in the `Model.load_model` method in Keras versions 3.0.0 through 3.10.0 allows an attacker to achieve arbitrary code execution by convincing a user to load a specially crafted `.keras` model archive. | High 8.6 | 11 Aug 2025 |
| CVE-2025-1550 | The Keras Model.load_model function permits arbitrary code execution, even with safe_mode=True, through a manually constructed, malicious .keras archive. By altering the config.json file within the archive, an attacker can specify arbitrary Python modules and functions, along with their arguments, to be loaded and executed during model loading. | High 7.3 | 11 Mar 2025 |
| CVE-2024-55459 | An issue in keras 3.7.0 allows attackers to write arbitrary files to the user's machine via downloading a crafted tar file through the get_file function. | Medium 6.5 | 8 Jan 2025 |
| CVE-2024-3660 | A arbitrary code injection vulnerability in TensorFlow's Keras framework (<2.13) allows attackers to execute arbitrary code with the same permissions as the application using a model that allow arbitrary code irrespective of the application. | Critical 9.8 | 16 Apr 2024 |
Original policy
Copied from sorona.xyz on 12 Nov 2026. The summaries on this page are made from it; the live page may have changed since.
Skip to content What this pays sorona.xyz pays 1.25× the program's reward, up to +$1,000 per finding, plus a complexity bonus of up to $1,000 for especially complex or well-chained bugs. Finding │ Program pays │ Through sorona.xyz Product vulnerability (Tier OT1; supply-chain compromise is a separate category) │ $101 - $3,133.70 │ $126 - $3,916.70 Other security issue (Tier OT1 flat award) │ $500 │ $625 Submit a vulnerability CVE history 10 Last 12 months 13 Lifetime Code execution 45 % Parsing/validation 25 % Access control 15 % Info disclosure 10 % Latest advisories Loading the feed Overview Keras is the high-level API most ML practitioners actually write against, and .keras and legacy .h5 model files are traded freely on Hugging Face, Kaggle and internal model registries. That trading is the attack surface: a safe_mode bypass turns "download a pretrained model" into remote code execution on the machine of every data scientist and every inference server that loads it, and unlike most library bugs the path needs no network position at all — just a model file someone was going to open anyway. Ten of its thirteen lifetime CVEs landed in the last twelve months, concentrated in exactly that class, which is the guard safe_mode was introduced to close and has repeatedly been bypassed on. Google prices both keras and tf-keras at Tier OT1 on the Bug Hunters open-source VRP, $101 to $3,133.70 for a product vulnerability at a panel's discretion. sorona.xyz adds 1.25× on top of whatever Google awards, up to $1,000 more, plus a complexity bonus of up to $1,000 for a well-chained finding. In scope Google's open-source VRP takes security issues in the latest versions of the code held in the repositories it lists, and it names both keras-team/keras and keras-team/tf-keras at TIER_OT1: a product vulnerability anywhere in either repository is accepted, at $101 to $3,133.70 Model persistence in every format the library reads or writes: the .keras archive, legacy HDF5 .h5 files, weights-only checkpoints, and the SavedModel export and import paths keras.saving end to end: config serialisation and deserialisation, custom-object registration and resolution, the safe_mode guard, and the layer graph rebuilt from a config the loader did not author The modelling API itself: keras.layers , keras.Model and the functional and sequential builders, keras.ops , activations, initialisers, constraints, losses, metrics and optimisers Multi-backend dispatch across the TensorFlow, JAX, PyTorch and NumPy backends, including anything reachable through only one of them keras.utils : get_file downloading and archive extraction, the dataset, image and text loading helpers, and the path handling around all of it Preprocessing and feature layers that parse user-supplied text, images or tabular values at run time rather than at model-build time Callbacks and the training loop, covering checkpoint writing, logging and the callbacks that reach the network during fit Repository configuration and the PyPI release pipeline for keras and tf-keras , which Google prices under its separate supply-chain category Out of scope Loading a model from an untrusted source with safe_mode=False , which the project documents as unsafe and places out of scope Adversarial-example, model-poisoning and other ML-robustness research, which the program routes to the Google AI VRP rather than the OSS VRP Backend framework bugs that actually belong to TensorFlow, JAX or PyTorch rather than to Keras Notebook and tutorial code shipped alongside the library Application-level misuse of the saving API by the caller Any other repository in the keras-team org, which the tier file does not list and which pays nothing for a product vulnerability after the April 2026 rules update Defects that only reproduce on a release the projects no longer ship, since the program covers the latest versions Reports filed by anyone other than the finder: Google wants the submission through bughunters.google.com under the researcher's own identity, and it does not pay Google or Google Partner employees Rewards to researchers on a sanctions list, in a sanctioned territory, or located in Russia or Belarus, which Google states it cannot issue Most-valued findings A safe_mode bypass that reaches arbitrary code execution while the guard is enabled: code execution is 45% of Keras's profile, ten of its thirteen CVEs are this shape, and it is the class that reaches the top of the $3,133.70 band because it fires on a model file a victim intended to load Lambda layer or custom-object resolution that resolves to a callable the archive chose rather than one the loading process registered Config-driven layer reconstruction that instantiates a class outside the allowlist, which is the reconstruction step the guard is meant to constrain A path that only exists on one backend, since multi-backend dispatch means a bypass closed on the TensorFlow route may still be open through JAX or PyTorch keras.utils.get_file extraction flaws such as path traversal out of the destination directory, which is the access-control share landing as arbitrary file write Legacy HDF5 loading defects, because older .h5 checkpoints circulate widely and are loaded by the same modern code path Program rules Submit through sorona.xyz first. We validate, coordinate with the program's security team, and add the payout uplift on top of whatever it awards. Keras and tf-keras are both rated TIER_OT1, so a finding has to land in one of those two repositories, and product vulnerabilities cap at $3,133.70 The $13,337 figure quoted for OT1 is the supply-chain-compromise category, covering the repository or release pipeline rather than a code vulnerability in the repo Loading a model with safe_mode=False is out of scope: turning the guard off is documented as unsafe, so the finding has to defeat the guard while it is on Google may route your report to its AI VRP instead of handling it under the open-source rules, which changes who assesses it and against which criteria The award is set by a discretionary panel, so the band is a range rather than a fixed table and a report that spells out real impact is what moves you up it Take the flaw to Google before anyone else: the VRP treats private disclosure to a third party for purposes other than fixing the bug as grounds to refuse the reward Disclosure Coordinated through Google Bug Hunters, with fixes landing in the keras and tf-keras repositories and an advisory published against the PyPI packages: the recent CVE stream has followed that pattern closely. Because the program's rules can be read as barring a third-party hand-off before the fix, file with Google directly and hold the detail: a live safe_mode bypass is immediately weaponisable against any public model hub. Safe harbor Sorona will not pursue legal action against you for good-faith research submitted to us in line with this policy. We cannot speak for the upstream project, its vendor, or any third party, and we do not grant authorization on their behalf. You are responsible for understanding and following the laws that apply to you, wherever you are, and for staying within any scope the project has defined. Submit a vulnerability