🇰🇷 한글 설명
Linux 커널의 libceph 구성 요소에서 Ceph 모니터나 OSD로부터 손상된 osdmap을 수신할 경우, 유효하지 않은 OSD 인덱스를 사용하는 취약점이 발견되었습니다. primary_temp에서 가져온 인덱스에 대한 검증이 누락되어, 잘못된 인덱스를 참조할 때 배열 범위를 벗어난 메모리 접근(Out-of-bounds access)이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터 시스템이 잘못된 번호표를 가진 데이터를 받았을 때, 존재하지 않는 번호를 확인하려다 시스템이 멈추거나 오류가 발생하는 문제입니다. 이로 인해 시스템의 중요한 메모리 영역에 잘못 접근할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
libceph: Avoid using invalid osd indices from primary_temp
A corrupted osdmap received from a Ceph monitor or OSD may contain osd
indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts
that don't exist, i.e., that are greater than max_osd or smaller than
CEPH_HOMELESS_OSD (-1). These indices are used to create the up and
acting set in ceph_pg_to_up_acting_osds(), called from calc_target().
While most of these osd indices are checked, the one from primary_temp
is not. Subsequently, this may lead to calc_target() returning this
(potentially invalid) index as target osd for a (linger) request.
Because the osd_state, osd_weight, and osd_addr arrays only contain
max_osd entries (with indices 0 to max_osd -1), this leads to
out-of-bounds accesses when trying to read values from these arrays.
This patch fixes the issue by adding a check to get_temp_osds(), so that
only valid osd indices from primary_temp are used, and it falls back to
using the primary from pg_temp or the up set if it is invalid.
[ idryomov: changelog ]
📍 영향받는 시스템
Linux kernel (libceph module 사용 환경)
⚔️ 공격 벡터
손상된 osdmap 데이터를 Ceph 모니터 또는 OSD를 통해 전달하여 유효하지 않은 OSD 인덱스를 유도함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 get_temp_osds()의 인덱스 검증 로직을 적용해야 함
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 배포판 보안 공지를 통해 대조함