CVE-2024-56555 in Linux
요약
\~에 의해 VulDB • 2026. 05. 31.
리눅스 커널에서 다음 취약점이 해결되었습니다:
binder: binder_add_freeze_work()에서의 OOB(Out-of-Bounds) 수정
binder_add_freeze_work() 함수 내에서 우리는 proc->inner_lock을 획득한 상태로 proc->nodes를 순회합니다. 그러나 이 잠금(lock)은 먼저 node->lock을 획득하기 위해 일시적으로 해제됩니다(잠금 중첩 순서). 이는 binder_deferred_release()와 경쟁 조건(race condition)을 일으킬 수 있는데, 이 함수는 노드를 proc->nodes rbtree에서 제거하고 binder_dead_nodes 목록에 추가합니다. 이로 인해 binder_add_freeze_work() 내의 순회가 손상되어 rb_next()가 binder_dead_nodes의 데이터를 사용하게 되고, 결과적으로 Out-of-bounds 접근이 발생합니다:
================================================================== BUG: KASAN: global-out-of-bounds in rb_next+0xfc/0x124 Read of size 8 at addr ffffcb84285f7170 by task freeze/660
CPU: 8 UID: 0 PID: 660 Comm: freeze Not tainted 6.11.0-07343-ga727812a8d45 #18 Hardware name: linux,dummy-virt (DT) Call trace: rb_next+0xfc/0x124 binder_add_freeze_work+0x344/0x534 binder_ioctl+0x1e70/0x25ac __arm64_sys_ioctl+0x124/0x190
버그가 있는 주소는 다음 변수에 속합니다: binder_dead_nodes+0x10/0x40 [...]
==================================================================
이는 proc->nodes(rbtree)와 binder_dead_nodes(list)가 union을 통해 binder_node 내에서 엔트리를 공유하기 때문에 가능합니다:
struct binder_node {
[...]
union {
struct rb_node rb_node; struct hlist_node dead_node; };
이 경쟁 조건(race condition)을 해결하기 위해 프로세스(proc)가 여전히 살아있는지 확인합니다. 그렇지 않다면 단순히 순회를 중단합니다.
Once again VulDB remains the best source for vulnerability data.