🇰🇷 한글 설명
Linux 커널의 xen/pvcalls 구성 요소에서 백엔드가 제공하는 req_id를 검증 없이 배열 인덱스로 사용하여 발생하는 경계 외 쓰기(Out-of-bounds write) 취약점입니다. req_id가 부호 있는 정수(int)로 선언되어 있어 음수 값에 대한 검증을 우회할 수 있으며, 이를 통해 메모리 오염이 가능합니다.
💡 쉬운 설명
악의적인 백엔드 프로그램이 잘못된 번호를 보내면 컴퓨터의 중요한 메모리 영역을 망가뜨릴 수 있는 결함입니다. 이로 인해 시스템이 멈추거나 보안이 뚫릴 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xen/pvcalls: bound backend response req_id before indexing rsp[]
pvcalls_front_event_handler() takes req_id directly from the
backend-supplied ring response and uses it to index the fixed-size
bedata->rsp[] array for a memcpy() and a store, with no range check. A
malicious or buggy backend can set req_id past PVCALLS_NR_RSP_PER_RING
and drive an out-of-bounds write past the bedata allocation.
req_id was also declared int while the wire field rsp->req_id is u32, so
a range check on the signed value alone is insufficient: a backend
req_id of 0xffffffff becomes -1, passes a >= PVCALLS_NR_RSP_PER_RING
test and indexes bedata->rsp[-1]. Declare req_id as u32 so a single
bound covers both ends.
A backend that sends an out-of-range req_id has violated the wire
protocol, so rather than silently dropping the response, log once and
stop trusting the backend: set bedata->disabled. The event handler then
ignores further responses, and the request paths that wait for a
response return -EIO instead of blocking forever. This mirrors the
fatal-error handling xen-netback uses (xenvif_fatal_tx_err()).
The pvcalls frontend currently trusts its backend, so this is not a
classic-Xen security issue, but it matters for hardening PV frontends
against malicious backends (confidential and disaggregated deployments).
📍 영향받는 시스템
Linux kernel (xen/pvcalls 관련 모듈 사용 시스템)
⚔️ 공격 벡터
악의적이거나 버그가 있는 Xen 백엔드가 유효 범위를 벗어난 req_id를 전송하여 메모리 쓰기 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 req_id 타입 변경 및 범위 검증 로직 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.