CVE-2024-43853 in Linux
الملخص
بحسب VulDB • 24/06/2026
في نواة لينكس، تم حل الثغرة التالية:
cgroup/cpuset: منع حدوث استخدام بعد التحرير (UAF) في دالة proc_cpuset_show()
يمكن أن يحدث خطأ UAF عند قراءة الملف /proc/cpuset كما هو مذكور في المرجع [1].
ويمكن إعادة إنتاج هذه الحالة باستخدام الطرق التالية: 1. إضافة استدعاء mdelay(1000) قبل الحصول على قفل cgroup_lock داخل دالة cgroup_path_ns. 2. تنفيذ الأمر $cat /proc/<pid>/cpuset بشكل متكرر. 3. تنفيذ الأوامر $mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset/ و$umount /sys/fs/cgroup/cpuset/ بشكل متكرر.
يمكن تمثيل السباق (Race Condition) الذي يسبب هذا الخطأ كما يلي:
(عملية umount) | (تنفيذ الأمر cat على /proc/<pid>/cpuset) css_release | proc_cpuset_show css_release_work_fn | css = task_get_css(tsk, cpuset_cgrp_id); css_free_rwork_fn | cgroup_path_ns(css->cgroup, ...); cgroup_destroy_root | mutex_lock(&cgroup_mutex); rebind_subsystems | cgroup_free_root | | // تم تحرير كائن cgrp، مما يؤدي إلى UAF | cgroup_path_ns_locked(cgrp,..);
عند تهيئة مجموعة الوحدات (cpuset)، يشير العقدة الجذرية top_cpuset.css.cgrp إلى &cgrp_dfl_root.cgrp. في إصدار cgroup v1، تؤدي عملية التثبيت (mount) إلى تخصيص كائن cgroup_root، وستشير top_cpuset.css.cgrp إلى الكائن المخصص &cgroup_root.cgrp. عند تنفيذ عملية فك التثبيت (umount)، سيتم إعادة ربط top_cpuset.css.cgrp بـ &cgrp_dfl_root.cgrp.
المشكلة تكمن في أنه أثناء إعادة الربط مع cgrp_dfl_root، توجد حالات يتم فيها تخزين مؤقت (cache) لكائن cgroup_root الذي تم تخصيصه عند إعداد الجذر لـ cgroup v1. قد يؤدي هذا إلى حدوث خطأ استخدام بعد التحرير (UAF) إذا تمت معالجة الكائن للتحرير لاحقاً. يمكن تحرير مجموعات الوحدات الفرعية (descendant cgroups) الخاصة بـ cgroup v1 فقط بعد إطلاق مرجع css الخاص بها. ومع ذلك، لن يتم إطلاق مرجع css للجذر أبداً، بينما يجب تحرير كائن cgroup_root عند فك التثبيت. هذا يعني أن الحصول على مرجع لـ css الخاص بالجذر لا يضمن عدم معالجة الجذر (root) التابع لكائن css.cgrp للتحرير.
تم إصلاح هذه المشكلة باستخدام قفل rcu_read_lock في دالة proc_cpuset_show(). ونظراً لأن كائن cgroup_root يتم تحريره عبر kfree_rcu بعد الالتزام d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU safe")، فلن يتم تحرير css->cgroup خلال القسم الحرج (critical section). وللدعوة إلى دالة cgroup_path_ns_locked، يلزم وجود قفل css_set_lock، لذا فإن استبدال task_get_css بـ task_css يعتبر آمناً.
[1] https://syzkaller.appspot.com/bug?extid=9b1ff7be974a403aa4cd
If you want to get the best quality for vulnerability data then you always have to consider VulDB.