🇰🇷 한글 설명
Linux 커널의 iio: accel: bmc150 드라이버에서 스택 기반 버퍼 오버플로우 취약점이 발견되었습니다. 하드웨어 FIFO에서 보고하는 프레임 수가 버퍼 크기보다 클 경우, 스택의 카나리, 저장된 레지스터 및 반환 주소를 덮어쓸 수 있습니다.
💡 쉬운 설명
가속도 센서가 실제 저장 공간보다 더 많은 데이터를 보내도록 속이면, 컴퓨터의 중요한 메모리 영역을 망가뜨릴 수 있는 문제입니다. 이를 통해 해커가 시스템의 제어권을 탈취할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iio: accel: bmc150: clamp the device-reported FIFO frame count
__bmc150_accel_fifo_flush() copies the number of samples the device
reports in its hardware FIFO into an on-stack buffer
u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
which is sized for at most BMC150_ACCEL_FIFO_LENGTH (32) samples. The
frame count is read from the FIFO_STATUS register and only masked to its
7 valid bits:
count = val & 0x7F;
so it can be 0..127. The only other limit applied to it is the optional
caller-supplied sample budget:
if (samples && count > samples)
count = samples;
which does not constrain count on the flush-all path (samples == 0), and
leaves it well above 32 whenever samples is larger. count samples are
then transferred into buffer[]:
bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
bmc150_accel_fifo_transfer() reads count * 6 bytes through regmap, so a
malfunctioning, malicious or counterfeit accelerometer (or an attacker
tampering with the I2C/SPI bus) that reports up to 127 frames writes up
to 762 bytes into the 192-byte buffer: a stack out-of-bounds write of up
to 570 bytes that clobbers the stack canary, saved registers and the
return address.
Clamp count to BMC150_ACCEL_FIFO_LENGTH, the number of samples buffer[]
is sized for, before the transfer, mirroring the watermark clamp already
done in bmc150_accel_set_watermark(). A well-formed flush reports at most
BMC150_ACCEL_FIFO_LENGTH frames, so legitimate devices are unaffected.
📍 영향받는 시스템
Linux kernel (bmc150 accelerometer driver 포함 버전)
⚔️ 공격 벡터
악의적인 하드웨어 또는 I2C/SPI 버스 조작을 통한 조작된 FIFO 프레임 수 보고
🛡️ 대응 방법
커널 패치를 적용하여 FIFO 프레임 수를 버퍼 크기(BMC150_ACCEL_FIFO_LENGTH)로 제한(Clamp)해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.