🇰🇷 한글 설명
Linux 커널의 ibmasm 구성 요소에서 ibmasm_send_i2o_message() 함수가 사용자 제어 필드를 검증 없이 사용하여 힙 오버리드(Heap Over-read) 취약점이 발생합니다. 공격자는 조작된 헤더 필드를 통해 커널 힙 메모리의 약 65KB를 읽어 서비스 프로세서로 전송할 수 있으며, 이는 메모리 정보 유출 및 서비스 프로세서의 동기화 오류를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 운영체제(커널)에서 메모리 크기를 확인하지 않고 데이터를 읽는 실수가 발견되었습니다. 해커가 이 허점을 이용하면 시스템 내부의 중요한 정보를 몰래 훔쳐보거나 시스템 동작을 방해할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ibmasm: fix heap over-read in ibmasm_send_i2o_message()
The ibmasm_send_i2o_message() function uses get_dot_command_size() to
compute the byte count for memcpy_toio(), but this value is derived from
user-controlled fields in the dot_command_header (command_size: u8,
data_size: u16) and is never validated against the actual allocation size.
A root user can write a small buffer with inflated header fields, causing
memcpy_toio() to read up to ~65 KB past the end of the allocation into
adjacent kernel heap, which is then forwarded to the service processor
over MMIO.
Silently clamping the copy size is not sufficient: if the header fields
claim a larger size than the buffer, the SP receives a dot command whose
own header is inconsistent with the I2O message length, which can cause
the SP to desynchronize. Reject such commands outright by returning
failure.
Validate command_size before calling get_mfa_inbound() to avoid leaking
an I2O message frame: reading INBOUND_QUEUE_PORT dequeues a hardware
frame from the controller's free pool, and returning without a
corresponding set_mfa_inbound() call would permanently exhaust it.
Additionally, clamp command_size to I2O_COMMAND_SIZE before the
memcpy_toio() so the MMIO write stays within the I2O message frame,
consistent with the clamping already performed by outgoing_message_size()
for the header field.
📍 영향받는 시스템
Linux kernel (ibmasm 모듈 사용 시스템)
⚔️ 공격 벡터
루트 권한을 가진 사용자가 조작된 크기 값을 가진 dot_command_header를 전달하여 메모리 오버리드 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 ibmasm의 입력 값 검증 로직 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.