CVE-2026-63799 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 19.

리눅스 커널에서 다음 취약점이 해결되었습니다:

sched/mmcid: fixup 경로에서 CID가 MM_CID_UNSET일 때 clear_bit의 OOB(범위 밖) 발생 수정

mm_cid_fixup_cpus_to_tasks() 함수 내에서 rq->curr이 대상 mm를 가지고 있고 mm_cid.active가 설정되어 있는 경우, 전환 비트를 설정하기 전에 cid_in_transit()을 사용하여 CID가 검사됩니다. per-CPU 모드에서는 새로 fork되거나 execve된 태스크가 schedule-in 시점에 CIDs가 지연 할당되므로 mm_cid.cid == MM_CID_UNSET 상태로 실행될 수 있습니다. cid_in_transit()은 MM_CID_UNSET(전환 비트 없음)에 대해 가드를 통과하여 이를 MM_CID_UNSET | MM_CID_TRANSIT로 변환하고 다시 저장합니다. 이후 mm_cid_schedout()에서 이 값을 clear_bit()의 인자로 전달할 때, bit number로서 MM_CID_UNSET이 사용되어 범위 밖(OOB) 메모리 쓰기가 발생합니다.

증상: 이는 실제 메모리 손상이지만 임의적인 것이 아닌 제한된 범위의 OOO 쓰기입니다. MM_CID_UNSET은 고정된 sentinel 값인 BIT(31)이므로, 잘못된 값이 mm_cid_schedout()에 도달하면 cid_from_transit_cid() 함수가 MM_CID_UNSET을 제거합니다. 이는 "cid < max_cids" 수렴 테스트에서 실패하여 mm_drop_cid() -> clear_bit(MM_CID_UNSET, mm_cidmask(mm))로 이어집니다. cid 비트맵은 mm_struct 슬랩 객체 내부에 위치하며(cpu_bitmap 및 mm_cpus_allowed 이후), 너비는 num_possible_cpus() 비트입니다. 따라서 bit 31을 지우는 것은 고정된 오프셋(비트맵 기준 2^31 / 8 == 256 MiB 뒤)에서 결정론적인 OOO(bit clear) 연산이 됩니다. 주소는 공격자가 영향을 줄 수 없습니다(fixed sentinel -> fixed offset). 또한 이 작업은 단일 비트만 지웁니다. 직접 매핑(direct map)상 그로부터 256 MiB 더 떨어진 곳에는 우연히 존재하는 커널 객체가 있으므로, 이는 예측 불가능한 커널 메모리의 단 하나의 비트를 손상시킵니다. 즉, 임의 주소 또는 임의 값에 대한 쓰기가 아닙니다.

이 취약점은 per-CPU CID 모드에서만 트리거됩니다. 구체적으로는 CPU가 대상 mm의 활성 태스크 중 cid가 아직 MM_CID_UNSET인 상태에서 실행되고 있을 때 발생합니다(해당 태스크의 다음 schedule-in 전에 fork()/execve() 창에서 실제 CID가 할당되기 전). 그리고 per-CPU -> per-task fixup이 이를 처리할 때 발생하며, 이는 스레드 종료(sched_mm_cid_exit()), 또는 mm_cid_work_fn()에서의 지연된 max_cids 재계산에 의해驱动的 모드 폴백(mode fallback) 시 발생합니다.

실제 환경에서 syzkaller는 __schedule -> mm_cid_switch_to 호출 경로에서 KASAN use-after-free로 이를 보고했으며, 문제의 clear_bit() 함수는 mm_cid_schedout() -> mm_drop_cid()를 통해 인라인되어 있습니다.

기존 cid_in_transit() 검사 외에도 MM_CID_UNSET에 대한 전환 비트 할당 가드를 추가하여, 해당 비트가 실제 태스크 소유 CID에만 설정되도록 합니다. 실행 중인 활성 태스크의 CPU 소유(MM_CID_ONCPU) CID는 위의 cid_on_cpu(pcp->cid) 분기에서 처리되며 이 경로로 도달하지 않으므로, MM_CID_UNSET(및 이미 전환 중인 경우)을 제외하는 것으로 충분합니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

출처

Interested in the pricing of exploits?

See the underground prices here!