Git Hash Chain Malleability
تثبت هذه الورقة أن هاشات (hashes) التزام Git قابلة للتلاعب، مما يسمح للمهاجمين بإنشاء التزامات متميزة ذات محتوى متطابق، وتوقيعات صالحة، وشارات "موثقة" (Verified) عبر استغلال الانعكاس الجبري في ECDSA، وإدراج الحزم الفرعية لـ OpenPGP غير الموشومة (unhashed)، وإعادة ترميز طول DER غير القانوني (non-canonical)، مما يقوض الافتراضات الأمنية لتثبيت التبعيات القائم على الهاش وبناء البرمجيات القابل لإعادة الإنتاج.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل الإنترنت كمكتبة عالمية ضخمة حيث تُخزن كل الكتب، وكل الوصفات، وكل أدلة التعليمات في خزنة رقمية. وللحفاظ على تنظيم هذه المكتبة، يحصل كل عنصر على بطاقة هوية فريدة مكونة من رمز خاص. في عالم تطوير البرمجيات، يُسمى هذا النظام Git. فكر في الـ "commit" (الإيداع) كلقطة لمشروع في لحظة زمنية محددة — مثل التقاط صورة لقلعة ليجو قمت ببنائها للتو. وللتأكد من عدم تسلل أي شخص لاستبدال طوبة بأخرى بلاستيكية، يمكن للمطورين "توقيع" صورهم بختم رقمي، مثل الختم الشمعي على الرسالة. هذا الختم يثبت: "نعم، أنا من بنى هذا، ولم يغيره أحد".
الفكرة الكبرى وراء هذا النظام هي الثقة من خلال التفرد. إذا كنت تملك رمز الهوية الفريد للصورة، فيجب أن تكون قادراً على العثين على تلك الصورة بالضبط ومعرفة أنها لم تُعدل. الأمر يشبه قول: "إذا كانت بطاقة الهوية تقول 'القلعة أ'، فإن 'القلعة أ' هي الشيء الوحيد في العالم الذي ينطبق عليه هذا الوصف". هذه الثقة قوية جداً لدرجة أن الحواسيب تستخدم رموز الهوية هذه للتحقق تلقائياً مما إذا كان البرنامج آمناً، ولتثبيت إصدارات محددة من الكود حتى لا تتعطل، ولإثبات من بنى ماذا بالضبط. إذا كان رمز الهوية فريداً وغير قابل للتغيير، فإن النظام بأكمعه يعمل كآلة جيدة التشحيم. ولكن ماذا يحدث إذا استطاع شخص ما أخذ صورة موقعة وجيدة تماماً، وتغيير الختم الشمعي بشكل طفيف جداً، والحصول على بطاقة هوية جديدة تماماً لا تزال تثبت أن الصورة حقيقية؟ هذا هو السؤال الذي يطرحه هذا البحث.
عملية تبديل الهوية الرقمية الكبرى
في هذا البحث، اكتشف باحث يدعى جاكوب جينيسين خدعة ماكرة تكسر قاعدة "صورة واحدة، هوية واحدة" في نظام Git. لقد أظهر أنه يمكن للمهاجم، دون الحاجة إلى سرقة مفاتيح التوقيع السرية أو كسر الرياضيات وراء الأختام الرقمية، إنشاء بطاقة هوية ثانية ومختلفة تماماً لنفس قطعة البرمجيات بالضبط.
إليك الخدعة السحرية: يأخذ المهاجم "commit" موقعاً (صورة مع ختم شمعي) ويقوم بتعديل الختم بطريقة تبدو مختلفة للحاسوب ولكنها تعني الشيء نفسه تماماً للإنسان. الأمر يشبه أخذ ختم شمعي والضغط عليه بشكل مختلف قليلاً، أو كتابة نفس الرسالة على ورقة ولكن باستخدام خط مختلف. المحتوى الخاص بالصورة لم يتغير على الإطلاق — قلعة الليجو متطابقة. الختم لا يزال يثبت هوية المؤلف. ولكن لأن "مظهر" الختم تغير، يقوم الحاسوب بإنشاء بطاقة هوية جديدة تماماً لها.
الجزء المخيف؟ أن أنظمة الكمبيوتر التي تتحقق من هذه الهويات (مثل GitHub) تقول: "مهلاً، هذا الختم صالح! هذا إيداع موثق!" وتمنحه شارة خضراء لامعة بعنوان "Verified" (موثق). الآن، لديك بطاقتان مختلفتان للهوية لنفس قلعة الليجو بالضبط. إحداهما تقول "القلعة أ"، والأخرى تقول "القلعة ب". كلتاهما موقعتان من قبل نفس الشخص، وكلتاهما تحمل علامة "موثق".
الطرق الثلاث لخداع النظام
يشرح البحث ثلاث طرق مختلفة للقيام بهذه الخدعة، اعتماداً على نوع الختم الرقمي المستخدم:
- القلب الرياضي (لـ ECDSA): تخيل خط أعداد حيث لديك رقماً، وليكن 5. في هذه اللعبة الرياضية المحددة، الرقم 5 والرقم "الإجمالي ناقص 5" هما في الواقع نفس الشيء. يقوم المهاجم فقط بقلب الرقم الموجود على الختم. يبدو مختلفاً، لكن الرياضيات تقول إنه لا يزال توقيعاً صالحاً.
- الملاحظة المخفية (لـ RSA و EdDSA): تخيل رسالة مختومة. الختم يغطي الرسالة الرئيسية، ولكن هناك جيب صغير في الخلف ليس مختوماً. يقوم المهاجم بتمرير ملاحظة صغيرة غير ضارة في هذا الجيب. الرسالة الرئيسية لم تُمس، والختم لا يزال صالحاً، ولكن الرسالة الآن لها وزن وشكل مختلف قليلاً، مما يغير بطاقة الهوية.
- الخط المزخرف (لـ S/MIME): تخيل كتابة رقم مثل "32". يمكنك كتابتها كـ "32" أو كـ "0x20". كلاهما يعني الشيء نفسه، ولكن أحدهما هو الطريقة "القياسية" والآخر هو الطريقة "المزخرفة". الحاسوب الذي يتحقق من الرسالة (GitHub) يتساهل قليلاً ويقبل الخط المزخرف، لكن حاسوباً أكثر صرامة (مثل حاسوبك المحمول الشخصي) قد يرتبك ويقول: "مهلاً، هذه ليست الطريقة القياسية!".
لماذا هذا مهم: مشكلة "الشبح"
قد تفكر: "وما الفائدة؟ إذا كانت القلعة هي نفسها، فمن يهتم إذا كانت بطاقة الهوية مختلفة؟" ولكن في العالم الرقمي، بطاقة الهوية هي القلعة.
- مشكلة الحارس: تخيل حارساً عند ملهى ليلي لديه قائمة بالهويات المحظورة. إذا كنت محظوراً، فلا يمكنك الدخول. ولكن إذا صنع المهاجم "هوية شبح" لنفس الشخص ليست مدرجة في قائمة المحظورين، فإن الحارس يسمح له بالدخول. يمكن للمهاجم تمرير كود خبيث عبر فلاتر الأمان بمجرد تغيير بطاقة الهوية.
- مشكلة المرآة: تخيل مرآتين تواجهان بعضهما البعض. إحداهما تظهر القلعة الحقيقية؛ والأخرى تظهر "قلعة شبح" تبدو مطابقة تماماً ولكن لها اسم مختلف. إذا كنت تنظر إلى المرآة الخطأ، فقد تعتقد أنك ترى الأصل، بينما أنت في الواقع ترى نسخة يسيطر عليها المهاجم.
- السلسلة المكسورة: بما أن كل قلعة ليجو جديدة في السلسلة تُبنى فوق السابقة، فإن تغيير هوية قلعة واحدة يغير هوية كل قلعة بُنيت بعدها. هذا يخلق "تفرعاً" في التاريخ. ينتهي بك الأمر بجدولين زمنيين متوازيين: أحدهما بالهوية الأصلية والآخر بهوية الشبح. كلاهما يبدو حقيقياً، وكلاهما موقع، لكنهما مختلفان.
الحكم النهائي
يثبت البحث أن شارة "Verified" (موثق) على هاش الـ commit ليست ضماناً فريداً للمحتوى. الأمر يشبه امتلاك ختم "موثق" على جواز سفر لا يضمن أنك الشخص الوحيد الذي يملك هذا الوجه؛ بل يضمن فقط أن الختم حقيقي.
قام المؤلف ببناء أداة يمكنها القيام بهذه الخدعة تلقائياً لأي "commit" موقع. لقد اختبر ذلك على GitHub، والموقع قبل بكل سرور "إيداعات الشبح"، ومنحها شارات "Verified" الخاصة بها. هذا يعني أن الأنظمة التي تعتمد على بطاقات الهوية هذه لحظر السيئين، أو لتثبيت إصدارات البرامج، أو لإثبات من بنى ماذا، هي أنظمة معرضة للخطر. الحل ليس في التوقف عن التوقيع؛ بل في التأكد من أن الحواسيب التي تتحقق من الأختام صارمة بما يكفي لتقول: "لا، هذا ليس نفس الختم الذي رأيناه من قبل بالضبط"، وأن تتحقق من المحتوى الفعلي، وليس مجرد بطاقة الهوية.
باخت-القول، الـ "commit" الموقع هو وعد، لكن البحث يظهر أن الوعد يمكن كتابته بطريقة تخلق نسخة "شبح" من نفسه، مما يخدع الأنظمة التي من المفترض أن تحافظ على سلامتنا.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.