
CVE-2026-9335: KerasFileEditor और load_weights h5py ExternalLinks का अनुसरण करते हैं, जिससे keras ≤ 3.14.0 में मनमानी स्थानीय HDF5 फ़ाइल सामग्री का खुलासा होता है। परामर्श + सत्यापित PoCs।
ExternalLink स्थानीय फ़ाइल-सामग्री प्रकटीकरणदो सार्वजनिक Keras API — keras.saving.KerasFileEditor और
keras.saving.load_weights / — HDF5 समूह सदस्यों को
द्वारा लिंक-प्रकार की जाँच के बिना पढ़ते हैं। h5py
अनुक्रमण पर / को करता है,
इसलिए हमलावर द्वारा आपूर्ति किया गया ,
, या फ़ाइल जिसमें केवल एक लिंक होता है, Keras को पीड़ित के स्थानीय
फ़ाइल सिस्टम पर की सामग्री पढ़ने का कारण बनता है।
model.load_weightsExternalLinkSoftLink.weights.h5.h5.kerasKeras पहले से ही सही गार्ड (
safe_get_h5_group/safe_get_h5_datasetinsaving_lib.py) शामिल करता है — ये दो प्रवेश बिंदु बस इसे कॉल नहीं करते हैं।
| CVE | CVE-2026-9335 |
| प्रभावित | keras-team/keras ≤ 3.14.0 (PyPI) |
| प्रकार | पथ ट्रैवर्सल / सूचना एक्सपोज़र (CWE-22, CWE-200) |
| CVSS 3.1 | AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N → 6.5 (मध्यम) |
| प्रभाव | पीड़ित द्वारा पढ़ी जा सकने वाली किसी भी स्थानीय HDF5 फ़ाइल का प्रकटीकरण |
| वेक्टर | पीड़ित एक दुर्भावनापूर्ण .weights.h5 / .h5 / .keras फ़ाइल खोलता/लोड करता है |
| स्थिति | keras 3.15.0 में ठीक किया गया (PR #22899 / #22900); huntr पर मान्य (2026-05-22, अनुरक्षक hertschuh) |
| रिपोर्टर | जोनाथन पापारो (jonathan-paparo) |
| पथ | यह क्या है |
|---|---|
advisory/CVE-2026-9335.md | पूर्ण तकनीकी लेख: मूल कारण, दोनों साइटें, PoC आउटपुट, फिक्स |
poc/poc_file_editor.py | PoC 1 — KerasFileEditor एक ExternalLink का अनुसरण करता है और पीड़ित h5 लीक करता है |
poc/poc_load_weights.py | PoC 2 — model.load_weights ExternalLink के माध्यम से पीड़ित के वेट्स खींचता है |
poc/requirements.txt | पिन किया गया पुनरुत्पादन वातावरण |
docs/timeline.md | समन्वित प्रकटीकरण समयरेखा |
# keras/src/saving/saving_api.py (load_weights, legacy .h5 branch)
with h5py.File(filepath, "r") as f:
if "layer_names" not in f.attrs and "model_weights" in f:
f = f["model_weights"] # <-- ExternalLink here is auto-dereferenced by h5py
f["model_weights"] (और file_editor.py में समान data[key] वॉक)
पारदर्शी रूप से एक लिंक का अनुसरण करके दूसरी फ़ाइल में जाता है। Keras द्वारा
अन्यत्र उपयोग किया जाने वाला सुरक्षित पैटर्न पहले लिंक प्रकार की जाँच करता है:
# keras/src/saving/saving_lib.py (safe_get_h5_group)
group_type = parent.get(name, default=None, getclass=True, getlink=True)
if group_type in (h5py.ExternalLink, h5py.SoftLink):
raise ValueError(f"Not allowed: H5 file with {group_type.__name__}")
python -m pip install -r poc/requirements.txt
# PoC 1 — KerasFileEditor leaks a separate victim h5 file's contents
KERAS_BACKEND=jax python poc/poc_file_editor.py
# PoC 2 — model.load_weights loads a victim file's weights via an ExternalLink
KERAS_BACKEND=jax python poc/poc_load_weights.py
प्रत्येक PoC सिस्टम अस्थायी निर्देशिका के अंतर्गत अपनी स्वयं की अस्थायी "पीड़ित" और
"हमलावर" h5 फ़ाइलें बनाता है, लीक प्रदर्शित करता है,
*** VULNERABILITY CONFIRMED *** प्रिंट करता है, और अपने बाद स्वयं सफाई करता है।
keras==3.14.0, Python 3.12.6, JAX बैकएंड पर सत्यापित।
दोनों साइटों को मौजूदा safe_get_h5_group हेल्पर के माध्यम से रूट करें, या एक
data.get(key, default=None, getclass=True, getlink=True) प्री-चेक जोड़ें जो
अनुक्रमण से पहले (h5py.ExternalLink, h5py.SoftLink) को अस्वीकार करता है। सटीक
डिफ्स के लिए advisory देखें।
यह सामग्री समन्वित प्रकटीकरण और CVE असाइनमेंट के बाद रक्षात्मक और शैक्षिक उद्देश्यों के लिए प्रकाशित की गई है। PoCs केवल उन फ़ाइलों पर काम करते हैं जिन्हें वे स्वयं एक अस्थायी निर्देशिका में बनाते हैं। इन तकनीकों का उपयोग उन सिस्टमों या डेटा के विरुद्ध न करें जिन्हें आप परीक्षण करने के लिए अधिकृत नहीं हैं।
जोनाथन पापारो द्वारा खोजा और रिपोर्ट किया गया (huntr:
jonathan-paparo)। keras-team अनुरक्षक
hertschuh द्वारा मान्य किया गया।