
يتحقق من ملفاتك بحثًا عن وجود أحرف Unicode BIDI التي يمكن إساءة استخدامها في هجمات سلسلة التوريد. انظر CVE-2021-42574
تتحقق هذه الأداة من ملفاتك بحثًا عن وجود أحرف BIDI (ثنائية الاتجاه) في Unicode التي يمكن إساءة استخدامها في هجمات سلسلة التوريد للتخفيف من CVE-2021-42574. تمت كتابة هذه الأداة بلغة Rust ويتم توزيعها كحاوية Docker صغيرة (أقل من 3 ميغابايت) لتتيح استخدامًا سريعًا وسهلاً.
للحصول على شرح للهجوم، ألق نظرة على إدخال مدونة GitHub أو الورقة الأصلية التي نُشر فيها الهجوم.
المقصود من هذه الحزمة هو استخدامها بشكل أساسي عبر حاوية Docker الخاصة بها. لكن التثبيت المحلي ممكن بالطبع.
يتطلب التجميع على الأقل Rust 1.56.0 لأنه يستخدم إصدار Rust 2021.
استنسخ هذا المستودع وشغّل cargo install --path . لتثبيت الملف الثنائي للمستخدم الحالي. بعد ذلك، يمكنك استدعاء الأمر bidi_detector.
تشغيل الأداة عبر حاوية Docker الرسمية هو على الأرجح أسهل طريقة للبدء. لتشغيلها عبر Docker، يجب أن يعمل الأمر التالي لفحص جميع الملفات داخل مجلد العمل الحالي لديك:
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
اعتمادًا على نظامك، قد تحتاج إلى تعديل هذا الأمر قليلاً. إذا كنت تستخدم مثلاً podman ولديك SELinux مفعّلاً، جرب الأمر التالي بدلاً من ذلك:
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
افتراضيًا، سيتم فحص جميع الملفات. إذا كان لديك ملفات ثنائية داخل المجلد الحالي، سيفشل الأمر لأنه لا يمكنه فك ترميز ملف غير مشفر بـ UTF-8.
لتكييف الأمر حسب احتياجاتك، ضع ملفًا باسم bidi_config.toml داخل جذر مشروعك.
يمكنك العثور على مثال لهذا الملف في هذا المستودع، انظر المثال أدناه. سيتم وصف الخيارات بمزيد من التفصيل أسفل المثال:
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
يتضمن هذا القسم مصفوفتين (includes و excludes) حيث يمكنك تحديد أنماط الملفات المراد فحصها (أو استبعادها من الفحص).
يرجى التأكد من أن أنماطك تتطابق فعليًا مع الملفات داخل المجلد، وليس مع اسم المجلد نفسه، وإلا فلن يتم فحص ملفاتك.
إذا كنت تريد فحص جميع الملفات واستبعاد مثلاً مجلد .git الخاص بك فقط، فإن الإعداد التالي سيفي بالغرض:
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
إذا كنت تريد بدلاً من ذلك تحديد المجلد الذي يحتوي على ملفات المصدر الخاصة بك بشكل صريح، فإن مثال الإعداد التالي سيفحص جميع الملفات في مجلد src (دون تجاهل أي شيء):
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
الإعدادات التالية متاحة في هذا القسم:
| الإعداد | الوصف | اختياري | الافتراضي | تم تقديمه في |
|---|---|---|---|---|
show_details | يقرر ما إذا كان سيتم طباعة السطر/الموضع ونوع حرف BIDI المكتشف إذا تم العثور عليه (انظر الأمثلة أدناه) | لا | - | v0.1.1 |
ignore_invalid_data | ما إذا كان سيتم طباعة رسالة خطأ عند اكتشاف ملفات ثنائية / غير UTF-8 | نعم | true | v0.1.2 |
verbose | ما إذا كان سيتم طباعة اسم الملف حتى لو لم يتم العثور على أحرف مشبوهة | نعم | true | v0.1.2 |
مثال: show_details = true، verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:4:3
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:7
Found character PDI (Pop Directional Isolate), test/example-commenting-out.js:4:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:22
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:6:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:6:24
Found 6 potentially dangerous Unicode BIDI characters!
مثال: show_details = false، verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
مثال: show_details = false، verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
جميع الاعتمادات لاكتشاف الهجوم بما في ذلك قائمة أحرف BIDI ذات الصلة تعود إلى المؤلفين الأصليين للورقة المقابلة. يرجى الاستشهاد بورقتهم الأصلية عند البناء على عملهم.
الملف test/example-commenting-out.js في هذا المستودع هو نسخة من commenting-out.js في مستودعهم الأصلي. يتبع ترخيصه المستودع الأصلي (MIT License)
يُستخدم لأغراض الاختبار فقط هنا.
@article{boucher_trojansource_2021,
title = {Trojan {Source}: {Invisible} {Vulnerabilities}},
author = {Nicholas Boucher and Ross Anderson},
year = {2021},
journal = {Preprint},
eprint = {2111.00169},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2111.00169}
}