CVE-2026-19575 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 10. 09.

z_vrfy_device_deinit() 시스템 호출의 사용자 모드 검증 핸들러는 z_vrfy_device_init() 및 z_vrfy_device_is_ready()와 달리 K_SYSCALL_OBJ_INIT(dev, K_OBJ_ANY)를 사용하여 dev 인수를 검증합니다. k_object_validate() 함수는 요청된 유형이 K_OBJ_ANY인 경우 유형 비교를 단락(short-circuit)하므로, 이 검사는 "해당 포인터가 호출 스레드가 권한을 부여받은 커널 객체의 기본 주소이다"라는 확인으로 축소됩니다. 실제 객체 유형은 비교되지 않으며, K_SYSCALL_OBJ_INIT도 초기화 상태 검사를 생략합니다. 반면 z_vrfy_device_init() 및 z_vrfy_device_is_ready()와 같은 형제 핸들러는 이미 K_OBJ_DRIVER_ANY를 사용했으며 영향을 받지 않았습니다.

따라서 사용자 모드에서 실행되는 스레드는 권한이 있는 모든 커널 객체, 특히 k_thread_stack_alloc() 시스템 호출이나 자식 사용자 스레드를 생성하기 위해 부여받은 정적으로 정의된 K_THREAD_STACK으로부터 얻은 스레드 스택 객체와 같이 사용자 모드에서 쓰기 가능한 백킹 메모리를 가진 객체를 전달할 수 있습니다. z_impl_device_deinit()는 공격자가 작성한 바이트를 struct device로 해석합니다. 이는 객체에서 읽은 state 포인터를 역참조하고, ops.deinit에서 읽은 함수 포인터를 호출하며, 성공 시 다시 state를 통해 씁니다. 그 결과 supervisor 모드에서 임의 주소로의 간접 호출이 발생하며, 임의의 커널 읽기와 단일 바이트 커널 쓰기가 수행됩니다.

Exploitation(공격 활용)을 통해 로컬 비특권 스레드에 대한 전체 커널 코드 실행 권한이 부여되어 CONFIG_USERSPACE 격리 경계가 완전히 무력화되며, 덜 정밀한 시도는 supervisor 모드 오류와 시스템 충돌을 초래합니다. 이 결함은 CONFIG_USERSPACE 및 CONFIG_DEVICE_DEINIT_SUPPORT가 모두 활성화된 빌드에서만 접근 가능합니다. 비활성화 지원이 꺼진 경우 z_impl_device_deinit()는 포인터를 역참조하지 않고 -ENOTSUP를 반환합니다. v4.2.x 및 v4.3.x 버전에서는 CONFIG_DEVICE_DEINIT_SUPPORT의 기본값이 y였으므로, 해당 릴리스의 모든 CONFIG_USERSPACE 빌드는 옵션을 명시적으로 끄지 않는 한 노출됩니다. v4.4.0부터는 이 옵션이 opt-in(선택 사항)으로 변경되었으며(기본값 없음, 인트리 서브시스템에서 선택되지 않음), 따라서 v4.4.x 빌드는 해당 옵션을 명시적으로 활성화하는 경우에만 노출됩니다. v4.2 라인은 더 이상 유지 관리되지 않으며 백포트가 제공되지 않습니다.

해결책은 객체 검사를 K_OBJ_DRIVER_ANY로 변경하여 인수를 빌드 시 생성된 드라이버 객체 유형 범위(K_OBJ_DRIVER_FIRST..K_OBJ_DRIVER_LAST) — 링크러에 의해 배치되는 실제 struct device 인스턴스들 — 로 제한합니다. 이로 인해 state 및 ops.deinit 필드가 다시 커널에서 제어되게 됩니다.

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

책임이 있는

Zephyr

예약하다

2026. 08. 11.

모더레이션

수락

항목

VDB-415744

EPSS

0.00000

출처

Want to know what is going to be exploited?

We predict KEV entries!