الخلاصة

  • أقرّت DigiCert بأن بعض عمليات التحقق من النطاق بطريقة CNAME نُفِّذت دون بادئة الشرطة السفلية التي تقتضيها الطريقة، وهو خلل تقول إنه أصاب نحو 0.4% من عمليات التحقق من النطاق ذات الصلة.
  • ثم طبّقت على نفسها قاعدة الإبطال خلال 24 ساعة الصادرة عن CA/Browser Forum، وأعادت حساب المهلة من حدث بداية مختلف، وأرجأت الإبطال بما يصل إلى 120 ساعة حتى 3 أغسطس 2024 الساعة 19:30 UTC، وهو موعد لم يكن يقدر على تحريكه سواها.

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

مسار CNAME لدى DigiCert كان مخالفاً. كتبت الشركة على صفحة الحادثة الخاصة بها: «Recently, we learned that we did not include the underscore prefix with the random value used in some CNAME-based validation cases» (صفحة حادثة DigiCert).

الشرطة السفلية ليست زينة. في التحقق بطريقة CNAME ينشر مقدّم الطلب قيمة عشوائية في سجل DNS تحت وسم يحمل البادئة، ثم تقرأها الجهة المُصدِرة؛ وإذا غابت البادئة فلم يعد الفحص المنفَّذ هو الفحص المحدَّد. وتضع DigiCert النطاق عند نحو 0.4% من عمليات التحقق من النطاق ذات الصلة (صفحة حادثة DigiCert). هذه النسبة هي رقم المشغّل الذي نشره بنفسه، ولم يظهر في المواد التي فُحصت هنا أي إحصاء مستقل للشهادات أو العملاء المتأثرين.

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

في 29 يوليو 2024 الساعة 02:17 UTC قدّمت الشركة تقرير حادثة أوّلياً، وفي الساعة 22:36 UTC من اليوم نفسه أرسلت إشعار الإبطال، وقد جاء فيه: «The 24-hour revocation rule applies in this circumstance as the issue impacts domain validation» (Mozilla Bugzilla 1910322). نص المتطلبات الأساسية الصادر عن CA/Browser Forum لم يُقرأ في هذا التقرير؛ فالقاعدة ترد هنا كما وصفتها DigiCert فقط، ولا شيء أدناه يستنتج أن التمديد وافق القاعدة أو خالفها.

الوثيقة التالية هي التي تُظهر العدّاد، وتحوّله في الوقت نفسه إلى قرار: «The 24 hours expired at 22:36 - 24 hours from when we had the serial numbers» (Mozilla Bugzilla 1910805). هذه الجملة تثبّت مهلة، وتكشف في الحركة نفسها أنها تقوم على اختيار: أي حدث يفتح الساعات الأربع والعشرين. وتقرير DigiCert نفسه يشير إلى هذا الغموض دون أن يحسمه.

ما جرى بعد ذلك لم يكن مهلة فائتة، بل مهلة منقولة. يسجّل التقرير ذاته قراراً بتأجيل الإبطال بما يصل إلى 120 ساعة، اتُّخذ بعد مناقشات تناولت تأثير ذلك على العملاء وإجراءات قانونية محتملة وظروفاً استثنائية (Mozilla Bugzilla 1910805). ولا يظهر في الوثائق أي طرف خارجي وافق على القرار أو أمر به أو نقضه.

وقد استقرّ الموعد البديل على صفحة الحالة: «All certificates impacted by this incident, regardless of circumstances, will be revoked no later than Saturday, August 3rd 2024, 19:30 UTC» (DigiCert Status). ويسجّل التسلسل نفسه أن شهادات TLS المحددة أُبطلت في 3 أغسطس 2024 عند نحو 19:30 UTC. هذه أوقات المشغّل؛ ولم يُتحصَّل على تأكيد مستقل لإبطال أرقام التسلسل المتأثرة، فسجل الإبطال هنا هو كلمة الطرف المُلزَم عن عمل الطرف المُلزَم.

وثمة أثر أخير يستحق نظرة ثانية، لأنه يُبيّن ما هي صفحة الحادثة العلنية في حقيقتها. نُشرت الصفحة في 29 يوليو 2024، وتحمل إشارة تحديث بتاريخ 4 أغسطس 2024، وهي تطلب اليوم من العملاء المتأثرين استبدال شهاداتهم قبل 9 أغسطس 2024 الساعة 20:30 UTC (صفحة حادثة DigiCert). هذه التعليمات تحديث لاحق، وليست المهلة الأصلية. من يقرأها اليوم يرى النسخة المستقرّة من وثيقة أُعيدت كتابتها والحادثة ما زالت جارية.

وما لا يوجد في هذا الملف هو حكم خارجي. لا يظهر في الوثائق الأربع التي فُحصت لهذا التقرير — صفحة حادثة DigiCert وتقريراها على Bugzilla وسجل الحالة — أي إجراء إنفاذ من برنامج جذر Mozilla أو من مصنّع متصفح، ولا أي تصويت، ولا أي نتيجة لاحقة؛ وهذا النص لا يؤكد أي مآل إنفاذي.

الأجزاء الموثوقة من هذا الإصلاح حقيقية. رقم تسلسل مُبطَل يمكن رصده، وشهادة منتهية لا تتصل، وتعليمات الاستبدال يمكن تنفيذها. أما الأجزاء التي لا يمكن التحقق منها من الخارج فهي تحديداً التي حسمت الجدول: أي حدث بدأ العدّاد، ولماذا بلغ التمديد خمسة أيام لا يوماً واحداً، وهل وافقت أي جهة تملك سلطة على القاعدة. ولمؤسسة DigiCert, Inc. مدخل في دليل هذه النشرة؛ والمدخل يصف حضوراً مؤسسياً، لا حكماً على ممارسات التحقق.

يُظهر السجل مشغّلاً أفصح بسرعة، ودافع عن موقفه علناً، ثم التزم المهلة التي كتبها لنفسه. ويُظهر أيضاً أن المهلة تحرّكت لأن الطرف المُلزَم حرّكها.