CVE-2026-79979 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 10. 23.

arm64 MMU 백엔드의 invalidate_tlb_page() 함수(arch/arm64/core/mmu.c에 위치)는 TLBI VAE1{IS} 명령어를 virt >> 12를 피연산자로 사용하여 단일 가상 주소를 TLB에서 무효화합니다. 이 피연산자는 비트 [63:48]에 ASID를 인코딩하므로, 해당 무효화는 ASID 0(커널 페이지 테이블)와 글로벌 엔트리에만 일치했습니다. 그러나 메모리 도메인은 arch_mem_domain_init()에서 시작하여 ASID 1부터 할당되며, private_map()에 의해 생성된 모든 도메인 전용 리프는 MT_NG(즉, 비글로벌)로 매핑됩니다. 따라서 도메인의 캐시된 변환은 무효화 과정에서 살아남았습니다.

invalidate_tlb_page()의 모든 호출자는 데몬 페이징(demand-paging) 경로입니다. 교체 알고리즘이 프레임 회수를 수행할 때 kernel/mmu.c의 page_frame_prepare_locked()는 arch_mem_page_out()을 호출하여 커널 리프를 무효로 표시하고, sync_domains()를 통해 해당 무효 설명자를 모든 도메인에 전파한 후 ASID 0만 플러시합니다. do_page_fault()은 즉시 동일한 페이지 프레임을 진입하는 매핑에 재사용하기 위해 arch_mem_page_in()을 호출합니다. 이미 교체된 페이지에 접근했던 사용자 스레드(arch_mem_domain_partition_add()로 추가된 k_mem_partition 또는 map_thread_stack()으로 매핑된 자체 스택 등)는 자신의 ASID 하에서 해당 물리적 프레임에 대한 유효한 EL0 읽기/쓰기 변환을 유지합니다.

사용자 스레드 내에서 실행되는 비특권 코드는 메모리 압력을 유발하여 교체를 강제하고, 이후에도 stale(구식) 주소에 계속 접근함으로써 커널이 나중에 해당 프레임에 배치한 내용(슈퍼바이저 데이터, 다른 메모리 도메인의 파티션 또는 다른 스레드의 스택 등)에 대한 읽기 및 쓰기 액세스 권한을 획득할 수 있습니다. 이는 CONFIG_USERSPACE가 강제하려는 격리를 무력화하여 정보 유출과 메모리 손상, 나아가 시스템 전체의 완전한 침해로 이어질 수 있습니다.

이 수정은 구현을 TLBI VAAE1{IS}로 전환하여 모든 ASID와 글로벌 및 비글로벌 엔트리에 일치하도록 하여, 페이지 아웃(demand paging), 더티 비트 업데이트 또는 액세스 플래그 클리어 시 도메인 태그가 붙은 변환이 살아남지 않도록 합니다. 공격에는 CONFIG_USERSPACE와 CONFIG_DEMAND_PAGING가 모두 활성화된 arm64 빌드, 활성 백킹 스토어(backing store) 및 사용자 메모리 도메인에 비공개로 매핑된 적어도 하나의 데몬 페이징 페이지가 필요합니다. 동일한 커밋은 또한 globalize_table()이 페이징 동기화 중 도메인 전용 리프에서 EL0 권한과 비글로벌 속성을 제거하지 않도록 하여, 이전에 발생하던 사용자 스레드의 자체 파티션 및 스택 접근 손실 문제를 해결합니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Zephyr

예약하다

2026. 08. 25.

모더레이션

수락

항목

VDB-426019

EPSS

0.00000

활동

낮음

출처

Do you need the next level of professionalism?

Upgrade your account now!