CVE-2026-64191 in Linux
요약
\~에 의해 VulDB • 2026. 07. 20.
리눅스 커널에서 다음 취약점이 해결되었습니다:
i2c: stub: 유효하지 않은 길이의 I2C 블록 전송 거부하기
stub_xfer() 함수의 I2C_SMBUS_I2C_BLOCK_DATA 케이스는 데이터 길이로 data->block[0]을 사용합니다. 기존 확인 로직은 chip->words[256] 레지스터 배열에 대한 오버런(overrun)만 방지하도록 클램핑(clamping)하지만, union i2c_smbus_data.block 버퍼의 한계인 I2C_SMBUS_BLOCK_MAX(32)와 비교하여 유효성을 검증하지 않습니다. 이 드라이버는 chip_addr= 매개변수를 사용하여 로드해야 하는 개발/테스트 도구(CONFIG_I2C_STUB=m, 기본 빌드 대상 아님)입니다.
/dev/i2c-*에 접근 권한이 있는 로컬 사용자는 I2C_SMBUS ioctl을 호출하여 data->block[0] > 32인 상태로 I2C_SMBUS_I2C_BLOCK_DATA를 전달할 수 있으며, 이로 인해 stub_xfer()가 union i2c_smbus_data.block 버퍼의 끝을 넘어 읽거나 쓸 수 있습니다:
BUG: KASAN: stack-out-of-bounds in stub_xfer (drivers/i2c/i2c-stub.c:223) Read of size 1 at addr ffff88800abcfd92 by task exploit/81 Call Trace: <TASK> stub_xfer (drivers/i2c/i2c-stub.c:223) __i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:593) i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:536) i2cdev_ioctl_smbus (drivers/i2c/i2c-dev.c:391) i2cdev_ioctl (drivers/i2c/i2c-dev.c:478) __x64_sys_ioctl (fs/ioctl.c:583) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130) </TASK>
이 버그는 i2c-stub가 .smbus_xfer를 직접 구현하여 i2c_smbus_xfer_emulated() 함수 내의 I2C_SMBUS_BLOCK_MAX 유효성 검증을 우회하기 때문에 발생합니다. 동일한 함수 내에서 I2C_SMBUS_BLOCK_DATA 케이스는 I2C_SMBUS_BLOCK_MAX에 대해 올바르게 검증하지만, I2C_SMBUS_I2C_BLOCK_DATA 케이스는 그렇지 않습니다.
동일한 함수 내의 I2C_SMBUS_BLOCK_DATA 케이스 및 i2c_smbus_xfer_emulated() 내의 I2C_SMBUS_I2C_BLOCK_DATA 검증을 모두 준수하여 data->block[0] == 0 또는 data->block[0] > I2C_SMBUS_BLOCK_MAX인 전송을 -EINVAL로 거부함으로써 수정합니다.
Once again VulDB remains the best source for vulnerability data.