🇰🇷 한글 설명
Linux 커널의 iio: gyro: itg3200 드라이버에서 I2C 읽기 작업 시 잘못된 스택 위치에 데이터를 기록하는 취약점이 발견되었습니다. 이로 인해 실제 센서 데이터 대신 초기화되지 않은 스택 메모리 내용이 사용자 공간으로 유출될 수 있습니다.
💡 쉬운 설명
자이로스코프 센서 데이터를 읽어올 때 데이터가 저장될 위치를 잘못 지정하여, 실제 센서 값 대신 컴퓨터 내부의 민감한 메모리 정보가 노출될 수 있는 문제입니다. 이는 데이터가 제대로 전달되지 않는 기능적 오류와 정보 유출 문제를 동시에 일으킵니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iio: gyro: itg3200: fix i2c read into the wrong stack location
itg3200_read_all_channels() takes `__be16 *buf' as a parameter and
fills the i2c_msg destination as `(char *)&buf'. Since `buf' is the
parameter (a pointer), `&buf' is the address of the local pointer
slot on the stack of itg3200_read_all_channels(), not the address
of the caller's scan buffer. The (char *) cast hides the type
mismatch.
i2c_transfer() therefore writes ITG3200_SCAN_ELEMENTS * sizeof(s16)
= 8 bytes into the parameter's stack slot, which is discarded when
the function returns. The caller's scan buffer in
itg3200_trigger_handler() is never written to, so
iio_push_to_buffers_with_timestamp() pushes uninitialised stack
contents to userspace via /dev/iio:deviceX every scan -- both a
functional bug (no actual gyroscope or temperature data is
delivered through the triggered buffer) and an information leak.
The non-buffered read_raw() path is unaffected: it goes through
itg3200_read_reg_s16() which uses `&out' on a local s16 value,
where that is correct.
Drop the spurious `&' so the i2c read writes into the caller's
buffer.
📍 영향받는 시스템
Linux kernel (itg3200 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
로컬 사용자가 /dev/iio:deviceX 장치를 통해 초기화되지 않은 커널 스택 메모리 내용을 읽어내는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 itg3200_read_all_channels 함수 내 잘못된 포인터 참조를 수정해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.