🇰🇷 한글 설명
Linux 커널의 i3c 마스터 드라이버에서 IBI(Interrupt Based Interrupt) 페이로드를 처리할 때, 하드웨어 FIFO 크기만을 기준으로 루프를 실행하여 슬롯 크기를 초과하는 데이터를 읽는 취약점이 발견되었습니다. 이로 인해 IBI 풀 내의 다른 영역에 데이터를 쓰는 Out-of-bounds Write가 발생할 수 있습니다.
💡 쉬운 설명
장치가 약속된 데이터 양보다 더 많은 데이터를 보낼 때, 컴퓨터 메모리의 정해진 공간을 넘어서 데이터를 써버리는 오류입니다. 이로 인해 시스템의 다른 중요한 정보가 망가질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
i3c: master: svc: bound IBI payload to the requested max_payload_len
svc_i3c_master_handle_ibi() reads the IBI payload from the RX FIFO into
the IBI slot. The loop is bounded by the hardware FIFO size
(SVC_I3C_FIFO_SIZE), not by the slot size.
slot->data points into the IBI pool, which i3c_generic_ibi_alloc_pool()
sizes at max_payload_len per slot. svc_i3c_master_request_ibi() only
rejects a max_payload_len larger than SVC_I3C_FIFO_SIZE, so a driver can
request a smaller one. mctp-i3c requests 1. Each readsb() then copies the
controller RXCOUNT bytes (up to 31) with no check against the slot size.
A device that sends more bytes than the slot holds writes past
slot->data, an out-of-bounds write into the IBI pool.
Bound the loop by dev->ibi->max_payload_len and clamp each read to the
space left in the slot, the same way dw-i3c does. A device can still send
more than the requested payload. Flush the leftover bytes from the RX FIFO
so they do not leak into the next transfer.
📍 영향받는 시스템
Linux kernel (i3c master driver 관련 버전)
⚔️ 공격 벡터
악의적인 I3C 장치가 요청된 페이로드 크기보다 더 많은 데이터를 전송하여 메모리 경계를 초과하는 쓰기 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 IBI 페이로드 경계 검사 로직 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.