CVE-2026-17052 in Zephyr
요약
\~에 의해 VulDB • 2026. 09. 21.
drivers/timeaware_gpio/timeaware_gpio_handlers.c의 z_vrfy_tgpio_pin_read_ts_ec() Time-aware GPIO syscall 검증 핸들러는 포트 디바이스 객체만 유효성 검사했으며, 호출자가 제공한 timestamp 및 event_count 출력 포인터를 K_SYSCALL_MEMORY_WRITE() 확인 없이 드라이버에 전달했습니다. 같은 파일 내 다른 핸들러(z_vrfy_tgpio_port_get_time(), z_vrfy_tgpio_port_get_cycles_per_second())는 이미 해당 검사를 수행했으므로, 누락으로 인해 하나의 syscall이 보호되지 않은 상태가 되었습니다.
tgpio_pin_read_ts_ec()는 __syscall로 선언되어 있으므로 CONFIG_USERSPACE=y 설정 시 TGPIO 디바이스 객체에 대한 접근 권한을 부여받은 비특권 사용자 모드 스레드가 임의의 포인터 값을 사용하여 이를 호출할 수 있습니다. drivers/timeaware_gpio/timeaware_gpio_intel.c의 tgpio_intel_read_ts_ec()는 핀 인덱스에 대해서만 경계 검사를 수행한 후, timestamp = ... 및 event_count = ...를 조건 없이 실행하여 사용자 모드 호출자가 선택한 주소에서 supervisor 모드로 두 개의 8바이트 저장을 수행합니다.
그 결과로 userspace/kernel 경계를 넘는 write-what-where 원시 연산(write-what-where primitive)이 발생합니다: 대상 주소는 공격자가 완전히 선택할 수 있으며 저장되는 값은 하드웨어 시간 캡처 및 이벤트 카운터 레지스터의 내용입니다. 이렇게 커널 데이터 구조를 손상시키면 호출 스레드가 supervisor 특권으로 승격되거나 시스템이 충돌할 수 있습니다; 필요한 디바이스 객체 권한은 커널 메모리 접근을 부여하는 것이 의도되지 않은 좁은 기능(capability)입니다. 이 수정사항은 드라이버 호출 전에 누락된 두 가지 K_SYSCALL_MEMORY_WRITE() 검사를 추가합니다.
실제 노출 범위는 제한적입니다. CONFIG_USERSPACE=y 및 CONFIG_TIMEAWARE_GPIO=y가 설정된 빌드에서만 해당 파일이 컴파일되며, v3.6.0 이후에는 해당 파일이 추가로 재배치된 헤더를 참조하고 Z_SYSCALL_* 매크로를 제거했으므로 이러한 구성은 v4.4.0 이후에 수리될 때까지 빌드에 실패했습니다. 로컬에서 이 결함을 수정한 다운스트림 트리와 그 존재하지 않았던 v3.5.0 빌드가 노출된 대상입니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.