Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
AWS-Tough-Library-Multiple-CVEs — مشكلة في tough، الإصدارات قبل 0.20.0 (عدة ثغرات CVE) | Kitploit
أدوات/GitHubGitHub/murataydemir/aws-tough-library-multiple-cves
تحليل الثغرات الأمنيةأمن سلسلة التوريدالأوراق والأبحاثالتعلم والتعليم
GitHubmurataydemir/aws-tough-library-multiple-cves

AWS-Tough-Library-Multiple-CVEs

مشكلة في tough، الإصدارات قبل 0.20.0 (عدة ثغرات CVE)

عرض المستودع
112منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مكتبة AWS Tough: ثغرات CVE متعددة


في مارس 2025، تم الكشف عن عدة ثغرات أمنية في مكتبة Tough التابعة لـ AWS Labs (وهي عميل Rust لتطبيق TUF – The Update Framework). يتم تتبع هذه المشكلات تحت CVE-2025-2885 وCVE-2025-2886 وCVE-2025-2887 وCVE-2025-2888، وتم إصلاحها في الإصدار 0.20.0 من Tough. يمكن لمهندسي الأمن استخدام هذا المستند لفهم التفاصيل الفنية لكل ثغرة، والسبب الجذري في قاعدة البيانات البرمجية، والتصحيحات التي تحل هذه المشكلات. يُنصح بشدة جميع مستخدمي Tough < 0.20.0 بالترقية إلى v0.20.0 أو أحدث.

CVE-2025-2885: عدم التحقق التسلسلي من إصدار Root

فشل Tough في التحقق من إصدار Root metadata بشكل تسلسلي أثناء التحديث. يمكن للمهاجم الذي يتحكم في المستودع (أو يمتلك القدرة على تنفيذ هجوم الوسيط man-in-the-middle) توفير ملف بيانات وصفية جذرية برقم إصدار غير متوقع، مما يجعل العميل يجلب ويثق في إصدار خاطئ. في جوهر الأمر، لم يضمن Tough أن يكون إصدار بيانات Root metadata الجديدة أكبر بمقدار واحد بالضبط من الإصدار الموثوق به سابقًا، وهو ما يخالف متطلب TUF الخاص بسلسلة ثقة متصلة. قد يؤدي هذا إلى هجمات التراجع أو الخلط والمطابقة (rollback or mix-and-match attacks)، حيث يتم قبول جذر قديم (لكنه مُوقَّع بشكل صحيح) كما لو كان الأحدث، مما قد يؤدي إلى إعادة إدخال مفاتيح توقيع متقاعدة أو ثقة منتهية الصلاحية.

  • النشرة الأمنية: GitHub Security Advisory GHSA-5vmp-m5v2-hx47 (CVE-2025-2885)
  • الكود المتأثر: منطق التحديث في Tough للبيانات الوصفية الجذرية في tough/src/lib.rs. كان التنفيذ الضعيف يتحقق فقط من أن إصدار الجذر الجديد ليس أقل من الإصدار القديم، بدلاً من اشتراط أن يكون الإصدار التالي في التسلسل. هذا الإغفال يخالف قاعدة مواصفات TUF التي تتطلب من العملاء تنزيل إصدارات الجذر الوسيطة بالترتيب (بدون تخطي الإصدارات).

التنفيذ الضعيف: في الإصدار 0.19.x والإصدارات السابقة له، بعد تنزيل root.json جديد، كان Tough يتحقق من التوقيعات لكنه لم يفرض استمرارية الإصدار بشكل صارم. وقد سمح لإصدار الجذر الجديد بأن يكون أي قيمة >= الإصدار الموثوق به. على سبيل المثال، إذا كان الجذر الموثوق به حاليًا هو الإصدار N، فسيقبل Tough جذرًا جديدًا يدّعي أنه الإصدار N+2 أو أعلى (طالما كانت التوقيعات صالحة)، متجاوزًا الإصدار N+1. يوضح مقتطف الكود أدناه الفحص قبل الإصلاح:```rust // (Prior to fix) Allow new root version to be >= old version – too permissive ensure!(root.signed.version <= new_root.signed.version, error::OlderMetadataSnafu { role: RoleType::Root, current_version: root.signed.version, new_version: new_root.signed.version });

يمكن للمهاجم استغلال ذلك من خلال تقديم <b>بيانات وصفية لجذر بإصدار أعلى وهي في الواقع مجموعة مفاتيح أقدم</b>. ستقبلها Tough معتقدةً أنها تحديث، وتثق [بمحتوى موقَّع بمفاتيح قديمة](https://github.com/advisories/GHSA-5vmp-m5v2-hx47#:~:text=The%20tough%20client%20will%20trust,with%20a%20previous%20root%20role).

<b>التنفيذ المُصحَّح:</b> يتطلب الكود المُصحَّح (في Tough 0.20.0) صراحةً أن يكون إصدار الجذر الجديد أكبر من الإصدار القديم بواحد بالضبط، انظر [commit 0eeb60a](https://github.com/awslabs/tough/commit/0eeb60aefe27f00b65730634b788a1aafb8bf3c6). كما يضمن أن يكون الإصدار الجديد أعلى (يمنع المساواة أو الانخفاض) ويمنع أي قفزة أكبر من +1:```rust
// (Fixed in v0.20.0) Enforce sequential root version update (new_version == old_version + 1)
ensure!(
    root.signed.version < new_root.signed.version && 
    root.signed.version.get() + 1 == new_root.signed.version.get(),
    error::OlderMetadataSnafu { 
        role: RoleType::Root, 
        current_version: root.signed.version, 
        new_version: new_root.signed.version 
    }
);

