CVE-2026-14367 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 08. 31.

drivers/i3c/i3c_ibi_workq.c의 I3C IBI 서브시스템은 plain sys_slist_t로 구현된 free-list인 i3c_ibi_work_nodes_free를 통해 정적으로 할당된 work 노드를 제공합니다. 이는 동기화 기능을 제공하지 않습니다. 호출되는 할당 헬퍼(i3c_ibi_work_enqueue, i3c_ibi_work_enqueue_target_irq, i3c_ibi_work_enqueue_hotjoin, i3c_ibi_work_enqueue_controller_request, i3c_ibi_work_enqueue_cb)는 ISR 컨텍스트에서 sys_slist_get()를 직접 호출하는 반면, 워크큐 핸들러인 i3c_ibi_work_handler()는 워크큐 스레드에서 sys_slist_append()를 사용하여 노드를 반환하며, 양쪽 모두에 락이 없습니다.

sys_slist_get()와 sys_slist_append()가 원자적이지 않고 인터럽트 안전하지 않기 때문에, 워크큐 스레드가 append 작업 중일 때(또는 CONFIG_SMP 하에서 진정한 병렬 접근 시) 발생하는 IBI 인터럽트는 공유된 리스트에 대해 Race Condition을 유발합니다. 이로 인해 리스트 링크가 손상됩니다: 노드가 두 소비자에게 전달되거나, 노드가 손실되거나, head/tail 포인터가 불일치 상태로 남아 sys_slist_get()가 낡거나 잘못된(garbage) 포인터를 반환할 수 있습니다. 이중 할당(double-hand-out) 사례에서는 후속 memcpy(ibi_node, ibi_work, sizeof(*ibi_node)) 연산이 아직 전송 중인 노드를 덮어씁니다; 잘못된 포인터는 동일한 memcpy를 바이트 오버플로우(out-of-bounds) 쓰기 작업으로 만듭니다.

이 Race Condition은 I3C 버스 트래픽에 의해 유발됩니다: IBIs, hot-joins 및 컨트롤러 역할 요청은 버스의 타겟 디바이스에서 발생하며, I3C는 핫 조인(hot-joining) 디바이스를 지원합니다. 보드의 칩 투 칩(bus-to-chip) 버스에서 I3C 주변기기를 제어하는 공격자는 free 작업과 충돌하도록 타이밍된 고주파 인터럽트를 생성할 수 있습니다. 악용에는 버스에 대한 물리적 접근과 좁은 타이밍 윈도우를 맞추는 것이 필요하며, 가장 현실적인 영향은 크래시 또는 멈춤(서비스 거부)이며, 메모리 부정은 가능하지만 제어하기 어렵습니다.

수정 방법은 모든 free-list sys_slist_get()/sys_slist_append() 작업을 새로운 ibi_work_alloc()/ibi_work_free() 헬퍼로 감싸고, 각각을 k_spinlock(ibi_work_lock)으로 보호하여 ISR 및 스레드 컨텍스트 전반의 Race Condition을 해결합니다.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

책임이 있는

Zephyr

예약하다

2026. 07. 01.

모더레이션

수락

항목

VDB-397408

EPSS

0.00000

출처

Do you need the next level of professionalism?

Upgrade your account now!