🇰🇷 한글 설명
Linux 커널의 touchwin 드라이버에서 패킷 인덱스 초기화 로직의 결함으로 인해 발생하는 취약점입니다. 악의적인 장치가 특정 조건을 충족하지 않는 데이터를 지속적으로 전송할 경우, 인덱스가 초기화되지 않고 계속 증가하여 힙 메모리 영역을 벗어나는 경계 외 쓰기(Out-of-bounds write)가 발생할 수 있습니다.
💡 쉬운 설명
터치스크린 장치가 조작된 데이터를 보낼 때, 컴퓨터의 메모리 저장 공간을 넘어서 데이터를 계속 써버리는 오류입니다. 이로 인해 시스템이 멈추거나 해커가 컴퓨터를 제어할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Input: touchwin - reset the packet index on every complete packet
tw_interrupt() accumulates each non-zero serial byte into a fixed
three-byte buffer with a running index that is only reset once a full
packet has been received *and* the device's two Y bytes agree:
tw->data[tw->idx++] = data;
if (tw->idx == TW_LENGTH && tw->data[1] == tw->data[2]) {
...
tw->idx = 0;
}
The reset is gated on tw->data[1] == tw->data[2], a value the device
controls. A malicious, malfunctioning or counterfeit Touchwindow
peripheral can stream non-zero bytes whose 2nd and 3rd bytes differ: the
index reaches TW_LENGTH without the equality holding, is never reset, and
keeps growing, so tw->data[tw->idx++] walks off the end of the three-byte
array and the rest of the heap-allocated struct tw, one attacker-chosen
byte at a time -- an unbounded, device-driven heap out-of-bounds write.
Reset the index on every completed packet and report an event only when
the two Y bytes match, like the other serio touchscreen drivers do.
📍 영향받는 시스템
Linux kernel (touchwin driver 포함 버전)
⚔️ 공격 벡터
조작되거나 결함이 있는 Touchwindow 주변기기를 통한 물리적/연결 기반의 힙 메모리 오염
🛡️ 대응 방법
패킷 완료 시마다 인덱스를 초기화하도록 커널 드라이버를 업데이트하거나 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.