
حقن أوامر في نظام تشغيل Pardus My Computer
يصف CVE-2024-12970 ثغرة OS Command Injection (حقن أوامر النظام) الموجودة في برنامج My Computer لنظام Pardus. تسمح هذه الثغرة للمستخدم بحقن أوامر النظام من خلال معامل اسم الملف، وبالتالي يمكن للمهاجم تنفيذ أوامر ضارة على النظام.
توجد هذه الثغرة في إصدارات برنامج Pardus My Computer الأقدم من الإصدار 0.7.2.
توجد الثغرة في الدالة get_file_info. تستخدم هذه الدالة استدعاء subprocess لجلب معلومات القرص المقدمة من المستخدم. ولكن نظرًا لعدم التحقق بشكل صحيح من معامل مسار الملف (file) في هذا الاستدعاء، فإنها تؤدي إلى ثغرة OS Command Injection عبر اسم القرص الذي يقدمه المستخدم.
الدالة:
def get_file_info(file, network=False):
if network:
try:
process = subprocess.check_output(f"df '{file}' --block-size=1000 -T | awk 'NR==1 {{next}} {{print $1,$2,$3,$4,$5,$7; exit}}'", shell=True, timeout=1)
except subprocess.TimeoutExpired:
print("timeout error on {}".format(file))
return None
تعتمد الثغرة على أن معامل file يتم توفيره من قبل المستخدم واستخدامه مباشرة في دالة subprocess.check_output(). يمكن للمستخدم إعطاء اسم القرص الذي يختاره لمعامل file، ويستخدم اسم القرص هذا مباشرة في أوامر الصدفة. وهذا يتيح للمستخدم إمكانية حقن الأوامر.
سطر مثال على المعامل المعرض للثغرة:
process = subprocess.check_output(f"df '{file}' --block-size=1000 -T | awk 'NR==1 {{next}} {{print $1,$2,$3,$4,$5,$7; exit}}'", shell=True)
لاستغلال الثغرة، يمكن للمهاجم وضع حمولة ضارة في اسم القرص الذي سيقوم بتوصيله كما يلي:
&' <çalıştırılmak istenen shell komutu> #
عندما يتم تحميل (mount) قرص بهذا الاسم من خلال Pardus My Computer، يعمل الاستغلال.