🇰🇷 한글 설명
Linux 커널의 MCP2221 HID 드라이버에서 I2C/SMBus 전송 완료 후 수신 버퍼(rxbuf)를 초기화하지 않아 발생하는 Use-After-Free 취약점입니다. 전송이 끝난 후에도 버퍼 포인터가 남아 있어, 메모리가 해제된 후 데이터가 복사될 경우 시스템 오류나 권한 상승을 초래할 수 있습니다.
💡 쉬운 설명
데이터를 주고받는 과정이 끝났는데도 컴퓨터가 예전에 사용했던 메모리 주소를 계속 기억하고 있어 발생하는 문제입니다. 이로 인해 이미 비워진 메모리 공간에 잘못된 데이터를 쓰게 되어 시스템이 고장 나거나 해킹될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
HID: mcp2221: clear rxbuf after I2C/SMBus transfer completes
mcp_i2c_smbus_read() stores the caller-supplied buffer pointer in
mcp->rxbuf for the duration of a transfer but never clears it when the
transfer finishes or times out. Once the caller frees or reuses the
buffer, mcp->rxbuf becomes a dangling pointer. A delayed or spurious
MCP2221_I2C_GET_DATA report can then drive mcp2221_raw_event() to
memcpy device data into the freed memory, causing a write
use-after-free.
Route all return paths through a single exit point that clears
mcp->rxbuf and mcp->rxbuf_size, so that the existing !mcp->rxbuf guard
in the raw_event handler can reject any report arriving after the
transfer has ended.
📍 영향받는 시스템
MCP2221 HID 드라이버를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
지연되거나 잘못된 MCP2221_I2C_GET_DATA 보고를 유도하여 해제된 메모리에 데이터를 쓰는 방식
🛡️ 대응 방법
I2C/SMBus 전송 완료 또는 타임아웃 시 mcp->rxbuf와 mcp->rxbuf_size를 명확히 초기화하도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 보안 패치가 적용되었는지 확인합니다.