CVE-2024-43853 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 23.

리눅스 커널에서 다음 취약점이 해결되었습니다:

cgroup/cpuset: proc_cpuset_show()에서의 UAF 방지

[1]에 보고된 바와 같이 /proc/cpuset을 읽는 동안 UAF가 발생할 수 있습니다.

다음 방법으로 재현할 수 있습니다: 1. cgroup_path_ns 함수 내에서 cgroup_lock 획득 전에 mdelay(1000)를 추가합니다. 2. $cat /proc//cpuset 반복 실행. 3. $mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset/ $umount /sys/fs/cgroup/cpuset/ 반복 실행.

이 버그를 유발하는 Race Condition은 다음과 같이 나타낼 수 있습니다:

(umount) | (cat /proc//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에서 마운트 작업은 cgroup_root를 할당하며, top_cpuset.css.cgrp가 할당된 &cgroup_root.cgrp를 가리키게 됩니다. 언마운트 작업이 실행되면 top_cpuset.css.cgrp는 &cgrp_dfl_root.cgrp로 다시 바인딩됩니다.

문제는 cgrp_dfl_root로 재바인딩할 때, cgroup v1의 루트를 설정하여 할당된 cgroup_root가 캐시되는 경우가 있다는 것입니다. 이후에 이것이 해제되면 Use-After-Free(UAF)로 이어질 수 있습니다. cgroup v1의 하위 cgroups는 css가 해제된 후에만 해제될 수 있습니다. 그러나 루트의 css는 절대 해제되지 않지만, 언마운트 시점에는 cgroup_root를 해제해야 합니다. 이는 루트의 css에 대한 참조를 얻더라도 css.cgrp->root가 해제되지 않을 것이라고 보장하지 않음을 의미합니다.

proc_cpuset_show()에서 rcu_read_lock을 사용하여 이 문제를 해결합니다. 커밋 d23b5c577715("cgroup: Make operations on the cgroup root_list RCU safe") 이후로 cgroup_root는 kfree_rcu되므로, 임계 섹션 동안 css->cgroup이 해제되지 않습니다. cgroup_path_ns_locked를 호출하려면 css_set_lock이 필요하므로 task_get_css를 task_css로 교체하는 것이 안전합니다.

[1] https://syzkaller.appspot.com/bug?extid=9b1ff7be974a403aa4cd

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Linux

예약하다

2024. 08. 17.

모더레이션

수락

항목

VDB-274921

EPSS

0.00223

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!