ثغرة gnark بدرجة 7.5 تتيح إثباتات غير صحيحة وإصدار 0.16.5 يعالجها
الحقائق الرئيسية
نشرت Consensys في 9 نوفمبر 2026 استشارية أمنية صنفتها بدرجة High، ومنحتها درجة CVSS تبلغ 7.5 من 10، بشأن خلل في الضرب القياسي داخل دائرتي BLS12-381 G1 وBW6-761 G1 في مكتبة gnark. وقالت الاستشارية إن مثبتاً خبيثاً يستطيع جعل العملية ScalarMul(P, s) تعيد نقطة لا تساوي النتيجة الرياضية المتوقعة [s]P. وأظهر مُبلّغ الثغرة تزويرات كاملة لإثباتات Groth16 على المنحنيين، ما يضع سلامة الدوائر التي تعتمد المكونات المتأثرة في صلب المسألة. وحددت الاستشارية متجه الهجوم عبر الشبكة، مع تعقيد منخفض وعدم الحاجة إلى صلاحيات. وأصدر المشروع gnark v0.16.5 في اليوم نفسه، وأوصى جميع المستخدمين بالترقية إليه.
يمتد نطاق التأثر إلى الإصدارات الأقدم من 0.16.5، فيما يبدأ الإصلاح في v0.16.5 وما بعده. وحدد المشروع مسارات وصول الخلل عبر واجهات الضرب القياسي ScalarMul وScalarMulBase وJointScalarMul وMultiScalarMul، وكذلك عبر مكوّن G1MSM المرتبط بـEIP-2537. وذكر أن دوائر KZG وPLONK واستدلال Groth16 على المنحنيين المعنيين قد تصل إلى الخلل، إلى جانب واجهات أخرى للضرب القياسي. وفي مسار BLS12-381 يمر الهجوم عبر مكوّن G1MSM، بينما يمر على BW6-761 عبر واجهة ScalarMul العامة. ويعني ذلك أن نطاق المراجعة العملي يشمل الدوائر التي تستخدم هذه المكونات تحديداً، لا افتراض تأثر كل تطبيق يستخدم gnark بالطريقة نفسها.
عزت الاستشارية الخلل إلى سببين مستقلين. الأول إضافة استثنائية داخل حلقة GLV الكلاسيكية، والثاني غياب فحص يثبت أن نقطة الإدخال تنتمي إلى المجموعة الجزئية الصحيحة. وشرح المشروع أن إصلاح الحلقة يضيف نقطة إزاحة ثابتة صغيرة الرتبة إلى المُجمّع، حتى لا تقع أي خطوة من خطوات الحلقة في الحالة الاستثنائية لأي تحليل. كما يفرض الإصلاح التحقق من انتماء نقطة الإدخال إلى المجموعة الجزئية. وبحسب الاستشارية، لا يوجد حل بديل للمشكلة الأولى سوى الترقية؛ أما المشكلة الثانية، فتوصي بفحص عضوية كل نقطة إدخال في المجموعة الفرعية قبل تنفيذ الضرب القياسي.
ولا يقتصر إصدار v0.16.5 على معالجة الخلل الرئيسي، إذ شمل إصلاحات سلامة أخرى في مكوّن الضرب القياسي المتعدد BLS12-381 G2، ودالة SHA-3 FixedLengthSum، والتحقق من المفاتيح العامة لـEdDSA. وتؤثر هذه الإصلاحات في أنظمة القيود التي تبنيها الدوائر، ولذلك قد تترتب على الترقية خطوات تشغيلية تتجاوز تحديث المكتبة. وقال المشروع إن المستخدمين سيحتاجون على الأرجح إلى إعادة تجميع الدوائر، وإجراء إعداد جديد، وإعادة نشر أدوات التحقق على السلسلة. وبالنسبة إلى مستخدمي Groth16 تحديداً، دعا الإصدار إلى إجراء إعداد جديد خاص بكل دائرة ثم إعادة نشر أدوات التحقق على السلسلة. وتربط هذه الخطوات بين إصلاح الشيفرة والحاجة إلى تحديث إعدادات التحقق المستخدمة من الدوائر المتأثرة.
gnark مكتبة مفتوحة المصدر بلغة Go تقدم واجهة عالية المستوى لتصميم دوائر zk-SNARK. ويعرّف معيار EIP-2537 عمليات على منحنى BLS12-381، من بينها عمليات الضرب القياسي المتعدد التي يمكن استخدامها لتجميع المفاتيح العامة أو التوقيعات. ووفق خارطة طريق Ethereum، يُستخدم هذا المنحنى في طبقة الإجماع، كما تستفيد من عملياته على السلسلة تطبيقات تشمل مجمعات التخزين وإعادة التخزين والعملاء الخفيفين والجسور وإثباتات المعرفة الصفرية. وفي هذا السياق، يتعلق الإفصاح بخلل في مكونات محددة من مكتبة لبناء الدوائر، وقد يمتد أثره إلى الدوائر التي تستخدم تلك المكونات. أما الاستشارية المنشورة في 7 أكتوبر فكانت منفصلة: تناولت غياب فحص on-curve في مسار fake-GLV، وأثرت في الإصدارات الأقدم من v0.16.4، ووصفت إمكان تزوير توقيعات ECDSA على منحنيات محددة؛ وقد أُصلحت في v0.16.4.