يونيكود معقد بشكل استثنائي. قليل من الناس يعرفون
كل الحيل : من الشخصيات غير المرئية وشخصيات التحكم إلى الأزواج البديلة والرموز التعبيرية المدمجة (عند إضافة حرفين تحصل على الثلث). يتضمن المعيار 2
16 وظيفة رمز في 17
طائرة . في الواقع ، يمكن مقارنة تعلم Unicode بتعلم لغة برمجة منفصلة.
ليس من المستغرب أن يتجاهل مطورو الويب بعض الفروق الدقيقة. من ناحية أخرى ، يمكن للمهاجمين استخدام ميزات Unicode لأغراضهم الخاصة ، وهو ما يفعلونه.
أظهر متخصص الأمن John Gracie
مثالًا على خطأ التحقق من بريد
GitHub لاستعادة كلمة المرور المنسية. يمكن العثور على أخطاء مماثلة في مواقع أخرى.
يشرح جون جرايسي معنى "تصادم ترجمة الإشارات" عندما تتم ترجمة حرفين مختلفين بعد التحويل إلى نفس الحرف.
في هذه الحالة ، استخدم الأحرف التركية "ı" ("أنا" بدون نقطة) ، والتي تُترجم إلى اللاتينية "i" ، بحيث يتحول عنوان البريد الإلكتروني
John@Gıthub.com
بعد المعالجة إلى
John@Github.com
:
'ß'.toLowerCase()
يمكن العثور على مثل هذه التصادمات في جميع طائرات Unicode: فيما يلي
القائمة الكاملة .
نحن مهتمون في المقام الأول بتلك الأحرف التي تُترجم إلى أحرف لاتينية. لا يوجد سوى أحد عشر خيارًا. في المركز الثالث في الجدول ، توجد العلامة التركية "i" بدون نقطة.
سمح GitHub للمهاجم بالحصول على كلمة مرور من حساب شخص آخر ، لأن إجراء استعادة كلمة المرور المنسية لا يعمل بشكل صحيح.
كجزء من هذا الإجراء ، تمت مقارنة عنوان البريد الإلكتروني الذي تم إدخاله بالعنوان المخزن في قاعدة البيانات. خوارزمية التحقق:
- العنوان الذي تم إدخاله هو صغير باستخدام طريقة toLowerCase.
- تتم مقارنة العنوان الذي تم إدخاله بالعنوان الموجود في قاعدة بيانات المستخدمين المسجلين.
- إذا تم العثور على تطابق ، يتم إرسال كلمة المرور من قاعدة البيانات إلى العنوان الذي تم إدخاله .
من الواضح أن المطورين لم يكونوا على دراية
toLowerCase
ترجمة العنوان عند استخدام طريقة
toLowerCase
.
في هذه الحالة ، إصلاح الخطأ بسيط. يكفي إرسال كلمة المرور ليس إلى العنوان الذي تم إدخاله ، ولكن إلى العنوان من قاعدة البيانات.
بالطبع ، هذا ليس إصلاحًا كاملاً للأخطاء ، ولكنه مجرد تصحيح سريع. الحل الأكثر اكتمالا هو البث إلى Punycode للتحقق:
John@Gıthub.com
→
xn—john@gthub-2ub.com
. تم تصميم Punycode لتحويل أسماء النطاقات بشكل فريد إلى سلسلة من أحرف ASCII. يمكن التحقق من عنوان البريد الإلكتروني بنفس الطريقة ، لكن معظم تطبيقات الويب لا يتم التحقق منها.
تلقى John Gracie مكافأة نقدية و
2500 نقطة عن الثغرة الأمنية ، على الرغم من أنه لا يزال بعيدًا عن المخترق الرئيسي في Github
Alexander Dobkin <img src = 404 onerror = alert (document.domain)> : حصل مستخدم يحمل هذا الاسم غير العادي بالفعل على 30،750 نقطة ، بما في ذلك لتنفيذ تعليمات برمجية عشوائية على خوادم GitHub التي تنشئ صفحات GitHub.
يتعطل برنامج Messenger عند تلقي نقطة سوداء من الرموز التعبيرية (Messenger على نظام iOS و WhatsApp لنظام Android)تحتوي الأخطاء المتعلقة بـ Unicode على خاصية يمكن العثور عليها في أي تطبيق يقوم بمعالجة النص الذي أدخله المستخدم. توجد ثغرات أمنية في تطبيقات الويب والبرامج الأصلية لأجهزة Android و iOS. كان أحد أكثر
الأخطاء شيوعًا هو
علة iOS منذ عام 2015 ، عندما تسببت عدة أحرف Unicode في رسالة نصية في تعطل نظام التشغيل. في العام الماضي ، تم اكتشاف خطأ مشابه في Unicode في iOS 11.3 ، يُعرف باسم
"النقطة السوداء" . حدث عطل مماثل في تطبيق WhatsApp لنظام Android عند لمس رمز تعبيري.

