🇰🇷 한글 설명
Zephyr의 MCTP-over-I2C+GPIO 타겟 바인딩에서 I2C 버스 마스터가 데이터 레지스터를 먼저 선택하고 길이를 지정하지 않을 경우, 할당되지 않은 메모리 주소에 데이터를 쓰는 메모리 손상 취약점이 존재합니다. 또한 데이터 길이가 255바이트를 초과할 경우 1바이트 힙 오버플로우가 발생할 수 있습니다. 이로 인해 공격자는 메모리 손상이나 서비스 거부(DoS)를 유발할 수 있습니다.
💡 쉬운 설명
I2C 통신을 사용하는 장치에서 데이터의 길이를 먼저 알려주지 않고 바로 데이터를 보내면, 시스템이 엉뚱한 메모리 위치에 데이터를 적어버리는 문제입니다. 이로 인해 기기가 멈추거나 해커가 시스템을 제어할 수 있는 위험이 있습니다.
🇺🇸 원문 (English)
The MCTP-over-I2C+GPIO target binding in Zephyr (subsys/pmci/mctp/mctp_i2c_gpio_target.c) processes pseudo-register writes from an I2C bus master byte-by-byte in mctp_i2c_gpio_target_write_received() without validating the order or the receive buffer. In the affected versions the MCTP_I2C_GPIO_RX_MSG_ADDR (data) handler dereferences and writes through b->rx_pkt without checking that the receive buffer was allocated: a controller that selects the data register and writes a byte without first sending the length register (which is what allocates the buffer) causes a write of an attacker-chosen byte through a NULL/unallocated mctp_pktbuf pointer (i.e. into a small attacker-advanceable offset above address 0), producing memory corruption or a hard fault.
The same handler also performs a write-then-check bounds test, allowing a one-byte heap overflow at data[255] when more than 255 data bytes are sent.
Because the I2C target callback is invoked with raw bytes supplied by whatever device is the bus master and the binding performs no authentication, a malicious or malfunctioning controller on the bus can trigger these without any prior protocol state, leading to memory corruption and/or denial of service on the target device.
The vulnerable code was introduced when the I2C+GPIO target binding was added and shipped in Zephyr v4.3.0 and v4.4.0. The fix defers allocation to the first data byte with a NULL check, treats a missing length as a zero-sized packet rejected by libmctp, and moves the bounds check before the store.
📍 영향받는 시스템
Zephyr RTOS v4.3.0 및 v4.4.0 (MCTP-over-I2C+GPIO 사용 시)
⚔️ 공격 벡터
인증되지 않은 I2C 버스 마스터가 프로토콜 순서를 무시하고 데이터 레지스터에 직접 쓰기를 수행하여 공격
🛡️ 대응 방법
Zephyr 프로젝트에서 제공하는 최신 보안 패치가 적용된 버전으로 업데이트하거나, 데이터 수신 시 버퍼 할당 여부를 검증하도록 코드를 수정해야 합니다.
🔧 검증 코드
해당 소스 파일의 존재 여부와 현재 사용 중인 Zephyr 버전을 확인하여 취약 버전(v4.3.0, v4.4.0)인지 대조합니다.
grep -r "mctp_i2c_gpio_target.c" /path/to/zephyr/subsys/pmci/mctp/ && zephyr-v-check --version
📊 CVSS Vector String
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
💻 영향받는 소프트웨어
Windows iSCSI Target Service