يضمن هذا التغيير قيام العميل بتنزيل بيانات التعريف الجذرية (root metadata) وتطبيقها بالترتيب (N، N+1، N+2، ...) دون تخطي. إذا تمت مواجهة ملف بيانات تعريف جذرية بإصدار لا يساوي تمامًا old_version+1، فإن Tough يعامله الآن كهجوم محتمل ويُجهض عملية التحديث.

  • السبب الجذري: فقدان التحقق من الإصدار التسلسلي (CWE-1288: التحقق غير السليم من قيمة فحص السلامة) كان الكود يتحقق فقط من أن الجذر الجديد ليس أقدم من الجذر الحالي، لكنه لم يكن يتحقق من القفزات غير المتوقعة.
  • الإصلاح: قم بالترقية إلى tough = 0.20.0، الذي يتضمن التصحيح. تأكد من أن أي تفرعات أو محدّثات مخصصة مبنية على Tough تطبّق نفس الفحص الصارم. من الحكمة أيضًا مراجعة السجلات بحثًا عن أي قفزات مشبوهة في إصدار الجذر ضمن سجل التحديثات كمؤشر على محاولة استغلال.

CVE-2025-2886: عدم احترام التفويض المُنهي

تعامل Tough بشكل غير صحيح مع أدوار الأهداف المفوضة “المُنهية” كما هو معرّف في TUF. في مستودع TUF، يمكن وضع علامة مُنهٍ على تفويض، بمعنى أنه إذا وصل بحث هدف إلى ذلك التفويض ولم يتم العثور على الهدف هناك، يجب أن يتوقف البحث (ولا يستمر إلى تفويضات أخرى أقل أولوية). (انظر هنا) بسبب خطأ منطقي، فشل Tough في إنهاء البحث في هذه الحالة – حيث كان يستمر في البحث في التفويضات اللاحقة حتى عندما كان ينبغي أن يتوقف. قد يسمح هذا لمهاجم يتحكم في تفويض أقل أولوية بتقديم محتوى لأهداف لا ينبغي له التحكم بها، متجاوزًا حدود الثقة المقصودة.

  • الإشعار الأمني: GitHub Security Advisory GHSA-v4wr-j3w6-mxqc (CVE-2025-2886)
  • الكود المتأثر: خوارزمية البحث عن الأهداف في tough/src/editor/targets.rs (وكود حل التفويض المرتبط به). لم يعالج الكود الهش بشكل صحيح علامة terminating على التفويضات. عند التكرار عبر التفويضات بحثًا عن هدف، كان Tough ينتقل إلى التفويض التالي حتى لو كان التفويض الحالي مُعلّمًا بأنه مُنهٍ ولم يكن هناك تطابق، بما يخالف مواصفات TUF.

التنفيذ الهش: في Tough <0.20.0، كان منطق find_target() ببساطة يستدعي نفسه بشكل متكرر أو يكرر عبر جميع الأدوار المفوضة الممكنة حتى يتم العثور على هدف أو استنفاد جميع الأدوار. لم يكن يعيّن أي علامة أو يخرج من الحلقة عند مواجهة دور مُنهٍ. الكود الزائف للسلوك القديم:```rust for role in delegation_chain { if role.has_target(target) { return target_metadata; } // Missing: if role is terminating and target not found, should break. // Tough erroneously continues to next delegation. }

هذا يعني أن المفوَّض ذو الأولوية الأدنى (الذي ينبغي تجاهله بعد تفويض مُنهٍ فوقه) قد يظل قيد الاستشارة ويوفّر ملفًا مستهدفًا خبيثًا.
تنزيل الأداة