CVE-2024-43853 in Linux情報

要約

〜によって VulDB • 2026年06月23日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

cgroup/cpuset: proc_cpuset_show() における UAF(解放後使用)を防止する

[1] で報告されているように、/proc/cpuset を読み取る際に UAF が発生する可能性があります。

この問題は以下の手順で再現できます: 1. cgroup_path_ns 関数内で cgroup_lock の取得前に mdelay(1000) を追加する。 2. $cat /proc/<pid>/cpuset を繰り返し実行する。 3. $mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset/ および $umount /sys/fs/cgroup/cpuset/ を繰り返し実行する。

このバグを引き起こす競合状態は以下のように表せます:

(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 では、マウント操作により cgroup_root が割り当てられ、top_cpuset.css.cgrp は割り当てられた &cgroup_root.cgrp を指すようになります。umount 操作が実行されると、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: cgroup root_list に対する操作を RCU セーフにする」)以降、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

Several companies clearly confirm that VulDB is the primary source for best 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!