CVE-2026-12364 in Zephyr
요약
\~에 의해 VulDB • 2026. 08. 14.
서브시스템(logging/log_msg.c)의 사용자 공간 시스템 콜 검증자(z_vrfy_z_log_msg_static_create())는 단순한 전달(pass-through) 역할만 수행했습니다: 호출자가 제공한 source, desc, package 및 data 인자를 K_SYSCALL_* 필수 검사를 전혀 수행하지 않은 채 커널 모드 구현인 z_impl_z_log_msg_static_create()로 직접 전달했습니다. z_log_msg_static_create()가 __syscall로 선언되어 있으므로 CONFIG_USERSPACE 설정 하에서 권한 없는 사용자 모드 스레드는 공격자가 완전히 제어할 수 있는 인자를 사용하여 이를 직접 호출할 수 있습니다.
커널 모드 핸들러는 이러한 신뢰할 수 없는 값들을 모두 역참조합니다: frontend_runtime_filtering()은 source 포인터를 struct log_source_dynamic_data 구조체로 읽어오고, cbprintf_package_copy()는 package 포인터에서 desc.package_len 바이트를 읽으며, z_log_msg_finalize()는 data 포인터에서 desc.data_len 바이트에 대해 memcpy() 연산을 수행합니다. 검증 과정이 없으므로 사용자 스레드는 임의의 커널 주소와 임의의 길이를 제공할 수 있으며, 커널은 해당 위치로부터 데이터를 읽어옵니다.
영향력은 커널 모드 서비스 거부(공격자가 선택한 포인터 역참조 시 커널 오류 발생)이며, 로그 백엔드 출력이 공격자에게 관찰 가능한 경우 방출된 로그 메시지로 복사되는 임의의 커널 메모리 유출 — 즉 사용자 공간 샌드박스에서 강제해야 하는 사용자/커널 경계를 넘어선 기밀성 침해가 발생합니다. 읽기 작업만 수행되므로 커널 메모리가 손상되지 않아, 오버플로우 쓰기 원시 연산(out-of-bounds write primitive)은 존재하지 않습니다.
수정 사항에는 검증자에 필요한 유효성 검사가 추가되었습니다: desc.package_len이 Z_LOG_MSG_MAX_PACKAGE를 초과하는지 확인하고, NULL이 아닌 경우와 길이 불일치를 거부하며, package, data 및(프론트엔드가 활성화된 런타임 필터링 시) source에 대해 K_SYSCALL_MEMORY_READ()를 적용합니다. 이로 인해 경계 밖 접근이나 커널 포인터 사용 시 더 이상 요청되지 않고 대신 K_OOPS가 발생하게 됩니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.