
Google Keras 3.0.0 से 3.13.0 तक के सभी प्लेटफार्मों पर HDF5 वेट लोडिंग घटक में सीमाओं या थ्रॉटलिंग के बिना संसाधनों का आवंटन, एक दूरस्थ हमलावर को एक क्राफ्टेड .keras फ़ाइल के माध्यम से मेमोरी समाप्ति और Python इंटरप्रेटर के क्रैश के जरिए डिनायल ऑफ सर्विस (DoS) उत्पन्न करने की अनुमति देता है।
| क्षेत्र | विवरण |
|---|---|
| CVE ID | CVE-2026-0897 |
| पैकेज | keras (Google Keras) |
| रजिस्ट्री | PyPI |
| प्रभावित संस्करण | 3.0.0 से 3.13.0 (सम्मिलित) |
| भेद्यता प्रकार | CWE-770: सीमा या थ्रॉटलिंग के बिना संसाधनों का आवंटन |
| CVSS स्कोर | 7.1 उच्च (CVSS 4.0, CNA: Google Inc.) |
| CVSS वेक्टर | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N |
| आक्रमण वेक्टर | नेटवर्क |
| आक्रमण जटिलता | निम्न |
| आवश्यक विशेषाधिकार | कोई नहीं |
| उपयोगकर्ता इंटरैक्शन | निष्क्रिय (पीड़ित एक मॉडल फ़ाइल लोड करता है) |
| उपलब्धता पर प्रभाव | उच्च |
| गोपनीयता पर प्रभाव | कोई नहीं |
| अखंडता पर प्रभाव | कोई नहीं |
| NVD प्रकाशित | 15 जनवरी, 2026 |
| NVD अंतिम संशोधित | 23 जनवरी, 2026 |
| स्रोत / CNA | Google Inc. |
| रिपोर्टकर्ता | HyperPS (Sarvesh Patil) via huntr.dev / GHSA |
| फ़िक्स स्थिति | विलय — PR #21880 |
Google Keras संस्करण 3.0.0 से 3.13.0 (सभी प्लेटफ़ॉर्म पर) के HDF5 वज़न लोडिंग घटक में एक सेवा अस्वीकार (Denial of Service) भेद्यता मौजूद है। यह भेद्यता इसलिए होती है क्योंकि .keras आर्काइव के अंदर घोषित HDF5 डेटासेट आकार मेटाडेटा को संसाधित करते समय कोई सत्यापन या थ्रॉटलिंग नहीं की जाती।
HDF5 प्रारूप डेटासेट को अपने आकार (टेंसर आयाम) को मेटाडेटा के रूप में घोषित करने की अनुमति देता है। जब Keras .keras आर्काइव से मॉडल वज़न लोड करता है, तो वह इस घोषित आकार को पढ़ता है और डेटा स्थानांतरित होने से पहले मेमोरी का एक संगत ब्लॉक आवंटित करने का प्रयास करता है। चूंकि Keras आवंटन से पहले घोषित आकार पर कोई सीमा जांच नहीं करता, एक हमलावर model.weights.h5 फ़ाइल बना सकता है जो एक खगोलीय रूप से बड़ा आकार घोषित करती है — उदाहरण के लिए (1000000, 1000000, 1000000) — जिससे Keras पेटाबाइट-स्तरीय मेमोरी आवंटन का प्रयास करता है। यह सभी उपलब्ध सिस्टम मेमोरी को समाप्त कर देता है और Python इंटरप्रेटर को क्रैश कर देता है।
मॉडल लोड होने के बाद किसी अनुमान या अतिरिक्त इंटरैक्शन की आवश्यकता नहीं है। हमला लोड होने के समय पूरी तरह से सक्रिय हो जाता है।
| फ़ाइल | विवरण |
|---|---|
keras/src/saving/file_editor.py | KerasFileEditor._extract_weights_from_store() — HDF5 डेटासेट आकार पढ़ता है और आकार सत्यापन या थ्रॉटलिंग के बिना मेमोरी आवंटित करता है |
भेद्यता विशेष रूप से KerasFileEditor वर्ग में स्थित है, जो .keras आर्काइव में एम्बेडेड HDF5 स्टोर से मॉडल वज़न टेंसर को डिसीरियलाइज़ करने के लिए जिम्मेदार है।
| मीट्रिक | मान | अर्थ |
|---|---|---|
| आक्रमण वेक्टर (AV) | नेटवर्क | दूरस्थ रूप से एक वितरित मॉडल फ़ाइल के माध्यम से शोषणीय |
| आक्रमण जटिलता (AC) | निम्न | कोई विशेष शर्तें या रेस स्थितियाँ आवश्यक नहीं |
| आक्रमण आवश्यकताएँ (AT) | कोई नहीं | कोई पूर्व-आवश्यक तैनाती कॉन्फ़िगरेशन आवश्यक नहीं |
| आवश्यक विशेषाधिकार (PR) | कोई नहीं | कोई प्रमाणीकरण या खाता आवश्यक नहीं |
| उपयोगकर्ता इंटरैक्शन (UI) | निष्क्रिय | पीड़ित को दुर्भावनापूर्ण .keras आर्काइव लोड करना होगा |
| कमजोर सिस्टम उपलब्धता (VA) | उच्च | Python इंटरप्रेटर क्रैश हो जाता है; सेवा पूरी तरह से अनुपलब्ध हो जाती है |
| कमजोर सिस्टम गोपनीयता (VC) | कोई नहीं | कोई डेटा प्रकटीकरण नहीं |
| कमजोर सिस्टम अखंडता (VI) | कोई नहीं | कोई डेटा संशोधन नहीं |
| बाद के सिस्टम पर प्रभाव (SC/SI/SA) | कोई नहीं | प्रभाव लोडिंग प्रक्रिया तक सीमित है |
.keras मॉडल आर्काइव लोड करती है, कमजोर है| संदर्भ | जोखिम |
|---|---|
सार्वजनिक मॉडल सेवा APIs जो उपयोगकर्ता-अपलोड की गई .keras फ़ाइलों को स्वीकार करती हैं | हमलावर एकल अनुरोध के साथ अनुमान सेवा को क्रैश कर देता है |
| सामुदायिक मॉडल डाउनलोड होस्ट करने वाले ML प्लेटफ़ॉर्म (जैसे Hugging Face) | ज़हरीला मॉडल किसी भी शोधकर्ता के लिए DoS का कारण बनता है जो इसे डाउनलोड और लोड करता है |
| संघीय शिक्षण (Federated Learning) वातावरण | दुर्भावनापूर्ण प्रतिभागी समन्वयक या सहकर्मी नोड्स को क्रैश करने के लिए एक तैयार वज़न फ़ाइल वितरित करता है |
| CI/CD पाइपलाइनें जो मॉडल चेकपॉइंट लोड करती हैं | एक समझौता या प्रतिस्थापित चेकपॉइंट पाइपलाइन विफलता और अनुपलब्धता का कारण बनता है |
| चैटबॉट या NLP सेवाएँ जो रनटाइम पर मॉडल को हॉट-रीलोड करती हैं | एकल दुर्भावनापूर्ण रीलोड अनुरोध सेवा को नीचे लाता है |
HDF5 फ़ाइल प्रारूप टेंसर मेटाडेटा — जिसमें आकार घोषणाएँ शामिल हैं — को वास्तविक डेटा बाइट्स से अलग संग्रहीत करता है। जब KerasFileEditor._extract_weights_from_store() एक डेटासेट प्रविष्टि का सामना करता है, तो वह घोषित आकार पढ़ता है और डिस्क से कोई डेटा पढ़ने से पहले संबंधित आयामों का NumPy सरणी पूर्व-आवंटित करने के लिए कॉल करता है।
क्योंकि आकार मेटाडेटा है, एक न्यूनतम HDF5 फ़ाइल एक ऐसा आकार घोषित कर सकती है जिसके लिए पेटाबाइट्स मेमोरी की आवश्यकता होगी, जबकि फ़ाइल स्वयं केवल कुछ किलोबाइट आकार की रहती है। फ़ाइल आकार और आवंटन आकार का अनुपात इसे एक अत्यधिक प्रभावी प्रवर्धन हमला बनाता है।
(1000000, 1000000, 1000000) जैसा आकार 32-बिट फ़्लोट डेटाटाइप के साथ लगभग 4,000 पेटाबाइट मेमोरी का अनुरोध करेगा। OS आउट-ऑफ-मेमोरी किलर या Python आवंटनकर्ता लगभग तुरंत प्रक्रिया को क्रैश कर देगा।
# keras/src/saving/file_editor.py (pre-fix, simplified)
def _extract_weights_from_store(self, h5_file, inner_path=""):
for key in h5_file.keys():
obj = h5_file[key]
if isinstance(obj, h5py.Dataset):
# Shape is read from metadata — no validation performed
shape = obj.shape
# NumPy attempts to allocate based on declared shape
data = np.zeros(shape, dtype=obj.dtype) # VULNERABLE: unbounded allocation
np.zeros() को कॉल करने से पहले shape पर किसी भी जांच का अभाव मूल कारण है।
यह जानकारी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रदान की गई है। उन सिस्टमों पर परीक्षण न करें जिनके आप मालिक नहीं हैं या जिनका परीक्षण करने के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
.keras आर्काइव बनाना# generate_shape_bomb.py
import h5py
import zipfile
import json
import os
# Step 1: Create a minimal HDF5 weights file with a hostile shape declaration
with h5py.File("model.weights.h5", "w") as f:
grp = f.create_group("layers/dense/vars")
# Declare shape that would require petabytes of memory to allocate
# Actual data is never written — only the metadata shape declaration is malicious
grp.create_dataset(
"0",
shape=(0,), # actual stored data: empty
maxshape=(None,),
dtype="float32",
data=[]
)
# Override shape metadata to declare hostile dimensions
# (achieved via direct HDF5 attribute manipulation in a real attack)