CVE-2026-10667 in zephyr
요약
\~에 의해 VulDB • 2026. 07. 12.
Zephyr의 동적 커널 객체 추적 기능(kernel/userspace/userspace.c, 이전 버전에서는 kernel/userspace.c으로 불림)은 동적으로 할당된 커널 객체의 이중 연결 리스트(obj_list)를 유지합니다. k_object_wordlist_foreach() 함수에서 이 리스트를 순회할 때는 SAFE 반복자(다음 노드를 캐싱함)를 사용하여 lists_lock 하에 수행되었으나, 노드의 제거 및 해제는 서로 다른 분리된 스핀락인 k_object_free()의 objfree_lock과 unref_check()의 obj_lock 하에 수행되었습니다. SMP 시스템에서 하나의 CPU가 lists_lock 하에서 obj_list를 순회하는 동안, 다른 CPU는 반복자가 다음 포인터로 캐시한 dyn_obj 노트를 언링크하고 k_free()하여 해지된 커널 메모리를 역참조(use-after-free / 덩그랑 리스트 트래버설)하게 만들 수 있습니다. 모든 레이싱 작업은 시스템 호출을 통해 비특권 사용자 모드 스레드에서 접근 가능합니다: k_object_alloc/k_object_alloc_size와 k_object_release는 unref_check()를 통한 제거(obj_lock 하에)를 주도하는 반면, k_thread_abort 및 스레드 생성은 k_thread_perms_all_clear()/k_thread_perms_inherit()를 통한 순회(lists_lock 하에)를 주도합니다. 따라서 CONFIG_SMP + CONFIG_USERSPACE 빌드 환경에서 특권이 없는 사용자 스레드는 사용자와 공간 간 보안 경계를 넘어 커널의 객체 추적 구조를 손상시켜 커널 메모리 손상(잠재적 권한 상승) 또는 커널 크래시(DOS: 서비스 거부)를 유발할 수 있습니다. 수정 방법은 objfree_lock을 제거하고 k_object_free() 내 find+remove 시 및 k_thread_perms_clear() 내 unref_check() 주변을 포함하여 모든 obj_list 수정 작업을 lists_lock 하에서 직렬화합니다. CONFIG_SMP+CONFIG_USERSPACE+CONFIG_DYNAMIC_OBJECTS 구성에 영향을 미치며, 이 결함은 2019년 스핀락 도입(commit 8a3d57b6cc6, v1.14.0에서 처음 출시)으로 거슬러 올라가며 v4.4.0까지 배포되었습니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.